https://github.com/cgcl-codes/aegonkv

https://github.com/cgcl-codes/aegonkv

Science Score: 13.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.4%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

Basic Info
  • Host: GitHub
  • Owner: CGCL-codes
  • Language: C++
  • Default Branch: main
  • Size: 9.92 MB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created over 1 year ago · Last pushed over 1 year ago
Metadata Files
Readme

README.md

AegonKV

AegonKV is a "three-birds-one-stone" solution that comprehensively enhances the throughput, tail latency, and space usage of KV separated systems.

This project provides implementation source code of AegonKV and evaluation scripts.

AegonKV is accepted by FAST'25, the detailed paper can be viewed here.

Publications: Zhuohui Duan, Hao Feng, Haikun Liu, Xiaofei Liao, Hai Jin, Bangyu Li. AegonKV: A High Bandwidth, Low Tail Latency, and Low Storage Cost KV-Separated LSM Store with SmartSSD-based GC Offloading.

Build AegonKV

Folder AegonKV contains the source code of AegonKV, you can build AegonKV according to the instructions below (also in AegonKV/README.md).

Dependencies

Hardware. We use a server with hardware dependencies shown below. [CPU]: 2 x 18-core 2.20GHz Intel Xeon Gold 5220 with two-way hyper-threading [DRAM]: 1 x 64 GB 2666 MHz DDR4 DRAM [SSD]: 1 x Samsung SmartSSD® [REQUIRED!] In particular, the SmartSSD environment can be verified with the following command. shell xbutil examine # Get PCIe address of SmartSSD xbutil validate --device $(PCIe address of SmartSSD) # Verify SmartSSD xbutil reset --device $(PCIe address of SmartSSD) # Most of the time you can fix validation failures by resetting the environment

Software. Before compilation, it's essential that you have already installed software dependencies shown below. GCC (9.4.0, https://gcc.gnu.org) CMake (3.25.6, https://cmake.org) zlib (1.3.1, https://zlib.net) gflags (2.2.2, https://github.com/gflags/gflags) Vitis (2021.1, https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis/archive-vitis.html) Xilinx XRT (2021.1, https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/smartssd.html) SmartSSD Development Target Platform (2021.1, https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/smartssd.html) Python (3.8.10, https://www.python.org)

Compilation

Follow three steps to build AegonKV: build RocksDB dependency (required by Titan), build AegonKV software side target, and build AegonKV FPGA hardware side target.

Before building hardware target, make sure the SmartSSD environment is configured correctly. Some useful test commands are in AegonKV/hardware/host/test_commands.sh.

```shell cd AegonKV mkdir -p build cd build cmake -DROCKSDBDIR=$(pwd)/../lib/rocksdb-6.29.tikv -DREALCOMPILE=1 -DCMAKEBUILDTYPE=Debug ..

build RocksDB dependency

make -j rocksdb

build software

make -j titan

build hardware (it may takes several hours)

cd .. nohup cmake --build $(pwd)/build --target gckernel -- -j 8 > hwcompile.log 2>&1 & ```

Run Evaluations

Folder Evaluation contains evaluation program and configurations, you can build and reproduce evaluation results according to the instructions below (also in Evaluation/README.md).

Compilation

```shell cd Evaluation mkdir build cd build

build for tian and AegonKV

cmake -DBINDROCKSDB=0 -DBINDTITANDB=1 -DBIND_DIFFKV=0 .. make ```

Running

The evaluation in the paper use three kinds of workload: YCSB, Social Graph, and Twitter Cluster.

Configurations

Running a test requires the use of two configuration files, the workload configuration and the system configuration.

``` 1. You can find the workload configuration in the following file: YCSB: Evaluation/workloads/workload{a-f} Social Graph: Evaluation/workloads/workloadmeta Twitter Cluster: Evaluation/workloads/workloadcluster # You need to modify the last configuration item to choose which cluster to use.

  1. You can find the system configuration in the following file: AegonKV: Evaluation/titandb/aegonkv.properties DiffKV: Evaluation/titandb/diffkv.properties Titan: Evaluation/titandb/titandb.properties RocksDB: Evaluation/rocksdb/rocksdb.properties BlobDB: Evaluation/rocksdb/rocksdb-blob.properties ```

YCSB

