-
Type: Technical Debt
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
13
-
StorEng - Refinement Pipeline
WT makes use of the system API call sched_yield() through the portability wrapper __wt_yield(). However on Linux this call is non-deterministic unless used with the real-time scheduling policies SCHED_FIFO or SCHED_RR.
WT threads uses the default scheduling policy SCHED_DEFAULT also know as SCHED_OTHER.
The default Linux manual page is scornful of the use of sched_yield with the SCHED_OTHER policy:
sched_yield() is intended for use with real-time scheduling policies (i.e., SCHED_FIFO or SCHED_RR). Use of sched_yield() with nondeterministic scheduling policies such as SCHED_OTHER is unspecified and very likely means your application design is broken.
In consideration of this, revisiting the expectations and use of __wt_yield() is merited.
Notes:
- Windows porting layer uses SwitchThread() which has clear semantics.
- The behavior of sched_yield() in the MacOS microkernel should not be assumed to be the same.
This ticket is ambiguous as it involves research and consensus building as a prerequisite to any actual coding required.