Giter Club home page Giter Club logo

ssd-vs-pm's Introduction

Benchmarking Optane SSD vs Optane DCPMM

Here hosts resources used in our recent CIDR 2022 paper below for comparing SSD and PM indexes, including a benchmark driver adapted from [1], a B-tree implementation based on [2], an on-disk hash table [3], FPTree [4], BzTree [5] and Dash [6].

SSDs Striking Back: The Storage Jungle and Its Implications on Persistent Indexes.
Kaisong Huang, Darien Imai, Tianzheng Wang and Dong Xie.
12th Annual Conference on Innovative Data Systems Research (CIDR ’22). January 9-12, 2022, Chaminade, USA.

[1] https://github.com/basicthinker/YCSB-C
[2] https://github.com/jeffreyorihuela/b-tree-on-disk
[3] https://github.com/dongx-psu/hashtable
[4] https://github.com/sfu-dis/fptree
[5] https://github.com/sfu-dis/bztree
[6] https://github.com/baotonglu/dash

Required Flags

-path <pathname>: Path to the containing folder of btree or hashtable, or to the pool file of PM-based indexes.
-tree <indexname>: Choose from [btree hashtable bztree dash pibench].
-load <bool>: truncate files, and load new indexes, default is false.
-run <bool>: use the preloaded files to run benchmarks, default is false.

Useful Options

  • -stride <n>:The stride when setting CPU affinity, default is 2.
  • -starting_cpu <n>: The starting CPU # for affinity, default is 0.
  • -benchmarkseconds <n>: Duration of test, default is 20, can also be configured in the spec files.
  • -buffer_page <n>: The number of pages for the buffer pool.

Compile and Run:

Make sure the git submodule abseil-cpp is initialized.

git submodule update --init

Run Btree tests

$ mkdir build; cd build;
$ cmake .. -DCMAKE_BUILD_TYPE=<Debug|Release>
$ make
$ cd Ycsb

Load # records. (# = recordcount in the *.spec file)

$ ./ycsb -path </path/to/tree/dir> -tree btree -threads <#threads> -p </path/to/workload/spec> -load true -buffer_page <#page>

Run benchmarks.

$ ./ycsb -path </path/to/tree/dir> -tree btree -threads <#threads> -p </path/to/workload/spec> -run true -buffer_page <#page>

NOTE: spec file examples can be found in /Ycsb/workloads.

Run hash table tests

$ mkdir build; cd build;
$ CXX=clang++ CC=clang cmake .. -DCMAKE_BUILD_TYPE=<Debug|Release>
$ make
$ cd Ycsb

Load # records. (# = recordcount in the *.spec file)

$ ./ycsb -path </path/to/hashtable/dir> -tree hashtable -threads <#threads> -p </path/to/workload/spec> -load true -buffer_page <#page>

Run benchmarks.

$ ./ycsb -path </path/to/hashtable/dir> -tree hashtable -threads <#threads> -p </path/to/workload/spec> -run true -buffer_page <#page>

Run BzTree tests

Load the tree.

$ ./ycsb -p <spec> -tree bztree -poolsize $POOL_SIZE_IN_BYTES -path $POOLFILE -threads 1 -starting_cpu -load true

Run benchmarks.

$./ycsb -benchmarkseconds 60 -p <spec> -tree bztree -path $POOLFILE -threads $THREADS -starting_cpu $STARTING_CPU -stride 2 -run true

Run Dash tests

Load and run in one command.

$./ycsb -benchmarkseconds 60 -p <spec> -tree dash -poolsize $POOL_SIZE_IN_BYTES -path $POOLFILE -threads $THREADS -starting_cpu $STARTING_CPU -stride 2 -epoch 1024 -load true -run true

Run tests with PiBench Wrapper

Our benchmark tool is compatible with PiBench wrappers.
Load the tree.

$./ycsb -benchmarkseconds 60 -p <spec> -tree pibench -poolsize $POOL_SIZE_IN_BYTES -wrapper $FPWRAPPER -path $POOLFILE -threads $THREADS -starting_cpu $STARTING_CPU -stride 2 -load true

Run benchmarks.

$./ycsb -benchmarkseconds 60 -p <spec> -tree pibench -wrapper $TREEWRAPPER -path $POOLFILE -threads $THREADS -starting_cpu $STARTING_CPU -stride 2 -run true

Troubleshooting

  1. If you ever hit any issue that comes from Dash during compiling, use GCC instead of clang, and add '-march=native -mtune=native' to the compiler flags.
  2. If you see similar errors like this one: No rule to make target '/usr/lib/x86_64-linux-gnu/libpmemobj.so', needed by 'Ycsb/ycsb', please go to Bztree/CMakeLists.txt and change line 19 and line 69 to your own PMDK lib path.

ssd-vs-pm's People

Contributors

dongx-psu avatar kaisonghuang avatar wangtzh avatar ziyi-yan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

ssd-vs-pm's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.