example: hello: set cpu affinity from cgroup

Message ID 5873AFA1.50509@linaro.org
State New
Headers show

Commit Message

Maxim Uvarov Jan. 9, 2017, 3:43 p.m.
Hello Krishna,

I think in that case it's better to ask ODP for core number for first
available control thread number. Like that:




On 01/09/17 15:54, Mike Holmes wrote:
> On 9 January 2017 at 07:03, Balakrishna Garapati <

> balakrishna.garapati@linaro.org> wrote:

> 

>> This will resolve the test in ci when using cgroups

>>

> 

> Can you just add a line saying what the issue was, it is easier to decided

> if the patch achieves that

> 

> 

>> Signed-off-by: Balakrishna Garapati <balakrishna.garapati@linaro.org>

> 

> ---

>>  example/hello/odp_hello.c | 19 ++++++++++++++++---

>>  1 file changed, 16 insertions(+), 3 deletions(-)

>>

>> diff --git a/example/hello/odp_hello.c b/example/hello/odp_hello.c

>> index 6d114ee..59a31b2 100644

>> --- a/example/hello/odp_hello.c

>> +++ b/example/hello/odp_hello.c

>> @@ -60,16 +60,29 @@ int main(int argc, char *argv[])

>>         options_t opt;

>>         pid_t pid;

>>         cpu_set_t cpu_set;

>> -       int i;

>> +       int i, ret, first_cpu = 0, cpu;

>> +

>> +       pid = getpid();

>> +       ret = sched_getaffinity(pid, sizeof(cpu_set_t), &cpu_set);

>> +       if (ret < 0) {

>> +               printf("get CPU affinity failed.\n");

>> +               return -1;

>> +       }

>> +

>> +       for (cpu = 0; cpu < CPU_SETSIZE; cpu++) {

>> +               if (CPU_ISSET(cpu, &cpu_set)) {

>> +                       first_cpu = cpu;

>> +                       break;

>> +               }

>> +       }

>>

>>         memset(&opt, 0, sizeof(opt));

>> -       opt.cpu = 0;

>> +       opt.cpu = first_cpu;

>>         opt.num = 1;

>>

>>         if (parse_args(argc, argv, &opt))

>>                 return -1;

>>

>> -       pid = getpid();

>>         CPU_ZERO(&cpu_set);

>>         CPU_SET(opt.cpu, &cpu_set);

>>

>> --

>> 1.9.1

>>

>>

> 

>

Patch

--- a/example/hello/odp_hello.c
+++ b/example/hello/odp_hello.c
@@ -61,6 +61,7 @@  int main(int argc, char *argv[])
        pid_t pid;
        cpu_set_t cpu_set;
        int i;
+       odp_cpumask_t mask;

        memset(&opt, 0, sizeof(opt));
        opt.cpu = 0;
@@ -70,6 +71,15 @@  int main(int argc, char *argv[])
                return -1;

        pid = getpid();
+
+       if (odp_init_global(&inst, NULL, NULL)) {
+               printf("Global init failed.\n");
+               return -1;
+       }
+
+       odp_cpumask_default_control(&mask, 0);
+       opt.cpu = odp_cpumask_first(&mask);
+
        CPU_ZERO(&cpu_set);
        CPU_SET(opt.cpu, &cpu_set);

@@ -78,11 +88,6 @@  int main(int argc, char *argv[])
                return -1;
        }

-       if (odp_init_global(&inst, NULL, NULL)) {
-               printf("Global init failed.\n");
-               return -1;
-       }
-
        if (odp_init_local(inst, ODP_THREAD_CONTROL)) {
                printf("Local init failed.\n");
                return -1;