On Wed, 17 May 2023, Mathieu Desnoyers wrote:
Expose the "on-cpu" state for each thread through struct rseq to allow adaptative mutexes to decide more accurately between busy-waiting and calling sys_futex() to release the CPU, based on the on-cpu state of the mutex owner.
Oh yeah moving the spin stuff out of the kernel is much nicer.
It is only provided as an optimization hint, because there is no guarantee that the page containing this field is in the page cache, and therefore the scheduler may very well fail to clear the on-cpu state on preemption. This is expected to be rare though, and is resolved as soon as the task returns to user-space. The goal is to improve use-cases where the duration of the critical sections for a given lock follows a multi-modal distribution, preventing statistical guesses from doing a good job at choosing between busy-wait and futex wait behavior. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx> Cc: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> Cc: Jonathan Corbet <corbet@xxxxxxx> Cc: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx> Cc: Carlos O'Donell <carlos@xxxxxxxxxx> Cc: Florian Weimer <fweimer@xxxxxxxxxx> Cc: libc-alpha@xxxxxxxxxxxxxx --- include/linux/sched.h | 12 ++++++++++++ include/uapi/linux/rseq.h | 17 +++++++++++++++++ kernel/rseq.c | 14 ++++++++++++++ 3 files changed, 43 insertions(+)
Ie: previous efforts kernel/futex.c | 675 ++++++++++++++++++++++++++++++++++++++------ kernel/futex.c | 572 ++++++++++++++++++++++++++++++++++++------------- Thanks, Davidlohr