Based on various discussions and feedbacks, I cooked a patch that implements the notion of private futexes (private to a process, in the spirit of POSIX pshared PTHREAD_PROCESS_PRIVATE ) [PATCH] futex : Add new PRIVATE futex primitives for performance improvements When a futex is privately used by a process, we dont really need to lookup the list of vmas of the process in order to discover if the futex is backed by a inode or by the mm struct. We dont really need to keep a refcount on the inode or mm. This patch introduces new futex calls, that could be used by user land (glibc of course) when private futexes are used. Avoiding vmas lookup means avoiding taking the mmap_sem (and forcing cacheline bouncings). Avoiding refcounting on underlying inode or mm struct also avoids cacheline bouncing. Thats two cacheline bounces avoided per FUTEX syscall glibc could use the new futex primitives introduced here (in particular for PTHREAD_PROCESS_PRIVATE semantic), and fallback to old one if running on older kernel. Fallback could set a global variable with the number of syscall so that only one failed syscall is done in the process lifetime. Note : Compatibility should be maintained by this patch, as old applications will use the 'SHARED' functionality, unchanged. Signed-off-by: Eric Dumazet