Message ID | 20170113132529.25320-1-maxim.uvarov@linaro.org |
---|---|
State | New |
Headers | show |
I still feel that we need to show a user how we expect ODP to be used on Linux. I hate to hold things up, and agree hello world needs to be minimal, but if we delete this then will there be any drive to add an example showing how we pin control and workers - CC Ravineet directly as he is workign in this area. I think we do need to close the door here and have a clear example in ODP on running ODP in the highest performance way. Mike On 13 January 2017 at 08:25, Maxim Uvarov <maxim.uvarov@linaro.org> wrote: > hello word app should not use any linux specific > things. Pinning thread to core is also optional > and should not be in minimal app. This also fixes > bug with cgroups env where core 0 is not available. > > Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> > --- > example/hello/odp_hello.c | 29 ++--------------------------- > 1 file changed, 2 insertions(+), 27 deletions(-) > > diff --git a/example/hello/odp_hello.c b/example/hello/odp_hello.c > index 6d114eea..0b75b58f 100644 > --- a/example/hello/odp_hello.c > +++ b/example/hello/odp_hello.c > @@ -10,21 +10,12 @@ > * anything else than the ODP API header file. > */ > > -/* Linux CPU affinity */ > -#define _GNU_SOURCE > -#include <sched.h> > - > -/* Linux PID */ > -#include <sys/types.h> > -#include <unistd.h> > - > #include <stdio.h> > #include <string.h> > > #include <odp_api.h> > > typedef struct { > - int cpu; > int num; > } options_t; > > @@ -36,17 +27,12 @@ static int parse_args(int argc, char *argv[], > options_t *opt) > for (i = 1; i < argc; i++) { > if ((strcmp(argv[i], args[0]) == 0) && > (sscanf(argv[i + 1], "%i", &tmp) == 1)) { > - opt->cpu = tmp; > - i++; > - } else if ((strcmp(argv[i], args[1]) == 0) && > - (sscanf(argv[i + 1], "%i", &tmp) == 1)) { > opt->num = tmp; > i++; > } else { > printf("\nUsage:\n" > - " %s CPU number\n" > " %s Number of iterations\n\n", > - args[0], args[1]); > + args[0]); > return -1; > } > } > @@ -58,26 +44,14 @@ int main(int argc, char *argv[]) > { > odp_instance_t inst; > options_t opt; > - pid_t pid; > - cpu_set_t cpu_set; > int i; > > memset(&opt, 0, sizeof(opt)); > - opt.cpu = 0; > opt.num = 1; > > if (parse_args(argc, argv, &opt)) > return -1; > > - pid = getpid(); > - CPU_ZERO(&cpu_set); > - CPU_SET(opt.cpu, &cpu_set); > - > - if (sched_setaffinity(pid, sizeof(cpu_set_t), &cpu_set)) { > - printf("Set CPU affinity failed.\n"); > - return -1; > - } > - > if (odp_init_global(&inst, NULL, NULL)) { > printf("Global init failed.\n"); > return -1; > @@ -85,6 +59,7 @@ int main(int argc, char *argv[]) > > if (odp_init_local(inst, ODP_THREAD_CONTROL)) { > printf("Local init failed.\n"); > + (void)odp_term_global(inst); > return -1; > } > > -- > 2.11.0.295.gd7dffce > > -- Mike Holmes Program Manager - Linaro Networking Group Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs "Work should be fun and collaborative, the rest follows"
On 01/13/17 18:31, Mike Holmes wrote: > I still feel that we need to show a user how we expect ODP to be used on > Linux. > > I hate to hold things up, and agree hello world needs to be minimal, but > if we delete this then will there be any drive to add an example showing > how we pin control and workers - CC Ravineet directly as he is workign > in this area. > I think we do need to close the door here and have a clear example in > ODP on running ODP in the highest performance way. > > Mike > Mike, here I replied with patch how pinning has to be done: https://lists.linaro.org/pipermail/lng-odp/2017-January/027625.html but if you read app description: /* This is a minimal application which demonstrates the startup and shutdown * steps of an ODP application. It can be also used to debug API related * build problems, etc. It does not use helpers to minimize dependency to * anything else than the ODP API header file. */ There is no any works about pining thread. That is not needed for odp. If you have only 1 cpu that is not needed. You can pin single thread app like that with command "taskset 0x1 ./app". So there is no any reason for that. Maxim. > On 13 January 2017 at 08:25, Maxim Uvarov <maxim.uvarov@linaro.org > <mailto:maxim.uvarov@linaro.org>> wrote: > > hello word app should not use any linux specific > things. Pinning thread to core is also optional > and should not be in minimal app. This also fixes > bug with cgroups env where core 0 is not available. > > Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org > <mailto:maxim.uvarov@linaro.org>> > --- > example/hello/odp_hello.c | 29 ++--------------------------- > 1 file changed, 2 insertions(+), 27 deletions(-) > > diff --git a/example/hello/odp_hello.c b/example/hello/odp_hello.c > index 6d114eea..0b75b58f 100644 > --- a/example/hello/odp_hello.c > +++ b/example/hello/odp_hello.c > @@ -10,21 +10,12 @@ > * anything else than the ODP API header file. > */ > > -/* Linux CPU affinity */ > -#define _GNU_SOURCE > -#include <sched.h> > - > -/* Linux PID */ > -#include <sys/types.h> > -#include <unistd.h> > - > #include <stdio.h> > #include <string.h> > > #include <odp_api.h> > > typedef struct { > - int cpu; > int num; > } options_t; > > @@ -36,17 +27,12 @@ static int parse_args(int argc, char *argv[], > options_t *opt) > for (i = 1; i < argc; i++) { > if ((strcmp(argv[i], args[0]) == 0) && > (sscanf(argv[i + 1], "%i", &tmp) == 1)) { > - opt->cpu = tmp; > - i++; > - } else if ((strcmp(argv[i], args[1]) == 0) && > - (sscanf(argv[i + 1], "%i", &tmp) == 1)) { > opt->num = tmp; > i++; > } else { > printf("\nUsage:\n" > - " %s CPU number\n" > " %s Number of iterations\n\n", > - args[0], args[1]); > + args[0]); > return -1; > } > } > @@ -58,26 +44,14 @@ int main(int argc, char *argv[]) > { > odp_instance_t inst; > options_t opt; > - pid_t pid; > - cpu_set_t cpu_set; > int i; > > memset(&opt, 0, sizeof(opt)); > - opt.cpu = 0; > opt.num = 1; > > if (parse_args(argc, argv, &opt)) > return -1; > > - pid = getpid(); > - CPU_ZERO(&cpu_set); > - CPU_SET(opt.cpu, &cpu_set); > - > - if (sched_setaffinity(pid, sizeof(cpu_set_t), &cpu_set)) { > - printf("Set CPU affinity failed.\n"); > - return -1; > - } > - > if (odp_init_global(&inst, NULL, NULL)) { > printf("Global init failed.\n"); > return -1; > @@ -85,6 +59,7 @@ int main(int argc, char *argv[]) > > if (odp_init_local(inst, ODP_THREAD_CONTROL)) { > printf("Local init failed.\n"); > + (void)odp_term_global(inst); > return -1; > } > > -- > 2.11.0.295.gd7dffce > > > > > -- > Mike Holmes > Program Manager - Linaro Networking Group > Linaro.org <http://www.linaro.org/>* **│ *Open source software for ARM SoCs > "Work should be fun and collaborative, the rest follows" > > __ > >
diff --git a/example/hello/odp_hello.c b/example/hello/odp_hello.c index 6d114eea..0b75b58f 100644 --- a/example/hello/odp_hello.c +++ b/example/hello/odp_hello.c @@ -10,21 +10,12 @@ * anything else than the ODP API header file. */ -/* Linux CPU affinity */ -#define _GNU_SOURCE -#include <sched.h> - -/* Linux PID */ -#include <sys/types.h> -#include <unistd.h> - #include <stdio.h> #include <string.h> #include <odp_api.h> typedef struct { - int cpu; int num; } options_t; @@ -36,17 +27,12 @@ static int parse_args(int argc, char *argv[], options_t *opt) for (i = 1; i < argc; i++) { if ((strcmp(argv[i], args[0]) == 0) && (sscanf(argv[i + 1], "%i", &tmp) == 1)) { - opt->cpu = tmp; - i++; - } else if ((strcmp(argv[i], args[1]) == 0) && - (sscanf(argv[i + 1], "%i", &tmp) == 1)) { opt->num = tmp; i++; } else { printf("\nUsage:\n" - " %s CPU number\n" " %s Number of iterations\n\n", - args[0], args[1]); + args[0]); return -1; } } @@ -58,26 +44,14 @@ int main(int argc, char *argv[]) { odp_instance_t inst; options_t opt; - pid_t pid; - cpu_set_t cpu_set; int i; memset(&opt, 0, sizeof(opt)); - opt.cpu = 0; opt.num = 1; if (parse_args(argc, argv, &opt)) return -1; - pid = getpid(); - CPU_ZERO(&cpu_set); - CPU_SET(opt.cpu, &cpu_set); - - if (sched_setaffinity(pid, sizeof(cpu_set_t), &cpu_set)) { - printf("Set CPU affinity failed.\n"); - return -1; - } - if (odp_init_global(&inst, NULL, NULL)) { printf("Global init failed.\n"); return -1; @@ -85,6 +59,7 @@ int main(int argc, char *argv[]) if (odp_init_local(inst, ODP_THREAD_CONTROL)) { printf("Local init failed.\n"); + (void)odp_term_global(inst); return -1; }
hello word app should not use any linux specific things. Pinning thread to core is also optional and should not be in minimal app. This also fixes bug with cgroups env where core 0 is not available. Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> --- example/hello/odp_hello.c | 29 ++--------------------------- 1 file changed, 2 insertions(+), 27 deletions(-) -- 2.11.0.295.gd7dffce