FUTEX2's sys_futex_waitv() Sent In For Linux 5.16 To Help Linux Gaming
The FUTEX2 work has been a long time coming and landing for Linux 5.16 is the main part: the sys_futex_waitv system call that allows for waiting on multiple futexes. This is very useful for the likes of Wine and Proton (Steam Play) for better matching the behavior of Microsoft Windows' WaitForMultipleObjects functionality. Making use of this new system call on Linux 5.16+ when patches land for Wine / Proton will allow for greater performance possibilities. Native Linux games may also make use of this system call directly or via a wrapper (e.g. glibc patches have been floated) as well for performance/efficiency benefits. The performance advantage may be in the ballpark of a few percent.
FUTEX2 originally was also going to incorporate variable-sized futexes, NUMA-awareness, and other improvements. That work though was pushed back to for now just getting sys_futex_waitv merged for the Linux gaming benefits and the other improvements can come later when ready.
This new code was sent in today for this first day of the Linux 5.16 merge window as the main addition of the locking updates changes this cycle. Linus should be pulling in the initial batch of 5.16 PRs in the coming hours.
There has been out-of-tree Proton/Wine patches while now that this system call is being mainlined, the patches will hopefully be upstreamed in short order.