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
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
Metadata Files
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.
- 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
- Website: http://grid.hust.edu.cn/
- Repositories: 35
- Profile: https://github.com/CGCL-codes
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
- buildpack-deps wheezy build
- org.openjdk.jmh:jmh-generator-annprocess 1.22 provided
- org.openjdk.jmh:jmh-core 1.22
- org.rocksdb:rocksdbjni 6.27.0-SNAPSHOT
- github-pages ~> 209
- webrick ~> 1.7
- 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