RocksDB use case

How to reproduce

This page describes how to reproduce the results presented in the paper for three setups:

  • Vanilla: without tracing I/O events
  • strace: tracing system calls with strace
  • DIO: tracing and analyzing system calls with DIO

RocksDB configuration
  • Source code: https://github.com/facebook/rocksdb
  • Version: 5.17.2
  • Congigurations:
    • level0_slowdown_writes_trigger = -1;
    • level0_stop_writes_trigger = 100;
    • compaction threads = 7;
    • flush threads = 1;
  • Env Configurations:
    • Memory limit: 1024 MiB
    • I/O limit (bytes per write operation): 200mb
Benchmark configuration
  • Benchmark: db_bench
  • Docker image: elastic/rally
  • Configurations:
    • workload: YCSB A - a mixture of read-write requests in a close-loop.
    • client threads: 8
    • number of operations: 100,000,000
DIO configuration
  • Tracer Configurations:
    • Filter events by system call type (target_events):
      • open, openat, creat
      • read, pread64, readv
      • write, pwrite64, writev
      • close
    • Filter events by file paths (target_paths):
      • RocksDB folder: /rocksdb/test/kvstore
Docker images
  • Docker image: taniaesteves/dio-rocksdb:v5.17.2
  • Load databae:
    • docker run -it --rm --name rocksdb --pid=host --privileged --cap-add=ALL --net=host -v /lib/modules:/lib/modules -v /usr/src:/usr/src -v /sys/kernel/debug/:/sys/kernel/debug/ -v rocksdb_data/kvstore:/rocksdb/test/kvstore -v rocksdb_data/results:/rocksdb/test/results -e ROCKSDB_LOAD=100000000 -e DB_BENCH_OPS=100000000 taniaesteves/dio-rocksdb:v5.17.2 load
  • Run db_bench (YCSB A):
    • Vanilla:
    • docker run -it --rm --name rocksdb --pid=host --privileged --cap-add=ALL --net=host -v /lib/modules:/lib/modules -v /usr/src:/usr/src -v /sys/kernel/debug/:/sys/kernel/debug/ --device-write-bps /dev/sda:200mb --memory=1G -v rocksdb_data/kvstore:/rocksdb/test/kvstore -v rocksdb_data/results:/rocksdb/test/results -e ROCKSDB_LOAD=100000000 -e DB_BENCH_OPS=100000000 taniaesteves/dio-rocksdb:v5.17.2 ycsbwa
    • strace:
    • docker run -it --rm --name rocksdb --pid=host --privileged --cap-add=ALL --net=host -v /lib/modules:/lib/modules -v /usr/src:/usr/src -v /sys/kernel/debug/:/sys/kernel/debug/ --device-write-bps /dev/sda:200mb --memory=1G -v strace_data:/strace_data -v rocksdb_data/kvstore:/rocksdb/test/kvstore -v rocksdb_data/results:/rocksdb/test/results -e ROCKSDB_LOAD=100000000 -e DB_BENCH_OPS=100000000 taniaesteves/dio-rocksdb:v5.17.2 strace ycsbwa
    • DIO:
    • docker run -it --rm --name rocksdb --pid=host --privileged --cap-add=ALL --net=host -v /lib/modules:/lib/modules -v /usr/src:/usr/src -v /sys/kernel/debug/:/sys/kernel/debug/ --device-write-bps /dev/sda:200mb --memory=1G -v dio_data:/dio_data -v dio.yaml:/usr/share/dio/conf/config.yaml -v rocksdb_data/kvstore:/rocksdb/test/kvstore -v rocksdb_data/results:/rocksdb/test/results -e ROCKSDB_LOAD=100000000 -e DB_BENCH_OPS=100000000 taniaesteves/dio-rocksdb:v5.17.2 dio ycsbwa