Skip to content
No description, website, or topics provided.
C Assembly C++ HTML PHP Java Other
Branch: master
Clone or download
Latest commit dc3a8d1 Aug 24, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
benchmarks fix Aug 24, 2019
patches add more stuff Aug 13, 2019
ulocks leveldb Aug 19, 2019 more fixes Aug 24, 2019

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.

Tested Environment

  • We use Ubuntu 16.04 but with our versions of kernels for testing purposes.

Required programs

  • 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 trylock calls 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.

Kernelspace Benchmark

  • To test locks in the kernelspace, patch the kernel in the patches folder
  • Clone the following benchmark suite:
  $ git clone
  $ git clone


  • We use the following benchmarks for evaluating all types of locks

    • MWCM
    • MWRL
    • MWRM
    • MRDM
  • We use following settings for our evaluation, which can be modified in bin/

    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 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=0 may 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:

    • Exim
    • Metis
  • Please follow the in the Vbench repo on how to run the benchmark and generate graphs.

  • AFL: Please follow the in the benchmarks/fuzzing directory

  • Nano-benchmark: Please refer to the benchmarks/kernel-syncstress.

Userspace Benchmark

  • We extend the Litl framework (ulocks/src/litl/) and use the LD_PRELOAD for usersapce benchmarks.

  • Compile the Litl framework as follows:

make -C ulocks/src/litl
  • For Leveldb, follow in the benchmarks/leveldb-1.20 folder.

  • For Dedup and Streamcluster, follow the in the benchmarks/parsec folder.


You can’t perform that action at this time.