AWS 32コア物理環境における vmemkv と RocksDB の性能比較ベンチマーク。 Zero-allocation化を実施。

Stacking Variants

各最適化の詳細は Design Document を参照。

  • RocksDB: LSM-Tree のベースライン
  • Baseline: (In-memory) vmemkv 最適化なし (Larger-than-memory) Simdのみ
  • +BF: + T1 Bloom Filter
  • +Simd: +BF + SIMD Scan
  • +Hint: +Simd + T2 Memory Hints
  • +Inline: +Hint + T1 Inline Value
  • +Prefault: +Inline + T2 Async Prefaulting (全部盛り)

Workloads

  • Key: 16 bytes
  • Value: 8 bytes / 1KB / 64KB
  • Scan: 指定したキー範囲内で100件の読み取りを行う。事前にReorganizeも実施する
  • 8B In-Memory: Value 8 bytes.数百万件程度のInsertを事前に行う
  • 1KB In-Memory: Value 1KB. 数百万件程度のInsertを事前に行う
  • 1KB Larger-than-memory (LTM): Value 1KB. cgroupでメモリ量を1GiBに制限し、4GiBぶんのInsertを事前に行う
---

Environment

  • CPU: Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz (32 Cores / 64 Threads)
  • RAM: 66.3 GB (LTM実行時は cgroup 1GiB 制限)
  • Disk: Local NVMe SSD (AWS Instance Store, Swap Media)

Insert Workload

実験概要: Measures write throughput when inserting unique keys sequentially into empty/pre-populated store.

Update (Zipf) Workload

実験概要: Measures update throughput under Zipf access distribution (stateful updates).

Delete (Zipf) Workload

実験概要: Measures concurrent delete throughput (T1 index removals).

Get Miss (Zipf) Workload

実験概要: Evaluates read throughput for non-existent keys (tests Bloom Filter efficiency).

Get Hit (Zipf) Workload

実験概要: Measures point lookups for existing keys under Zipf distribution (cache-friendly).

Get Hit (Uniform) Workload

実験概要: Measures point lookups for existing keys under Uniform distribution (extreme cache misses).

Scan (No Reorg - Zipf) Workload

実験概要: Executes 100-key range queries under Zipf distribution with active append region.

Scan (No Reorg - Uniform) Workload

実験概要: Executes 100-key range queries under Uniform distribution (strict sequential prefetching).

Scan (With Reorg - Zipf) Workload

実験概要: Executes range queries after reorganize, pointing to a fully sorted in-memory region (Zipf).

Scan (With Reorg - Uniform) Workload

実験概要: Executes range queries after reorganize, pointing to a fully sorted in-memory region (Uniform).

Insert Workload

実験概要: Measures write throughput when inserting unique keys sequentially into empty/pre-populated store.

Update (Zipf) Workload

実験概要: Measures update throughput under Zipf access distribution (stateful updates).

Delete (Zipf) Workload

実験概要: Measures concurrent delete throughput (T1 index removals).

Get Miss (Zipf) Workload

実験概要: Evaluates read throughput for non-existent keys (tests Bloom Filter efficiency).

Get Hit (Zipf) Workload

実験概要: Measures point lookups for existing keys under Zipf distribution (cache-friendly).

Get Hit (Uniform) Workload

実験概要: Measures point lookups for existing keys under Uniform distribution (extreme cache misses).

Scan (No Reorg - Zipf) Workload

実験概要: Executes 100-key range queries under Zipf distribution with active append region.

Scan (No Reorg - Uniform) Workload

実験概要: Executes 100-key range queries under Uniform distribution (strict sequential prefetching).

Scan (With Reorg - Zipf) Workload

実験概要: Executes range queries after reorganize, pointing to a fully sorted in-memory region (Zipf).

Scan (With Reorg - Uniform) Workload

実験概要: Executes range queries after reorganize, pointing to a fully sorted in-memory region (Uniform).

Insert Workload

実験概要: Measures write throughput when inserting unique keys sequentially into empty/pre-populated store.

Update (Zipf) Workload

実験概要: Measures update throughput under Zipf access distribution (stateful updates).

Delete (Zipf) Workload

実験概要: Measures concurrent delete throughput (T1 index removals).

Get Miss (Zipf) Workload

実験概要: Evaluates read throughput for non-existent keys (tests Bloom Filter efficiency).

Get Hit (Zipf) Workload

実験概要: Measures point lookups for existing keys under Zipf distribution (cache-friendly).

Get Hit (Uniform) Workload

実験概要: Measures point lookups for existing keys under Uniform distribution (extreme cache misses).

Scan (No Reorg - Zipf) Workload

実験概要: Executes 100-key range queries under Zipf distribution with active append region.

Scan (No Reorg - Uniform) Workload

実験概要: Executes 100-key range queries under Uniform distribution (strict sequential prefetching).

Scan (With Reorg - Zipf) Workload

実験概要: Executes range queries after reorganize, pointing to a fully sorted in-memory region (Zipf).

Scan (With Reorg - Uniform) Workload

実験概要: Executes range queries after reorganize, pointing to a fully sorted in-memory region (Uniform).

Insert Workload

実験概要: Measures write throughput when inserting unique keys sequentially into empty/pre-populated store.

Update (Zipf) Workload

実験概要: Measures update throughput under Zipf access distribution (stateful updates).

Delete (Zipf) Workload

実験概要: Measures concurrent delete throughput (T1 index removals).

Get Miss (Zipf) Workload

実験概要: Evaluates read throughput for non-existent keys (tests Bloom Filter efficiency).

Get Hit (Zipf) Workload

実験概要: Measures point lookups for existing keys under Zipf distribution (cache-friendly).

Get Hit (Uniform) Workload

実験概要: Measures point lookups for existing keys under Uniform distribution (extreme cache misses).

Scan (No Reorg - Zipf) Workload

実験概要: Executes 100-key range queries under Zipf distribution with active append region.

Scan (No Reorg - Uniform) Workload

実験概要: Executes 100-key range queries under Uniform distribution (strict sequential prefetching).

Scan (With Reorg - Zipf) Workload

実験概要: Executes range queries after reorganize, pointing to a fully sorted in-memory region (Zipf).

Scan (With Reorg - Uniform) Workload

実験概要: Executes range queries after reorganize, pointing to a fully sorted in-memory region (Uniform).