On 9 September 2015 at 09:29, Maxim Uvarov <[email protected]> wrote:

> On 09/08/15 16:04, Alexandru Badicioiu wrote:
>
>> I agree, at least in my case some CPUs are assigned at boot time for
>> dataplane work and cannot be changed.
>>
>> Alex
>>
>>
> Alex, how do you run validation tests then? Do you have your own variant
> of odp helper to create threads?
>
> Maxim.
> [Alex] Some scheduling tests are constantly failing due to the thread
> creation an assignment to cores. We are looking forward to propose changes
> to scheduling tests to take into consideration coremasks for worker threads
> as well as scheduling groups.
>
>>
>> On 8 September 2015 at 15:57, Savolainen, Petri (Nokia - FI/Espoo) <
>> [email protected] <mailto:[email protected]>> wrote:
>>
>>     I'm wondering the use case for asking only the default number of
>>     CPUs suitable for worker threads (without asking CPU IDs).
>>
>>     I think application should ask the mask (and number of cpus) once
>>     and store the information for later use.
>>
>>
>>     -Petri
>>
>>
>>     > -----Original Message-----
>>     > From: lng-odp [mailto:[email protected]
>>     <mailto:[email protected]>] On Behalf Of
>>     > ext Maxim Uvarov
>>     > Sent: Tuesday, September 08, 2015 1:31 PM
>>     > To: [email protected] <mailto:[email protected]>
>>     > Subject: [lng-odp] [API-NEXT PATCH 3/4] api:
>>     odp_cpumask_default_ mask
>>     > argument can be null
>>     >
>>     > Functions odp_cpumask_default_worker and odp_cpumask_default_control
>>     > can be used for calculation number of worker and control threads. In
>>     > that case mask parameter can be optional.
>>     >
>>     > Signed-off-by: Maxim Uvarov <[email protected]
>>     <mailto:[email protected]>>
>>
>>     > ---
>>     >  include/odp/api/cpumask.h                 |  2 +-
>>     >  platform/linux-generic/odp_cpumask_task.c | 14 +++++++++-----
>>     >  2 files changed, 10 insertions(+), 6 deletions(-)
>>     >
>>     > diff --git a/include/odp/api/cpumask.h b/include/odp/api/cpumask.h
>>     > index 4835a6c..633e106 100644
>>     > --- a/include/odp/api/cpumask.h
>>     > +++ b/include/odp/api/cpumask.h
>>     > @@ -199,7 +199,7 @@ int odp_cpumask_next(const odp_cpumask_t
>>     *mask, int
>>     > cpu);
>>     >   * Initializes cpumask with CPUs available for worker threads.
>>     Sets up
>>     > to 'num'
>>     >   * CPUs and returns the count actually set. Use zero for all
>>     available
>>     > CPUs.
>>     >   *
>>     > - * @param[out] mask      CPU mask to initialize
>>     > + * @param[out] mask      CPU mask to initialize or NULL.
>>     >   * @param      num       Number of worker threads, zero for all
>>     > available CPUs
>>     >   * @return Actual number of CPUs used to create the mask
>>     >   */
>>     > diff --git a/platform/linux-generic/odp_cpumask_task.c
>>     > b/platform/linux-generic/odp_cpumask_task.c
>>     > index 535891c..f8e4da4 100644
>>     > --- a/platform/linux-generic/odp_cpumask_task.c
>>     > +++ b/platform/linux-generic/odp_cpumask_task.c
>>     > @@ -23,7 +23,8 @@ int odp_cpumask_default_worker(odp_cpumask_t
>>     *mask,
>>     > int num)
>>     >       if (ret != 0)
>>     >               ODP_ABORT("failed to read CPU affinity value\n");
>>     >
>>     > -     odp_cpumask_zero(mask);
>>     > +     if (mask)
>>     > +             odp_cpumask_zero(mask);
>>     >
>>     >       /*
>>     >        * If no user supplied number or it's too large, then attempt
>>     > @@ -35,7 +36,8 @@ int odp_cpumask_default_worker(odp_cpumask_t
>>     *mask,
>>     > int num)
>>     >       /* build the mask, allocating down from highest numbered
>>     CPU */
>>     >       for (cpu = 0, i = CPU_SETSIZE - 1; i >= 0 && cpu < num; --i) {
>>     >               if (CPU_ISSET(i, &cpuset)) {
>>     > -                     odp_cpumask_set(mask, i);
>>     > +                     if (mask)
>>     > +  odp_cpumask_set(mask, i);
>>     >                       cpu++;
>>     >               }
>>     >       }
>>     > @@ -45,8 +47,10 @@ int odp_cpumask_default_worker(odp_cpumask_t
>>     *mask,
>>     > int num)
>>     >
>>     >  int odp_cpumask_default_control(odp_cpumask_t *mask, int num
>>     > ODP_UNUSED)
>>     >  {
>>     > -     odp_cpumask_zero(mask);
>>     > -     /* By default all control threads on CPU 0 */
>>     > -     odp_cpumask_set(mask, 0);
>>     > +     if (mask) {
>>     > +             odp_cpumask_zero(mask);
>>     > +             /* By default all control threads on CPU 0 */
>>     > +             odp_cpumask_set(mask, 0);
>>     > +     }
>>     >       return 1;
>>     >  }
>>     > --
>>     > 1.9.1
>>     >
>>     > _______________________________________________
>>     > lng-odp mailing list
>>     > [email protected] <mailto:[email protected]>
>>     > https://lists.linaro.org/mailman/listinfo/lng-odp
>>     _______________________________________________
>>     lng-odp mailing list
>>     [email protected] <mailto:[email protected]>
>>     https://lists.linaro.org/mailman/listinfo/lng-odp
>>
>>
>>
>
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to