AWS 32コア物理環境における vmemkv と RocksDB の性能比較ベンチマーク。

Stacking Variants

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

  • RocksDB: LSM-Tree のベースライン比較
  • Baseline: vmemkv 最適化なし
  • +BF: + T1 Bloom Filter
  • +Simd: +BF + SIMD Scan(T1 sorted_region の SIMD 線形探索)
  • +Inline: +Simd + T1 Inline Value (<8B のValueをT1のみで処理)
  • +Prefault: +Inline + T2 Async Prefaulting(全部盛り)

Environment

  • Instance: AWS c6id.8xlarge (ap-northeast-1)
  • CPU: Intel Xeon Platinum 8375C @ 2.90GHz (32 cores)
  • L2 Cache: 1,280 KiB × 16 (per-core private)
  • RAM: 66.3 GB
  • RAM (Larger-Than-Memory): cgroup で DRAM を 1GiB に制限し予めデータ量を4GiBぶん挿入した状態で開始
  • Disk: Local NVMe SSD (Swap Media for LTM)
  • Kernel: 6.17.0-1019-aws
  • Git Rev: 9bde41e6fb78

Workloads

  • Insert: 順次挿入(1/4/16/32 スレッド)
  • Get Hit/Miss (Zipf/Uniform): ポイントルックアップ
  • Update / Delete: Zipf 分布での更新・削除
  • Scan After Reorg (Zipf/Uniform): T1 reorganize 後のレンジスキャン
  • YCSB-E: 95% Scan + 5% Insert 混合(32スレッド / 30秒タイムライン)

Overall Notes & Annotations

Insert Workload

実験概要: ユニークキーを空のストアに順次挿入する際の書き込みスループット。Scan 非アクティブ時は Soft Limit = APPEND_CAP の 50% で動作。

Update (Zipf) Workload

実験概要: Zipf 分布での既存キーに対する更新スループット(ステートフルな上書き)。

Delete (Zipf) Workload

実験概要: T1 Tombstone 付与による並行削除スループット。

Get Miss (Zipf) Workload

実験概要: 存在しないキーへの読み取り。Bloom Filter の偽陽性回避効果を評価。

Get Hit (Zipf) Workload

実験概要: Zipf 分布での既存キーへのポイントルックアップ(キャッシュフレンドリー)。

Get Hit (Uniform) Workload

実験概要: Uniform 分布での既存キーへのポイントルックアップ(極端なキャッシュミス)。

Scan After Reorg (Zipf)

実験概要: T1 reorganize 完了後(sorted_region のみ)での Zipf 分布 100 件レンジスキャンの上限値。VMemKV: reorganize() 完了後に計測。RocksDB: 同一データロード後,自動 compaction 中の状態で計測(次回ベンチマーク実行後に追加予定)。

Scan After Reorg (Uniform)

実験概要: T1 reorganize 完了後(sorted_region のみ)での Uniform 分布 100 件レンジスキャン。RocksDB データは次回ベンチマーク実行後に追加予定。

YCSB-E — Scan + Insert 混合スループット(30秒タイムライン)

YCSB-E ワークロード: 95% Scan(100件レンジスキャン)+ 5% Insert を 32スレッドで 30秒間実行。 縦点線は T1 Reorganize 発生タイミングを示す。 Workload-Adaptive Soft Limit により、スキャン検出時に append_region を L2キャッシュ容量(~26,000件 / 1MB ÷ 40B)以下に保つ。Reorg 直後に走査対象が sorted_region のみになりスキャン QPS が V字回復する。

Scan QPS タイムライン

32 threads / 30 seconds

Insert Workload

実験概要: ユニークキーを空のストアに順次挿入する際の書き込みスループット。Scan 非アクティブ時は Soft Limit = APPEND_CAP の 50% で動作。

Update (Zipf) Workload

実験概要: Zipf 分布での既存キーに対する更新スループット(ステートフルな上書き)。

Delete (Zipf) Workload

実験概要: T1 Tombstone 付与による並行削除スループット。

Get Miss (Zipf) Workload

実験概要: 存在しないキーへの読み取り。Bloom Filter の偽陽性回避効果を評価。

Get Hit (Zipf) Workload

実験概要: Zipf 分布での既存キーへのポイントルックアップ(キャッシュフレンドリー)。

Get Hit (Uniform) Workload

実験概要: Uniform 分布での既存キーへのポイントルックアップ(極端なキャッシュミス)。

Scan After Reorg (Zipf)

実験概要: T1 reorganize 完了後(sorted_region のみ)での Zipf 分布 100 件レンジスキャンの上限値。VMemKV: reorganize() 完了後に計測。RocksDB: 同一データロード後,自動 compaction 中の状態で計測(次回ベンチマーク実行後に追加予定)。

