[PATCH 01/10] score: Add get/set affinity to Scheduler Framework.

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Apr 1 19:05:52 UTC 2014


On 04/01/2014 07:42 PM, Jennifer Averett wrote:
> I just spoke with Joel and he had these comments to add:
>
> " I agree with Seb's comment on the default set/get behavior.
>
> If we can get by with a boolean return value, that's OK.
>
> Do a man pthread_setaffinity_np and check the errors listed.
> My response to Seb on that is that we must ensure that the
> API code follows the Linux code we are trying to be compatible
> with.
>
> I don't see the case moving base API checks into the schedulers.
> "
>
> The set affinity errors are
> EFAULT A supplied memory address was invalid.
> EINVAL (pthread_setaffinity_np()) The affinity bit mask mask contains no processors that are currently physically on the system and permitted to the thread
>                according to any restrictions that may be imposed by the "cpuset" mechanism described in cpuset(7).
> EINVAL (pthread_setaffinity_np()) cpuset specified a CPU that was outside the set supported by the kernel.  (The kernel configuration option CONFIG_NR_CPUS
>                defines the range of the set supported by the kernel data type used to represent CPU sets.)
> EINVAL (pthread_getaffinity_np()) cpusetsize is smaller than the size of the affinity mask used by the kernel.
> ESRCH  No thread with the ID thread could be found.
>
>
> I'd like to add for the classic we have
> RTEMS_INVALID_ADDRESS
> RTEMS_INVALID_NUMBER
> RTEMS_INVALID_ID
>
> At a minimum the NULL address check must be distinguished from the
> Cpuset having incorrect values.  If all of those checks get moved down into
> the scheduler a bool can not be used.

The trivial NULL pointer checks can be done in the high level 
functions.  The scheduler operations should not bother with NULL 
pointers.  I think all these NULL pointer checks are superfluous, but 
all right, we have this stuff now.

>
> Additionally, just as a side note, all the other scheduler routines do not return
> bool in a pass fail situation but return an int.

There is only one scheduler operation that returns an int, and this is 
the compare priority compare function.  A lot of compare functions use 
the same semantics.

>
> Jennifer
>
>> -----Original Message-----
>> From: Sebastian Huber [mailto:sebastian.huber at embedded-brains.de]
>> Sent: Tuesday, April 01, 2014 3:02 AM
>> To: Jennifer Averett
>> Cc: Gedare Bloom; RTEMS Devel
>> Subject: Re: [PATCH 01/10] score: Add get/set affinity to Scheduler
>> Framework.
>>
>> On 2014-04-01 15:50, Jennifer Averett wrote:
>>>>>>>>> +  /**
>>>>>>>>> +   * @brief Get affinity for the default scheduler.
>>>>>>>>> +   *
>>>>>>>>> +   * @param[in] thread The associated thread.
>>>>>>>>> +   * @param[in] cpusetsize The size of the cpuset.
>>>>>>>>> +   * @param[out] cpuset Affinity set containing all CPUs.
>>>>>>>>> +   *
>>>>>>>>> +   * @retval 0 Successfully got cpuset
>>>>>>>>> +   * @retval -1 The cpusetsize is invalid for the system
>>>>>>>>> +   */
>>>>>>>>> +  int _Scheduler_default_Get_affinity(
>>>>>>>>> +    Thread_Control *thread,
>>>>>>>>> +    size_t          cpusetsize,
>>>>>>>>> +    cpu_set_t      *cpuset
>>>>>>>>> +  );
>>>>>>>>> +
>>>>>>>>> +  /**
>>>>>>>>> +   * @brief Set affinity for the default scheduler.
>>>>>>>>> +   *
>>>>>>>>> +   * @param[in] thread The associated thread.
>>>>>>>>> +   * @param[in] cpusetsize The size of the cpuset.
>>>>>>>>> +   * @param[in] cpuset Affinity new affinity set.
>>>>>>>>> +   *
>>>>>>>>> +   * @retval 0 Successful
>>>>>>>>> +   *
>>>>>>>>> +   *  This method always returns successful and does not save
>>>>>>>>> +   *  the cpuset.
>>>>>>>>> +   */
>>>>>>>>> +  int _Scheduler_default_Set_affinity(
>>>>>>>>> +    Thread_Control *thread,
>>>>>>>>> +    size_t          cpusetsize,
>>>>>>>>> +    cpu_set_t      *cpuset
>>>>>>>>> +  );
>>>>>>>>> +#endif
>>>>>>>
>>>>>>> I would rather use bool or an enum for the return status instead
>>>>>>> of this int.
>>>>>>>
>>>>>>> The default set affinity operation should accept only CPU sets
>>>>>>> that specify the complete set of available processors, e.g. for a
>>>>>>> three processor system it should be bits 0, 1, and 2 set, all
>>>>>>> other bits cleared (e.g. (1 << CPU
>>>>>>> count) - 1).
>>>>>>>
>>>>>>> The default get affinity operation should return the CPU sets
>>>>>>> reflecting all available processors.
>>>>>>>
>>>>> I agree with the logic for the defaults Sebastian suggests.
>>> Actually no scheduler should be allowed to set the affinity to A cpu
>>> that the system doesn't support.  Currently those checks are called
>>> from the API methods.
>>>
>> I thought this is check in the high level code is only a temporary solution?
>> The responsibility for thread processor affinity management should move
>> entirely to the scheduler.
>>
>> --
>> Sebastian Huber, embedded brains GmbH
>>
>> Address : Dornierstr. 4, D-82178 Puchheim, Germany
>> Phone   : +49 89 189 47 41-16
>> Fax     : +49 89 189 47 41-09
>> E-Mail  : sebastian.huber at embedded-brains.de
>> PGP     : Public key available on request.
>>
>> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.


-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.




More information about the devel mailing list