NBBS: A Non-Blocking Buddy System for Multi-core Machines
Romolo Marotta, Mauro Ianni, Alessandro Pellegrini, and Francesco Quaglia
Published in: Transactions on Computers, 2022
Download PDF
Abstract:
Common implementations of core memory allocation components handle concurrent allocation/release requests by synchronizing threads via spin-locks. This approach is not prone to scale, a problem that has been addressed in the literature by introducing layered allocation services or replicating the core allocators—the bottom-most ones within the layered architecture. Both these solutions tend to reduce the pressure of actual concurrent accesses to each individual core allocator. In this article, we explore an alternative approach to scalability of memory allocation/release, which can be still combined with those literature proposals. We present a fully non-blocking buddy system, where threads performing concurrent allocations/releases do not undergo any spin-lock based synchronization. Our solution allows threads to proceed in parallel, and commit their allocations/releases unless a conflict is materialized while handling the allocator metadata—memory fragmentation and coalescing is also carried out in a fully non-blocking manner. Conflict detection relies in our solution on atomic Read-Modify-Write (RMW) machine instructions, guaranteed to execute atomically by the processor firmware. We also provide a proof of the correctness of our non-blocking buddy system and show the results of a comparative study that outlines the advantages of our solution with respect to the Linux-kernel buddy system, which is one of the most diffused and optimized buddy systems in the state of the art.
BibTeX Entry:
author = {Marotta, Romolo and Ianni, Mauro and Pellegrini, Alessandro and Quaglia, Francesco},
title = {NBBS: A Non-Blocking Buddy System for Multi-core Machines},
journal = {Transactions on Computers},
year = {2022},
mon = mar,
publisher = {IEEE},
series = {TC},
doi = {10.1109/TC.2021.3060393},
volume = {71},
issue = {3},
pages = {599--612}
}