test plan
EloqKV vs Redis Flex — 2TB Benchmark 测试方案
状态:定稿(待执行)。本方案为全新两系统对比 :EloqKV(最新版)与 Redis Flex
在 2TB 数据集上各跑一遍,不复用任何历史数据。
关联 issue:#53 (EloqKV vs Redis 对比落地页)。
注:测试数据集 = 2TB 。Redis Flex 实例的规格上限是 3TB 容量 / 300GB RAM,
这是实例 ceiling,不是灌入量。2TB 数据装进 300GB RAM 实例 = 有效 ~15% RAM
(高于 Redis 10% 最低规则,对 Flex 略宽松——诚实标注)。Flex 价格由 300K
throughput 档决定,与数据集大小无关(2TB / 3TB 同价)。
0. 目标
在同一 workload 下,量化 EloqKV 与 Redis Flex 在 2TB 全随机负载 下的吞吐与
深尾延迟 ,产出可直接写进对比页 / 成本文章的数据与图表。
核心论点(由架构决定,测试围绕它设计):
Redis Flex = Speedb(LSM 谱系) → 读放大 + compaction stall → 尾延迟在
带写负载 下抖动。
EloqKV = EloqStore(B-tree 变体,单 IOP/读,无 compaction) → 尾延迟随数据量与
写比例保持平稳。
因此主战场是"带写的随机负载下的深尾延迟 + 延迟随时间的稳定性",吞吐是辅证。
1. 被测系统(均为最新版,全新部署)
EloqKV
版本:最新 release (记录确切版本号)。
持久化:WAL off(cache mode) —— 对齐 EloqStore 隔离 serving 延迟的口径,也与
Flex 的 flash(非 durability)对等。
节点:GCP z3-highmem-14 (14 vCPU / ~112GB RAM / 本地 Titanium SSD,装得下 2TB)。
成本:$1,294/月 (不含 replica;+1 replica = ×2 → ~$2,588/月)。
⚠️ RAM 待确认:z3-highmem-14 标配约 112GB,与早前所说 128GB 略有出入(见 §6)。
采集:cache 命中率、每读 IOPS (坐实 single IOP/read)、RAM 实占、节点 $/hr 。
Redis Flex(已开实例,参数锁定)
形态:Redis Cloud(托管) ,引擎 Speedb 。
实例规格上限:3TB 容量 / 300GB RAM (本测试灌 2TB)。
本测试有效 RAM 比例:300GB / 2TB ≈ 15% (> Redis 10% 最低;对 Flex 略宽松)。
Max throughput 档:300K ops/sec 。
价格:$19.64/hour ≈ $14,337/month (按 730h/月;不含 replica;+1 replica = ×2
→ ~$28,674/月 );由 300K throughput 档决定,与数据集大小无关(2TB / 3TB 同价)。
待确认:此价是否含 HA replica、所在 region(见 §6)。
采集:compaction 活动、flash 读放大、cache 命中率 、evictions、RAM 实占。
⚠️ 必须写进结论的 caveat
非同硬件 :Flex 托管、机型不可控;EloqKV 自管。框架写
"同 workload,各自跑在各自基础设施上" ,不写 "same hardware"。
RAM 效率对比(强故事) :同样 2TB,EloqKV 仅 ~112GB(~5.6%) 即可服务,
Flex 用了 300GB(~15%) 。结论可写:"服务同一 2TB 数据集,EloqKV 所需内存约为
Flex 的 1/3;即便给了 Flex ~2.7 倍的内存,……"。
我们给了 Flex 偏宽松的 RAM(15%) :Redis 文档推荐 value 的 ≥20% 留 RAM,我们的
15% 介于 10% 最低与 20% 推荐之间——比"最低成本档"更有利于 Flex,结果不算 cherry-pick。
300K 是计价/SLA 上限,非随机读保证值 :Flex 实测饱和吞吐 = min(300K 档,
flash 随机读实际能力);多半远低于 300K,这本身是结论。
2. 公共 workload 参数
项
值
memtier flag
数据集
2TB(~8 亿 KV)
--key-minimum=1 --key-maximum=800000000
value
1–4KB 变长
--data-size-range=1024-4096 --random-data
访问
uniform random
--key-pattern=R:R
读写比
三档全测
见下
百分位
测到 P99.99
--print-percentiles 50,99,99.9,99.99
key 前缀
kv_
--key-prefix="kv_"
读写比(读:写 → memtier --ratio 即 set:get):
95:5 读主 → --ratio=1:19
50:50 平衡 → --ratio=1:1
5:95 写主 → --ratio=19:1
3. 测试矩阵(三档 mix 每档都跑完整套件)
Tier 1 —— 命根
A. 深尾延迟 @ 饱和点(300s),三档 mix
测到 P99.99 (LSM 痛在尾部,P99 不够)。
重点观察 50:50 / 5:95 (写越多 → compaction 越频 → 前台读尾越抖),但三档都出数。
B. 延迟随时间序列(长时 sustained run, 30–60min),三档 mix —— centerpiece 图
300s 聚合分位会低估 compaction stall;长时跑才跑满多个合并周期。
产出延迟-时间曲线 :预期 Flex 周期性锯齿尖峰 、EloqKV 平线。聚合数字会被质疑,
这张图不会。时间序列采集方法见 §5。
Tier 2 —— 强支撑
C. 最大可持续吞吐 (各 mix):A 的副产物,单独成表;注意对照 Flex 的 300K 档上限。
D. 成本归一化(输入已知) :见 §7 成本表。Flex $14,337/月、EloqKV $1,294/月
(均不含 replica;HA 各 ×2)→ Flex ≈ 11× EloqKV 。QPS-per-dollar = 实测 max QPS ÷ 月价
(待实测吞吐填入)。
E. 倾斜对照跑(Gaussian 热点),三档 mix —— 保中立,强烈建议
纯随机是 Flex 最坏场景;只发这个会被指"挑工况"。
加一组热点集可进 RAM 的倾斜负载,展示 Flex 在主场(冷热分离明确)其实没问题 →
反而提升可信度,并给 issue Build EloqKV vs Redis comparison landing page #53 要求的 "when to choose Redis Flex" 段填实料。
--key-pattern=G:G --key-stddev=<...> --key-median=<...>(参数见 §6 待确认)。
运行量
A:2 系统 × 3 mix = 6 runs(各 300s)
B:2 × 3 = 6 runs(各 30–60min)
E:2 × 3 = 6 runs(各 300s)
合计 ~18 个测量 run + 并发扫描 + 各系统一次 2TB 灌数据(耗时大头) + 每块前 warm-up。
4. 执行步骤
Step 0 — 冒烟/校准 :小数据(如 20GB)各跑一次,确认 rig、监控、指标采集链路正常,
再上 2TB。
Step 1 — 部署 :按 §1 起两套系统;记录版本、节点规格、Flex 实例规格 + 价格。
Step 2 — 灌 2TB(每系统一次)
# -t16 -c4 = 64 conn → n = 8e8 / 64 = 1.25e7
memtier_benchmark -s $ip -p $port -t 16 -c 4 --ratio=1:0 --key-pattern=S:S \
--key-prefix=" kv_" --key-minimum=1 --key-maximum=800000000 \
--random-data --data-size-range=1024-4096 -n 12500000 --hide-histogram
Step 3 — warm-up(每个测量块前) :随机只读 10min 进稳态。
memtier_benchmark -s $ip -p $port -t 16 -c 16 --ratio=0:1 --key-pattern=R:R \
--key-prefix=" kv_" --key-minimum=1 --key-maximum=800000000 \
--data-size-range=1024-4096 --test-time=600 --hide-histogram
Step 4 — A 饱和点(300s × 3 mix × 2 系统)
# 先 60s 短跑扫并发 C ∈ {8,16,32,64} 找吞吐拐点,再在拐点跑 300s 正式数:
memtier_benchmark -s $ip -p $port -t 16 -c $C_knee --distinct-client-seed \
--ratio=$RATIO --key-pattern=R:R --key-prefix=" kv_" \
--key-minimum=1 --key-maximum=800000000 --random-data \
--data-size-range=1024-4096 --test-time=300 \
--print-percentiles 50,99,99.9,99.99
Step 5 — B 时间序列(30–60min × 3 mix × 2 系统) :在拐点并发上加压
(--test-time=3600),同时按 §5 采集逐窗口延迟。
Step 6 — E 倾斜对照 :同 Step 4,key-pattern 换 Gaussian。
Step 7 — 汇总 :出表 + 图(§7)。
5. 指标采集(重点:采"为什么",否则结论只是 correlation)
每个 run 记录:
memtier:最大可持续吞吐、P50/P99/P99.9/P99.99 、actual throughput。
Flex 侧 (Redis Cloud 面板 / INFO):compaction 活动、flash 读放大、
cache 命中率 、evictions、RAM 实占。← 用来解释尾延迟尖峰来源。
EloqKV 侧 :cache 命中率、每读 IOPS 、RAM 实占。
成本:两边实例 $/hr(Flex 已知 $19.64/hr;EloqKV 节点待记)。
时间序列(B 跑)采集方法 —— memtier 默认只在结束时输出聚合分位,需额外手段:
旁路 latency 探针 (推荐):长时主压测运行期间,另起一个低速率 客户端
(小脚本 / 第二个 memtier 限速到几百 QPS),对每个请求打时间戳 + 延迟 并落日志,
后期画延迟-时间曲线 → 干净地看出 compaction 尖峰。
同时记录平台侧延迟面板(Redis Cloud latency graph;EloqKV 自带指标)按秒采样。
可选:memtier --hdr-file-prefix 导出 HDR 直方图分段对比。
6. 待确认 / verify(动工前)
7. 产出物(直接进对比页 / 成本文章)
表 1 — 2TB 饱和点(三档 × 两系统)
读写比
系统
Max QPS
P99 (ms)
P99.9
P99.99
95:5
EloqKV
95:5
Redis Flex
50:50
EloqKV
50:50
Redis Flex
5:95
EloqKV
5:95
Redis Flex
图 A :P99.99 by mix(柱状,两系统并列)。
图 B (centerpiece):延迟-时间曲线 ,每 mix 一张,Flex 锯齿 vs EloqKV 平线。
图 C :Max throughput by mix(标注 Flex 300K 档上限)。
成本表 (输入已知,QPS 待实测):
项
EloqKV (z3-highmem-14)
Redis Flex (3TB/300GB/300K)
无 replica
$1,294/月
$14,337/月
+1 replica(HA,×2)
$2,588/月
$28,674/月
成本倍数
1×
~11×
QPS-per-dollar
实测 max ÷ 月价
实测 max ÷ 月价
倾斜对照 :random vs Gaussian 的 P99.99 对比(展示 Flex 主场表现 + EloqKV 全程平稳)。
附录 A — 历史 EloqStore 数据(EloqKV 2TB 为本测直接锚点)
来自 blog/2026-01-08-eloqkv-on-eloqstore/index.md 注释,read-dominant(GET)scaling:
Dataset
EloqKV QPS
EloqKV P99.99 (ms)
DRAM Redis QPS
DRAM Redis P99.99
20GB
507,012
1.551
161,910
1.431
100GB
298,712
1.431
155,415
1.511
200GB
281,433
2.031
— (超 RAM)
—
2TB
262,198
2.607
— (超 RAM)
—
→ 本测数据集正好是 2TB。历史锚点 262K 是在 z3-16(16 vCPU/128GB) 上测的;本测节点是
z3-highmem-14(14 vCPU/~112GB) ,核数与内存略少,新测读主预计 ~230–260K /
P99.99 ~2.6–3ms —— 略低于 262K 属正常,显著偏离才说明环境有问题。
注释里另有一段三系统(Redis/EloqKV/Kvrocks)SET/GET 延迟表 (95:5/50:50/5:95),
但只有延迟、无吞吐,且未标数据集大小与百分位 ,与上表数值对不上(属另一组实验),
不可直接复用 。
变更记录
早期设想(已废弃):复用历史 EloqKV 数据、只测 Flex;1TB;含 100K QPS 限速尾延迟测试。
现行:数据集 2TB,两系统全新最新版,仅饱和点,三档 mix 完整,深尾到 P99.99,
纯随机为主 + Gaussian 对照。 EloqKV 节点 = GCP z3-highmem-14 / ~112GB / $1,294 月
(2TB→5.6% RAM);Redis Flex 实例上限 3TB/300GB RAM(2TB→15%)/300K 档/$19.64hr 。
两者均不含 replica(HA 各 ×2)。成本:Flex ≈ 11× EloqKV。
test plan
EloqKV vs Redis Flex — 2TB Benchmark 测试方案
0. 目标
在同一 workload 下,量化 EloqKV 与 Redis Flex 在 2TB 全随机负载下的吞吐与
深尾延迟,产出可直接写进对比页 / 成本文章的数据与图表。
核心论点(由架构决定,测试围绕它设计):
带写负载下抖动。
写比例保持平稳。
因此主战场是"带写的随机负载下的深尾延迟 + 延迟随时间的稳定性",吞吐是辅证。
1. 被测系统(均为最新版,全新部署)
EloqKV
Flex 的 flash(非 durability)对等。
成本:$1,294/月(不含 replica;+1 replica = ×2 → ~$2,588/月)。
Redis Flex(已开实例,参数锁定)
→ ~$28,674/月);由 300K throughput 档决定,与数据集大小无关(2TB / 3TB 同价)。
"同 workload,各自跑在各自基础设施上",不写 "same hardware"。
Flex 用了 300GB(~15%)。结论可写:"服务同一 2TB 数据集,EloqKV 所需内存约为
Flex 的 1/3;即便给了 Flex ~2.7 倍的内存,……"。
15% 介于 10% 最低与 20% 推荐之间——比"最低成本档"更有利于 Flex,结果不算 cherry-pick。
flash 随机读实际能力);多半远低于 300K,这本身是结论。
2. 公共 workload 参数
--key-minimum=1 --key-maximum=800000000--data-size-range=1024-4096 --random-data--key-pattern=R:R--print-percentiles 50,99,99.9,99.99kv_--key-prefix="kv_"读写比(读:写 → memtier
--ratio即 set:get):--ratio=1:19--ratio=1:1--ratio=19:13. 测试矩阵(三档 mix 每档都跑完整套件)
Tier 1 —— 命根
A. 深尾延迟 @ 饱和点(300s),三档 mix
B. 延迟随时间序列(长时 sustained run, 30–60min),三档 mix —— centerpiece 图
这张图不会。时间序列采集方法见 §5。
Tier 2 —— 强支撑
C. 最大可持续吞吐(各 mix):A 的副产物,单独成表;注意对照 Flex 的 300K 档上限。
D. 成本归一化(输入已知):见 §7 成本表。Flex $14,337/月、EloqKV $1,294/月
(均不含 replica;HA 各 ×2)→ Flex ≈ 11× EloqKV。QPS-per-dollar = 实测 max QPS ÷ 月价
(待实测吞吐填入)。
E. 倾斜对照跑(Gaussian 热点),三档 mix —— 保中立,强烈建议
反而提升可信度,并给 issue Build EloqKV vs Redis comparison landing page #53 要求的 "when to choose Redis Flex" 段填实料。
--key-pattern=G:G --key-stddev=<...> --key-median=<...>(参数见 §6 待确认)。运行量
4. 执行步骤
Step 0 — 冒烟/校准:小数据(如 20GB)各跑一次,确认 rig、监控、指标采集链路正常,
再上 2TB。
Step 1 — 部署:按 §1 起两套系统;记录版本、节点规格、Flex 实例规格 + 价格。
Step 2 — 灌 2TB(每系统一次)
Step 3 — warm-up(每个测量块前):随机只读 10min 进稳态。
Step 4 — A 饱和点(300s × 3 mix × 2 系统)
Step 5 — B 时间序列(30–60min × 3 mix × 2 系统):在拐点并发上加压
(
--test-time=3600),同时按 §5 采集逐窗口延迟。Step 6 — E 倾斜对照:同 Step 4,key-pattern 换 Gaussian。
Step 7 — 汇总:出表 + 图(§7)。
5. 指标采集(重点:采"为什么",否则结论只是 correlation)
每个 run 记录:
INFO):compaction 活动、flash 读放大、cache 命中率、evictions、RAM 实占。← 用来解释尾延迟尖峰来源。
时间序列(B 跑)采集方法 —— memtier 默认只在结束时输出聚合分位,需额外手段:
(小脚本 / 第二个 memtier 限速到几百 QPS),对每个请求打时间戳 + 延迟并落日志,
后期画延迟-时间曲线 → 干净地看出 compaction 尖峰。
--hdr-file-prefix导出 HDR 直方图分段对比。6. 待确认 / verify(动工前)
--print-percentiles、--key-pattern=G:G、--data-size-range等 flag 行为)。--key-stddev/--key-median取值(建议热点集 ≈ RAM 容量,体现 Flex 主场)。
7. 产出物(直接进对比页 / 成本文章)
表 1 — 2TB 饱和点(三档 × 两系统)
图 A:P99.99 by mix(柱状,两系统并列)。
图 B(centerpiece):延迟-时间曲线,每 mix 一张,Flex 锯齿 vs EloqKV 平线。
图 C:Max throughput by mix(标注 Flex 300K 档上限)。
成本表(输入已知,QPS 待实测):
倾斜对照:random vs Gaussian 的 P99.99 对比(展示 Flex 主场表现 + EloqKV 全程平稳)。
附录 A — 历史 EloqStore 数据(EloqKV 2TB 为本测直接锚点)
来自
blog/2026-01-08-eloqkv-on-eloqstore/index.md注释,read-dominant(GET)scaling:→ 本测数据集正好是 2TB。历史锚点 262K 是在 z3-16(16 vCPU/128GB) 上测的;本测节点是
z3-highmem-14(14 vCPU/~112GB),核数与内存略少,新测读主预计 ~230–260K /
P99.99 ~2.6–3ms —— 略低于 262K 属正常,显著偏离才说明环境有问题。
注释里另有一段三系统(Redis/EloqKV/Kvrocks)SET/GET 延迟表(95:5/50:50/5:95),
但只有延迟、无吞吐,且未标数据集大小与百分位,与上表数值对不上(属另一组实验),
不可直接复用。
变更记录
纯随机为主 + Gaussian 对照。 EloqKV 节点 = GCP z3-highmem-14 / ~112GB / $1,294 月
(2TB→
5.6% RAM);Redis Flex 实例上限 3TB/300GB RAM(2TB→15%)/300K 档/$19.64hr。两者均不含 replica(HA 各 ×2)。成本:Flex ≈ 11× EloqKV。