Partitioned/clustered scheduling

Gedare Bloom gedare at rtems.org
Wed Nov 20 15:57:50 UTC 2013


On Wed, Nov 20, 2013 at 3:42 AM, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
> On 2013-11-19 18:36, Gedare Bloom wrote:
>>
>> On Tue, Nov 19, 2013 at 8:39 AM, Sebastian Huber
[...]
>>> >Two new functions should be added to alter and retrieve the processor
>>> >affinity
>>> >sets of threads.
>>> >
>>> >  /**
>>> >   * @brief Sets the processor affinity set of a task.
>>> >   *
>>> >   * @param[in] task_id Identifier of the task.  Use @ref RTEMS_SELF to
>>> >select
>>> >   * the executing task.
>>> >   * @param[in] affinity_set_size Size of the specified affinity set in
>>> >bytes.
>>> >   * This value must be positive.
>>> >   * @param[in] affinity_set The processor affinity set for the task.
>>> > This
>>> >   * pointer must not be @c NULL.  A set bit in the affinity set means
>>> > that
>>> >the
>>> >   * task can execute on this processor and an unset bit means the
>>> > opposite.
>>> >   *
>>> >   * @retval RTEMS_SUCCESSFUL Successful operation.
>>> >   * @retval RTEMS_INVALID_ID Invalid task identifier.
>>> >   * @retval RTEMS_INVALID_CPU_SET Invalid processor affinity set.
>>> >   */
>>> >  rtems_status_code rtems_task_set_affinity(
>>> >    rtems_id task_id,
>>> >    size_t affinity_set_size,
>>> >    const cpu_set_t *affinity_set
>>> >  );
>>> >
>>> >  /**
>>> >   * @brief Gets the processor affinity set of a task.
>>> >   *
>>> >   * @param[in] task_id Identifier of the task.  Use @ref RTEMS_SELF to
>>> >select
>>> >   * the executing task.
>>> >   * @param[in] affinity_set_size Size of the specified affinity set in
>>> >bytes.
>>> >   * This value must be positive.
>>> >   * @param[out] affinity_set The processor affinity set of the task.
>>> > This
>>> >   * pointer must not be @c NULL.  A set bit in the affinity set means
>>> > that
>>> >the
>>> >   * task can execute on this processor and an unset bit means the
>>> > opposite.
>>> >   *
>>> >   * @retval RTEMS_SUCCESSFUL Successful operation.
>>> >   * @retval RTEMS_INVALID_ID Invalid task identifier.
>>> >   * @retval RTEMS_INVALID_CPU_SET The affinity set is too small for the
>>> >   * processor affinity set of the task.
>>> >   */
>>> >  rtems_status_code rtems_task_get_affinity(
>>> >    rtems_id task_id,
>>> >    size_t affinity_set_size,
>>> >    cpu_set_t *affinity_set
>>> >  );
>>> >
>>
>> These classic API set/get affinity functions seem reasonable. They
>> mimic existing affinity interfaces nicely. Now users should do
>> rtems_task_create(), rtems_task_set_affinity(), rtems_task_start() in
>> order to specify the affinity of their tasks, correct?
>
>
> Yes, after reading it again, should we use the naming of the Linux man page
>
> http://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html
>
> affinity_set_size -> cpusetsize
> affinity_set -> cpuset
>
>
> ?
>
I wondered that myself when I read your description. I don't think it
matters much, but the translation for programmers who already know the
get/setaffinity() routines will be simpler if the parameter names
match. At this stage, I would lean to making the parameter names
similar to Linux, but with added underscores like we did for the type:
cpu_set_size, cpu_set. (Basically just replace affinity with cpu).

-Gedare

> --
> 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