Stacking Variants
各最適化の詳細は Design Document を参照。
- RocksDB: LSM-Tree のベースライン比較
- LMDB: B+Tree / mmap ベースの比較対象
- RocksDB-BlobDB: RocksDB の Blob 分離ストレージ変種(大きな Value 向け)
- 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: d1139cd13ce2
Workloads
- Insert: 順次挿入(1/4/16/32 スレッド)
- Get Hit/Miss (Zipf/Uniform): ポイントルックアップ
- Update / Delete: Zipf 分布での更新・削除
- Scan After Reorg (Zipf/Uniform): T1 reorganize 後(sorted_region のみ)のレンジスキャン。VMemKV 内部専用
- Scan After Full Reorg T1+T2 (Zipf/Uniform): T1+T2 完全 reorganize 後のレンジスキャン。全エンジン比較可能
- YCSB-E: 95% Scan + 5% Insert 混合(32スレッド / 30秒タイムライン)
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 のみ、T2 は未反映)での Zipf 分布 100 件レンジスキャンの上限値。VMemKV 内部専用の中間状態で、他エンジンに相当する概念がないため比較対象なし(T1+T2 完全 reorg 後の全エンジン比較は下記「Scan After Full Reorg (T1+T2)」参照)。
Scan After Reorg (Uniform)
実験概要: T1 reorganize 完了後(sorted_region のみ、T2 は未反映)での Uniform 分布 100 件レンジスキャン。VMemKV 内部専用の中間状態で、他エンジンに相当する概念がないため比較対象なし。
Scan After Full Reorg (T1+T2) (Zipf)
実験概要: T1 sorted_region + T2 flat file 全体の完全 reorganize 完了後での Zipf 分布 100 件レンジスキャン。RocksDB/LMDB/RocksDB-BlobDB は同一データロード後、各エンジン内部の compaction/最適化が完了した状態として比較(全エンジン共通の比較軸)。
Scan After Full Reorg (T1+T2) (Uniform)
実験概要: T1 sorted_region + T2 flat file 全体の完全 reorganize 完了後での Uniform 分布 100 件レンジスキャン。RocksDB/LMDB/RocksDB-BlobDB は同一データロード後、各エンジン内部の compaction/最適化が完了した状態として比較(全エンジン共通の比較軸)。
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 のみ、T2 は未反映)での Zipf 分布 100 件レンジスキャンの上限値。VMemKV 内部専用の中間状態で、他エンジンに相当する概念がないため比較対象なし(T1+T2 完全 reorg 後の全エンジン比較は下記「Scan After Full Reorg (T1+T2)」参照)。
Scan After Reorg (Uniform)
実験概要: T1 reorganize 完了後(sorted_region のみ、T2 は未反映)での Uniform 分布 100 件レンジスキャン。VMemKV 内部専用の中間状態で、他エンジンに相当する概念がないため比較対象なし。
Scan After Full Reorg (T1+T2) (Zipf)
実験概要: T1 sorted_region + T2 flat file 全体の完全 reorganize 完了後での Zipf 分布 100 件レンジスキャン。RocksDB/LMDB/RocksDB-BlobDB は同一データロード後、各エンジン内部の compaction/最適化が完了した状態として比較(全エンジン共通の比較軸)。
Scan After Full Reorg (T1+T2) (Uniform)
実験概要: T1 sorted_region + T2 flat file 全体の完全 reorganize 完了後での Uniform 分布 100 件レンジスキャン。RocksDB/LMDB/RocksDB-BlobDB は同一データロード後、各エンジン内部の compaction/最適化が完了した状態として比較(全エンジン共通の比較軸)。
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 のみ、T2 は未反映)での Zipf 分布 100 件レンジスキャンの上限値。VMemKV 内部専用の中間状態で、他エンジンに相当する概念がないため比較対象なし(T1+T2 完全 reorg 後の全エンジン比較は下記「Scan After Full Reorg (T1+T2)」参照)。
Scan After Reorg (Uniform)
実験概要: T1 reorganize 完了後(sorted_region のみ、T2 は未反映)での Uniform 分布 100 件レンジスキャン。VMemKV 内部専用の中間状態で、他エンジンに相当する概念がないため比較対象なし。
Scan After Full Reorg (T1+T2) (Zipf)
実験概要: T1 sorted_region + T2 flat file 全体の完全 reorganize 完了後での Zipf 分布 100 件レンジスキャン。RocksDB/LMDB/RocksDB-BlobDB は同一データロード後、各エンジン内部の compaction/最適化が完了した状態として比較(全エンジン共通の比較軸)。
Scan After Full Reorg (T1+T2) (Uniform)
実験概要: T1 sorted_region + T2 flat file 全体の完全 reorganize 完了後での Uniform 分布 100 件レンジスキャン。RocksDB/LMDB/RocksDB-BlobDB は同一データロード後、各エンジン内部の compaction/最適化が完了した状態として比較(全エンジン共通の比較軸)。
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 のみ、T2 は未反映)での Zipf 分布 100 件レンジスキャンの上限値。VMemKV 内部専用の中間状態で、他エンジンに相当する概念がないため比較対象なし(T1+T2 完全 reorg 後の全エンジン比較は下記「Scan After Full Reorg (T1+T2)」参照)。
Scan After Reorg (Uniform)
実験概要: T1 reorganize 完了後(sorted_region のみ、T2 は未反映)での Uniform 分布 100 件レンジスキャン。VMemKV 内部専用の中間状態で、他エンジンに相当する概念がないため比較対象なし。
Scan After Full Reorg (T1+T2) (Zipf)
実験概要: T1 sorted_region + T2 flat file 全体の完全 reorganize 完了後での Zipf 分布 100 件レンジスキャン。RocksDB/LMDB/RocksDB-BlobDB は同一データロード後、各エンジン内部の compaction/最適化が完了した状態として比較(全エンジン共通の比較軸)。
Scan After Full Reorg (T1+T2) (Uniform)
実験概要: T1 sorted_region + T2 flat file 全体の完全 reorganize 完了後での Uniform 分布 100 件レンジスキャン。RocksDB/LMDB/RocksDB-BlobDB は同一データロード後、各エンジン内部の compaction/最適化が完了した状態として比較(全エンジン共通の比較軸)。
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