Sherman: A Write-Optimized Distributed B+Tree Index on Disaggregated Memory
Sherman is a B+Tree on disaggregated memory; it uses one-sided RDMA verbs to perform all index operations.
Sherman includes three techniques to boost write performance:
- A hierarchical locks leveraging on-chip memory of RDMA NICs.
- Coalescing dependent RDMA commands
- Two-level version layout in leaf nodes
For more details, please refer to our paper:
[SIGMOG’22] Sherman: A Write-Optimized Distributed B+Tree Index on Disaggregated Memory. Qing Wang and Youyou Lu and Jiwu Shu.
- Mellanox ConnectX-5 NICs and above
- RDMA Driver: MLNX_OFED_LINUX-4.7-220.127.116.11 (If you use MLNX_OFED_LINUX-5**, you should modify codes to resolve interface incompatibility)
- NIC Firmware: version 16.26.4012 and above (to support on-chip memory, you can use
ibstatto obtain the version)
- memcached (to exchange QP information)
- boost 1.53 (to support
./script/hugepage.shto request huge pages from OS (use
./script/clear_hugepage.shto return huge pages)
mkdir build; cd build; cmake ..; make -j
cp ../script/restartMemc.sh .
../memcached.conf, where the 1st line is memcached IP, the 2nd is memcached port
For each run:
./restartMemc.sh(to initialize memcached server)
- In each server, execute
./benchmark kNodeCount kReadRatio kThreadCount
We emulate each server as one compute node and one memory node: In each server, as the compute node,
kReadRatioclient threads; as the memory node, we launch one memory thread.
./test/benchmark.cpp, we can modify
zipfan, to generate different workloads.
In addition, we can open the macro
kCoroCntcoroutine on each client thread.