epsilonDB is an OLTP engine tailored for the charachteristics of flash-based SSDs. It acheives low SSD write amplification without relying on large over-provisioning. epsilonDB relies on discarding dirty pages upon eviction while keeping the necessary log records to reconstrut discarded pages. This allows epsilonDB to gain flexibility in imposing a flash-friendly write pattern that significantly reduces SSD write amplification.
This is the artifact for the paper:
epsilonDB: Towards Zero Write Amplification for Modern OLTP
Mohamed Farouk Drira, Tianzheng Wang and Jonghyeok Park. Under submission.
Required dependencies:
apt install cmake build-essential nvme-cli libaio-dev liburing-dev libnvme-dev libtbb2-devBuild:
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=[Release|RelWithDebInfo] ..
makeAfter building, from inside the scripts/ directory, run the following command by passing the build directory as environment variable.
sudo BUILD_DIR="../build" bash run.sh --device /dev/nvme2n1 --log_device /dev/nvme0n1 --benchmark ycsb --database_size 410 --distribution uniform --trim --run_for_hours 5 --worker_threads 64 --buffer_pool_gib 40 sudo BUILD_DIR="../build" bash run.sh --device /dev/nvme2n1 --log_device /dev/nvme0n1 --benchmark tpcc --tpcc_warehouse_count 3800 --trim --run_for_hours 5 --bg_page_fixer_threads 4 --threshold 0.7For running the Baseline add --vanilla to the above commands (you can remove epsilonDB specific flags).
--device SSD device to store database pages.
--log_device SSD device to store WAL.
--bg_page_fixer_threads The number of background threads that will fix pages will determine the contention between read and writes on the SSD bandwidth. Set up this number depending on your device supported bandwidth and its sensitivity to read/write interference (typical range between [1,4]).
--threshold The threshold of pages that needs to be discarded inside a reclaim unit (RU) to kick in background page fixing for this RU. The default is 80%. This threshold depends on the workload access pattern. For stable perforance, run TPC-C with 70% threshold and microbenchmarks you can set higher (80%-90%).
--noppl You can use this flag to turn off the PPL optimisation.
--max_log_records_to_discard If you turn off PPL, this flag enables you to set the maximum number of log records to discard. Valid numbers are between (0-7), where 0 falls back to the baseline (no discarding).
This project is licensed under the MIT License.