Load data and execute YCSB-A workload against AegonKV. shell ./ycsb \ -load -run -db titandb -P ../workloads/workloada \ -P ../titandb/aegonkv.properties -s -statistics \ -p threadcount=16

Social Graph

Generate workload based on the example in Cao's paper. shell $(path to AegonKV)/build/titandb_bench \ -benchmarks="fillrandom,mixgraph" \ -use_direct_io_for_flush_and_compaction=true -use_direct_reads=true -cache_size=268435456 \ -keyrange_dist_a=14.18 -keyrange_dist_b=-2.917 -keyrange_dist_c=0.0164 -keyrange_dist_d=-0.08082 -keyrange_num=30 \ -value_k=0.923 -value_sigma=226.409 -iter_k=2.517 -iter_sigma=14.236 \ -mix_get_ratio=0.55 -mix_put_ratio=0.44 -mix_seek_ratio=0.01 \ -sine_mix_rate_interval_milliseconds=5000 -sine_a=1000 -sine_b=0.000073 -sine_d=80000 \ -perf_level=2 -reads=420000000 -num=50000000 -key_size=48 -value_size=256 -threads=16 \ -write_buffer_size=67108864 -max_write_buffer_number=2 -target_file_size_base=8388608 \ -max_bytes_for_level_base=16777216 -max_bytes_for_level_multiplier=3 \ -db=./db \ -save_keys=true \ -path_save_keys=$(path to save workload trace) Execute Social Graph workload against AegonKV. shell ./ycsb \ -load -run -db titandb -P ../workloads/workload_meta \ -P ../titandb/aegonkv.properties -s -statistics \ -p threadcount=16

Twitter Cluster

Download the trace in Yang's paper from the repository.

Prepare and execute Cluster-39 workload against AegonKV.

```shell python ../titandb/workload_prepare.py

./ycsb \ -load -run -db titandb -P ../workloads/workload_cluster \ -P ../titandb/aegonkv.properties -s -statistics \ -p threadcount=16 ```

More specific command scripts can be found in Evaluation/workloads/script-ycsb.md and Evaluation/workloads/script-production.md.

Result Analysis

Five metrics throughput, tail latency, space usage, compaction I/O, and write stall are used in the paper.

At the end of one run (mey take several hours), you will see the results in the following format (only the last few lines of the output to be used are captured here): shell 2024-02-29 09:57:35 3438 sec: 200000000 operations; [READ: Count=99995365 Max=328990.72 Min=9.58 Avg=200.94 90=373.25 99=488.45 99.9=1320.96 99.99=44662.78] [UPDATE: Count=100004635 Max=246022.14 Min=40.35 Avg=330.39 90=508.67 99=641.53 99.9=1645.57 99.99=50692.10] Run runtime(sec): 3438.48 Run operations success(ops): 200000000 Run operations fail(ops): 0 Run throughput(ops/sec): 58165.3 You can get throughput, tail latency from the results above.

If you turn the option -statistics on, then there will also be statistics output. For example, you can find the following entry to get the compaction I/O and write stall result. shell rocksdb.compact.read.bytes COUNT : 40784350333 rocksdb.compact.write.bytes COUNT : 38094450456 rocksdb.stall.micros COUNT : 0 You can get space usage with the following command, or use the real-time monitoring script we provide here (Evaluation/titandb/size_util.py). shell du -sh ./

You can also use the scripts under Evaluation/analysis to automatically get a summary of the data that reproduces the results of the paper.

Owner

  • Name: CGCL-codes
  • Login: CGCL-codes
  • Kind: organization

CGCL/SCTS/BDTS Lab

GitHub Events

Total
  • Issues event: 1
  • Watch event: 6
  • Push event: 7
Last Year
  • Issues event: 1
  • Watch event: 6
  • Push event: 7

Issues and Pull Requests

Last synced: 10 months ago

All Time
  • Total issues: 1
  • Total pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Total issue authors: 1
  • Total pull request authors: 0
  • Average comments per issue: 0.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 1
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 1
  • Pull request authors: 0
  • Average comments per issue: 0.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • cjji (1)
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels

Dependencies

AegonKV/lib/rocksdb-6.29.tikv/tools/Dockerfile docker
  • buildpack-deps wheezy build
