Goals
A good allocator should:
- Memory Usage (fragmentation/overhead)
- Performance (Tput)
- Scalability (linearly)
- Correctness
- Robustness
A good NVM allocator should:
- Recovery (time overhead)
- Programablility (easy-to-use)
- TODO….
Recovery
- Essentially, bitmap is a general method to maintain the peristent status of allocator. With bitmap, every bit can indicate this block is in-used or not
Defragmentation
Start-of-art
nvm_malloc (VLDB’ 16)
- Small-size => segregated-fit, larger-size => best-fit
- Three-size allocation strategy
Makalu (OOPLSA’ 16)
- Keeping volatiled pointer is still valid by using a fixed pool address (
MAP_FIXED
flag ofmmap
)
- Keeping volatiled pointer is still valid by using a fixed pool address (
NVML (
intel Pmem
)- Support concurrent => Local thread cache
- Minimize fragmentation => A chunk (256KB) is divided into blocks of 8X the class size.
PAllocator
- Small/Larger/Huge Allocator