The ongoing FUTEX2 work for making the futex handling more like Windows to in turn help Windows games on Linux via Wine (with a focus on Steam Play’s Proton) has taken a new turn.
While the FUTEX2 patch series has gone through multiple rounds of review for adding new functionality that can’t be accomplished as well by the existing FUTEX, the patch series has been trimmed down to the core functionality that originally motivated this work: the ability to wait for multiple locks at once, similar to Windows’ WaitForMultipleObjects. This ability to cleanly wait on multiple locks simultaneously can lead to lower CPU utilization for Windows games running via Proton/Wine and help the overall performance for some games. On the kernel side this can be accomplished with the futex_waitv() system call (futex vectorized wait).
Prior versions of the FUTEX2 patches also were adding support for variable-sized futexes in a performance manner, NUMA-awareness, and other improvements. But now in focusing just on the new system call, the patch series is lighter for review and thus will hopefully be reviewed and picked up for mainlining more easily. Additional patches can always be added later.
More details on this lighter focus of the FUTEX2 patches now can be seen via this kernel mailing list thread. We’ll see now if this can get merged to mainline sooner, potentially as soon as Linux 5.15.