sys/sched.h: Reasonable value of SCHED_BATCH ?

brian.inglis@systematicsw.ab.ca brian.inglis@systematicsw.ab.ca
Mon Dec 9 16:19:42 GMT 2024


On 2024-12-09 08:35, Corinna Vinschen wrote:
> On Dec  9 08:42, Joel Sherrill wrote:
>> SCHED_SPOTADIC has been in POSIX a long time but does seem to be rarely
>> implemented. Per change history from the POSIX standard on sched.h:
>>
>> "the SCHED_SPORADIC scheduling policy is added for alignment with
>> IEEE Std 1003.1d-1999"
>>
>> RTEMS and QNX support it but I don't recall any other OSes with
>> SCHED_SPORADIC.
>>
>> SCHED_IDLE, SCHED_BATCH,  SCHED_DEADLINE, etc. are bespoke and not in
>> POSIX. Hopefully they will not be visible except where supported. It looks
>> like you are doing that.
>>
>> Others should speak up but I think for Linux, Cygwin, *BSD, etc where
>> binary compatibility is required, you will need to stick with the values
>> used now.
> 
> The question was how to add SCHED_BATCH.
> 
> - Either with an #ifdef maintaining Linux binary compat on all targets
>    except Cygwin (not possible due to binary compat to older versions of
>    itself) ...
> 
> - or by just adding an as yet unused numerical value, i.e., 6.
> 
> My stance here was that binary compat to Linux is not required,
> so another #ifdef like the one we already use for SCHED_OTHER
> just lessens readability.
> 
> But if somebody has an actual need to align the numerical values
> used for the SCHED constants, this would be the time to speak up.
> 
> Otherwise we just go with #define SCHED_BATCH 6.
> 
> 
> Corinna
> 
> 
>>
>> --joel
>>
>> On Mon, Dec 9, 2024 at 8:12 AM Christian Franke <
>> Christian.Franke@t-online.de> wrote:
>>
>>> This is related to this thread on cygwin-patches ML:
>>> https://sourceware.org/pipermail/cygwin-patches/2024q4/013105.html
>>>
>>> Which would be a reasonable integer value for a newly defined SCHED_BATCH ?
>>>
>>> Current newlib/libc/include/sys/sched.h:
>>>
>>> #if defined(__CYGWIN__) // see c1bfa897
>>> #define SCHED_OTHER    3
>>> #else
>>> #define SCHED_OTHER    0
>>> #endif
>>>
>>> #define SCHED_FIFO     1
>>> #define SCHED_RR       2
>>>
>>> #if defined(_POSIX_SPORADIC_SERVER)// __rtems__ only ?
>>> #define SCHED_SPORADIC 4
>>> #endif
>>>
>>> #if __GNU_VISIBLE
>>> #define SCHED_IDLE     5 // Recent addition (61c2f075)
>>> #endif
>>>
>>>
>>> Linux:
>>> #define SCHED_OTHER    0
>>> #define SCHED_FIFO     1
>>> #define SCHED_RR       2
>>> #define SCHED_BATCH    3
>>> /* SCHED_ISO: reserved but not implemented yet */
>>> #define SCHED_IDLE     5
>>> #define SCHED_DEADLINE 6
>>> #define SCHED_EXT      7
>>>
>>> FreeBSD:
>>> #define SCHED_FIFO     1
>>> #define SCHED_OTHER    2
>>> #define SCHED_RR       3
>>>
>>>
>>> First alternative: Align non-Cygwin value with Linux
>>>
>>> #if __GNU_VISIBLE
>>> #if defined(__CYGWIN__)
>>> #define SCHED_BATCH    0
>>> #else
>>> #define SCHED_BATCH    3
>>> #endif
>>> #endif
>>>
>>> Second alternative: Use next free value
>>>
>>> #if __GNU_VISIBLE
>>> ...
>>> #define SCHED_BATCH    6
>>> #endif
>>>
>>> Any preferences?

Would it make sense to add the BSD/Linux value comments, and also define the 
other known symbols?

-- 
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer     but when there is no more to cut
                                 -- Antoine de Saint-Exupéry


More information about the Newlib mailing list