Skip to content
/ WaLSM Public

A workload-aware KV store for NVM-SSD hybrid storage, based on RocksDB.

License

GPL-2.0 and 2 other licenses found

Licenses found

GPL-2.0
COPYING
Apache-2.0
LICENSE.Apache
Unknown
LICENSE.leveldb
Notifications You must be signed in to change notification settings

dase955/WaLSM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

3c0ae94 · Dec 16, 2022
Aug 27, 2022
Oct 1, 2020
Jun 3, 2022
Sep 28, 2020
May 13, 2020
Jun 1, 2020
Dec 16, 2022
Sep 30, 2020
Aug 12, 2020
Oct 8, 2020
Sep 9, 2022
Nov 5, 2020
Jun 12, 2020
Dec 16, 2022
Apr 30, 2022
Sep 16, 2020
Apr 20, 2020
Oct 15, 2020
Oct 7, 2020
Aug 27, 2022
Oct 1, 2020
Aug 27, 2022
Apr 30, 2022
Sep 23, 2020
Apr 3, 2022
Oct 9, 2020
Sep 28, 2020
Jun 30, 2022
Jun 3, 2022
Jan 14, 2014
Apr 17, 2022
Jun 26, 2018
Sep 14, 2020
Jul 19, 2019
Oct 18, 2017
Aug 28, 2022
Aug 30, 2019
Dec 6, 2017
Apr 28, 2017
May 24, 2017
Jun 19, 2015
Dec 1, 2020
Dec 19, 2018
Jul 8, 2020
Jul 15, 2017
Jul 17, 2017
Jun 30, 2022
Oct 11, 2022
Oct 11, 2022
Mar 8, 2018
Jun 30, 2022
May 6, 2020
Feb 26, 2018
Apr 4, 2019
Jun 29, 2020
Mar 20, 2020
Jan 28, 2020
May 15, 2022
Jun 25, 2019

WaLSM

WaLSM is a workload-aware KV store for NVM-SSD hybrid storage. It is designed for reducing write amplifications on SSD with NVM, and auto index tuning on varying workloads.

Build

Our code is on dev branch.

Currently, we only support building with Makefile. Use

make -j32 static_lib

to build the static library.

Test

We use the following settings for testing performance:

  opt.create_if_missing = true;
  opt.use_direct_io_for_flush_and_compaction = true;
  opt.use_direct_reads = true;
  opt.compression = rocksdb::kNoCompression;
  opt.compaction_style = rocksdb::kCompactionStyleUniversal;
  opt.IncreaseParallelism(32);
  opt.statistics = rocksdb::CreateDBStatistics();
  opt.nvm_path = nvm_path; // use nvm path here

  rocksdb::BlockBasedTableOptions block_based_options;
  block_based_options.pin_top_level_index_and_filter = false;
  block_based_options.pin_l0_filter_and_index_blocks_in_cache = false;
  block_based_options.cache_index_and_filter_blocks_with_high_priority = false;
  block_based_options.index_type = rocksdb::BlockBasedTableOptions::kTwoLevelIndexSearch;
  block_based_options.partition_filters = true;
  block_based_options.cache_index_and_filter_blocks = true;
  block_based_options.filter_policy.reset(rocksdb::NewBloomFilterPolicy(10, false));
  block_based_options.block_cache =
      rocksdb::NewLRUCache(static_cast<size_t>(128 * 1024 * 1024));
  opt.table_factory.reset(rocksdb::NewBlockBasedTableFactory(block_based_options));
  opt.memtable_prefix_bloom_size_ratio = 0.02;

Note that our compacting algorithm is based on Universal Compaction, using other RocksDB default compacting algorithm may cause unexpected behaviors.