Scalable and Practical Locking with Shuffling
ShflLocks are a family of locking protocols that implement use shuffling mechanism to implement several policies, such as NUMA-awareness, or blocking. We implement three locking protocols: NUMA-aware spinlock, NUMA-aware blocking mutex, and NUMA-aware blocking rwlock.
- We use Ubuntu 16.04 but with our versions of kernels for testing purposes.
- We use the following programs for evaluation
- Fxmark: file system micro-benchmarking in the kernelspace
- lock1: This benchmark stresses the kernel spinlock and is part of the will-it-scale benchmark suite
- Exim: mail server to stress kernelspace locks
- Metis: map-reduce library to stress readers-writer lock in the kernel
- AFL: fuzzer to stress kernel locks
- Dedup: Parsec benchmark that stresses lock allocation in the usersapce
- Streamcluster: Parsec benchmark that has about 40% of
trylockcalls in the userspace
- Leveldb: Database benchmark that stresses a single lock in the userspace
- Extended version of RCU-table benchmark, used for nano-benchmarking locks.
- To test locks in the kernelspace, patch the kernel in the
- Clone the following benchmark suite:
$ git clone https://github.com/sslab-gatech/vbench $ git clone https://github.com/sslab-gatech/fxmark
We use the following benchmarks for evaluating all types of locks
We use following settings for our evaluation, which can be modified in
self.DIRECTIOS = ["nodirectio"] self.MEDIA_TYPES = ["mem"] self.FS_TYPES = ["tmpfs"]
- One issue with Fxmark is that we need to specify which benchmarks to run on line 520 in
run-fxmark.py. Please, modify the following line
("mem", "*", "MWCM", "80", "directio")),to
("mem", "tmpfs", "MWCM", "*", "nodirectio")),If we use
*for each column in the tuple, then Fxmark will comprehensively run all benchmarks on specified mediums for varying core count. Columns in the tuple represent the following:
mem: storage medium
tmpfs: file system
DWOL: benchmark name
80: thread count
nodirectio: This is specific for nodirectio
- Note that
NUM_TEST_CONF=0may be encountered on not appropriately setting the thread count. For testing purpose, please use the online core count (excluding HT).
We use the following benchmarks from Vbench:
Please follow the README.md in the Vbench repo on how to run the benchmark and generate graphs.
AFL: Please follow the README.md in the
Nano-benchmark: Please refer to the
We extend the
ulocks/src/litl/) and use the
LD_PRELOADfor usersapce benchmarks.
Litlframework as follows:
make -C ulocks/src/litl
For Leveldb, follow
For Dedup and Streamcluster, follow the README.md in the
- Sanidhya Kashyap (email@example.com)