Scan After Reorg (Uniform)

実験概要: T1 reorganize 完了後(sorted_region のみ)での Uniform 分布 100 件レンジスキャン。RocksDB データは次回ベンチマーク実行後に追加予定。

YCSB-E — Scan + Insert 混合スループット(30秒タイムライン)

YCSB-E ワークロード: 95% Scan(100件レンジスキャン)+ 5% Insert を 32スレッドで 30秒間実行。 縦点線は T1 Reorganize 発生タイミングを示す。 Workload-Adaptive Soft Limit により、スキャン検出時に append_region を L2キャッシュ容量(~26,000件 / 1MB ÷ 40B)以下に保つ。Reorg 直後に走査対象が sorted_region のみになりスキャン QPS が V字回復する。

Scan QPS タイムライン

32 threads / 30 seconds

Insert Workload

実験概要: ユニークキーを空のストアに順次挿入する際の書き込みスループット。Scan 非アクティブ時は Soft Limit = APPEND_CAP の 50% で動作。

Update (Zipf) Workload

実験概要: Zipf 分布での既存キーに対する更新スループット(ステートフルな上書き)。

Delete (Zipf) Workload

実験概要: T1 Tombstone 付与による並行削除スループット。

Get Miss (Zipf) Workload

実験概要: 存在しないキーへの読み取り。Bloom Filter の偽陽性回避効果を評価。

Get Hit (Zipf) Workload

実験概要: Zipf 分布での既存キーへのポイントルックアップ(キャッシュフレンドリー)。

Get Hit (Uniform) Workload

実験概要: Uniform 分布での既存キーへのポイントルックアップ(極端なキャッシュミス)。

Scan After Reorg (Zipf)

実験概要: T1 reorganize 完了後(sorted_region のみ)での Zipf 分布 100 件レンジスキャンの上限値。VMemKV: reorganize() 完了後に計測。RocksDB: 同一データロード後,自動 compaction 中の状態で計測(次回ベンチマーク実行後に追加予定)。

Scan After Reorg (Uniform)

実験概要: T1 reorganize 完了後(sorted_region のみ)での Uniform 分布 100 件レンジスキャン。RocksDB データは次回ベンチマーク実行後に追加予定。

YCSB-E — Scan + Insert 混合スループット(30秒タイムライン)

YCSB-E ワークロード: 95% Scan(100件レンジスキャン)+ 5% Insert を 32スレッドで 30秒間実行。 縦点線は T1 Reorganize 発生タイミングを示す。 Workload-Adaptive Soft Limit により、スキャン検出時に append_region を L2キャッシュ容量(~26,000件 / 1MB ÷ 40B)以下に保つ。Reorg 直後に走査対象が sorted_region のみになりスキャン QPS が V字回復する。

Scan QPS タイムライン

32 threads / 30 seconds

Insert Workload

実験概要: ユニークキーを空のストアに順次挿入する際の書き込みスループット。Scan 非アクティブ時は Soft Limit = APPEND_CAP の 50% で動作。

Update (Zipf) Workload

実験概要: Zipf 分布での既存キーに対する更新スループット(ステートフルな上書き)。

Delete (Zipf) Workload

実験概要: T1 Tombstone 付与による並行削除スループット。

Get Miss (Zipf) Workload

実験概要: 存在しないキーへの読み取り。Bloom Filter の偽陽性回避効果を評価。

Get Hit (Zipf) Workload

実験概要: Zipf 分布での既存キーへのポイントルックアップ(キャッシュフレンドリー)。

Get Hit (Uniform) Workload

実験概要: Uniform 分布での既存キーへのポイントルックアップ(極端なキャッシュミス)。

Scan After Reorg (Zipf)

実験概要: T1 reorganize 完了後(sorted_region のみ)での Zipf 分布 100 件レンジスキャンの上限値。VMemKV: reorganize() 完了後に計測。RocksDB: 同一データロード後,自動 compaction 中の状態で計測(次回ベンチマーク実行後に追加予定)。

Scan After Reorg (Uniform)

実験概要: T1 reorganize 完了後(sorted_region のみ)での Uniform 分布 100 件レンジスキャン。RocksDB データは次回ベンチマーク実行後に追加予定。

YCSB-E — Scan + Insert 混合スループット(30秒タイムライン)

YCSB-E ワークロード: 95% Scan(100件レンジスキャン)+ 5% Insert を 32スレッドで 30秒間実行。 縦点線は T1 Reorganize 発生タイミングを示す。 Workload-Adaptive Soft Limit により、スキャン検出時に append_region を L2キャッシュ容量(~26,000件 / 1MB ÷ 40B)以下に保つ。Reorg 直後に走査対象が sorted_region のみになりスキャン QPS が V字回復する。

Scan QPS タイムライン

32 threads / 30 seconds