Futex Scaling for Multi-core Systems
The Linux kernel provides futexes as building blocks for creating userspace
synchronization primitives. The main advantage, over more traditional schemes,
such as sysv ipc, is that futexes are extremely fast in uncontended scenarios,
avoiding any interaction with the kernel. Due to their overall architecture and
the availability of increasingly larger systems, futexes have presented a number
of challenges and bottlenecks on real systems. As such, there has been a good
amount of efforts to make them scale at a kernel level, but using futexes efficiently
at a user level is just as important. This talk is to provide both an overview of
futex internals as well as techniques and best practices for using futexes on multi-
core NUMA systems, avoiding common pitfalls and making better use of the available
hardware.
About
Davidlohr Bueso is a performance engineer at SUSE Labs. He is an active Linux
kernel contributor in areas such as synchronization primitives, memory
management, and IPC—all with a special focus on scalability.
Twitter:
@davidlohr
Website:
http://blog.stgolabs.net/