AegonKV/lib/rocksdb-6.29.tikv/java/jmh/pom.xml maven
  • org.openjdk.jmh:jmh-generator-annprocess 1.22 provided
  • org.openjdk.jmh:jmh-core 1.22
  • org.rocksdb:rocksdbjni 6.27.0-SNAPSHOT
AegonKV/lib/rocksdb-6.29.tikv/docs/Gemfile rubygems
  • github-pages ~> 209
  • webrick ~> 1.7
AegonKV/lib/rocksdb-6.29.tikv/docs/Gemfile.lock rubygems
  • activesupport 6.0.3.4
  • addressable 2.8.0
  • bundler 2.2.3
  • coffee-script 2.4.1
  • coffee-script-source 1.11.1
  • colorator 1.1.0
  • commonmarker 0.17.13
  • concurrent-ruby 1.1.7
  • dnsruby 1.61.5
  • em-websocket 0.5.2
  • ethon 0.12.0
  • eventmachine 1.2.7
  • execjs 2.7.0
  • faraday 1.3.0
  • faraday-net_http 1.0.0
  • ffi 1.14.2
  • forwardable-extended 2.6.0
  • gemoji 3.0.1
  • github-pages 209
  • github-pages-health-check 1.16.1
  • html-pipeline 2.14.0
  • http_parser.rb 0.6.0
  • i18n 0.9.5
  • jekyll 3.9.0
  • jekyll-avatar 0.7.0
  • jekyll-coffeescript 1.1.1
  • jekyll-commonmark 1.3.1
  • jekyll-commonmark-ghpages 0.1.6
  • jekyll-default-layout 0.1.4
  • jekyll-feed 0.15.1
  • jekyll-gist 1.5.0
  • jekyll-github-metadata 2.13.0
  • jekyll-mentions 1.6.0
  • jekyll-optional-front-matter 0.3.2
  • jekyll-paginate 1.1.0
  • jekyll-readme-index 0.3.0
  • jekyll-redirect-from 0.16.0
  • jekyll-relative-links 0.6.1
  • jekyll-remote-theme 0.4.2
  • jekyll-sass-converter 1.5.2
  • jekyll-seo-tag 2.6.1
  • jekyll-sitemap 1.4.0
  • jekyll-swiss 1.0.0
  • jekyll-theme-architect 0.1.1
  • jekyll-theme-cayman 0.1.1
  • jekyll-theme-dinky 0.1.1
  • jekyll-theme-hacker 0.1.2
  • jekyll-theme-leap-day 0.1.1
  • jekyll-theme-merlot 0.1.1
  • jekyll-theme-midnight 0.1.1
  • jekyll-theme-minimal 0.1.1
  • jekyll-theme-modernist 0.1.1
  • jekyll-theme-primer 0.5.4
  • jekyll-theme-slate 0.1.1
  • jekyll-theme-tactile 0.1.1
  • jekyll-theme-time-machine 0.1.1
  • jekyll-titles-from-headings 0.5.3
  • jekyll-watch 2.2.1
  • jemoji 0.12.0
  • kramdown 2.3.1
  • kramdown-parser-gfm 1.1.0
  • liquid 4.0.3
  • listen 3.4.0
  • mercenary 0.3.6
  • mini_portile2 2.6.1
  • minima 2.5.1
  • minitest 5.14.3
  • multipart-post 2.1.1
  • nokogiri 1.12.5
  • octokit 4.20.0
  • pathutil 0.16.2
  • public_suffix 3.1.1
  • racc 1.5.2
  • rb-fsevent 0.10.4
  • rb-inotify 0.10.1
  • rexml 3.2.5
  • rouge 3.23.0
  • ruby-enum 0.8.0
  • ruby2_keywords 0.0.2
  • rubyzip 2.3.0
  • safe_yaml 1.0.5
  • sass 3.7.4
  • sass-listen 4.0.0
  • sawyer 0.8.2
  • simpleidn 0.1.1
  • terminal-table 1.8.0
  • thread_safe 0.3.6
  • typhoeus 1.4.0
  • tzinfo 1.2.9
  • unf 0.1.4
  • unf_ext 0.0.7.7
  • unicode-display_width 1.7.0
  • webrick 1.7.0
  • zeitwerk 2.4.2