性能测试
This commit is contained in:
@@ -1,184 +1,106 @@
|
||||
## `bench` 程序使用说明(命令 + 参数解释)
|
||||
## run_bench.hash.sh 使用指南
|
||||
|
||||
### 1) 快速查看帮助
|
||||
- 脚本:`test-redis/run_bench.hash.sh`
|
||||
- 默认策略:`persist_no` / `persist_everysec` / `nopersist`
|
||||
- 测试模式:`set` + `prefill+get`
|
||||
- 默认参数:`REQ=1000000 KEYSPACE=1000000 PIPE=128 VSIZE=32 ROUNDS=5 RETRIES=3`
|
||||
|
||||
### 运行示例
|
||||
|
||||
```bash
|
||||
./test-redis/bench --help
|
||||
# 默认运行(5轮)
|
||||
./test-redis/run_bench.hash.sh
|
||||
|
||||
# 指定大 key 参数(示例)
|
||||
ROUNDS=5 REQ=1000000 KEYSPACE=1000000 PIPE=128 VSIZE=256 RETRIES=3 ./test-redis/run_bench.hash.sh
|
||||
```
|
||||
|
||||
### 2) 命令模板
|
||||
### 常用环境变量
|
||||
|
||||
```bash
|
||||
./test-redis/bench \
|
||||
--host 127.0.0.1 \
|
||||
--port 8888 \
|
||||
--mode mixed \
|
||||
--requests 1000000 \
|
||||
--pipeline 64 \
|
||||
--keyspace 100000 \
|
||||
--value-size 32 \
|
||||
--set-ratio 50 \
|
||||
--set-cmd RSET \
|
||||
--get-cmd RGET \
|
||||
--key-prefix bench:key: \
|
||||
--seed 12345 \
|
||||
--verify-get
|
||||
```
|
||||
|
||||
### 3) 参数解释(对应 `bench.c`)
|
||||
|
||||
| 参数 | 默认值 | 说明 |
|
||||
| 变量 | 默认值 | 说明 |
|
||||
|---|---|---|
|
||||
| `--host <ip>` | `127.0.0.1` | 目标服务 IP |
|
||||
| `--port <port>` | `6379` | 目标服务端口 |
|
||||
| `--mode <set\|get\|mixed>` | `mixed` | 压测模式:纯写/纯读/读写混合 |
|
||||
| `--requests <n>` | `1000000` | 总请求数(不是每秒) |
|
||||
| `--pipeline <n>` | `64` | pipeline 批量深度 |
|
||||
| `--keyspace <n>` | `100000` | key 空间大小,key 随机落在 `[0, keyspace)` |
|
||||
| `--value-size <n>` | `32` | value 字节长度 |
|
||||
| `--set-ratio <0..100>` | `50` | `mixed` 下 SET 比例,GET 比例是 `100-set-ratio` |
|
||||
| `--set-cmd <cmd>` | `SET` | 写命令名(如 `SET`/`RSET`) |
|
||||
| `--get-cmd <cmd>` | `GET` | 读命令名(如 `GET`/`RGET`) |
|
||||
| `--key-prefix <prefix>` | `bench:key:` | key 前缀 |
|
||||
| `--seed <n>` | 当前时间 | 随机种子;固定后可复现实验 |
|
||||
| `--verify-get` | 关闭 | 开启后校验 GET 返回内容是否与写入值一致 |
|
||||
| `--help` / `-h` | - | 打印帮助 |
|
||||
| `ROUNDS` | `5` | 每个策略的轮次 |
|
||||
| `REQ` | `1000000` | 单次 bench 请求数 |
|
||||
| `KEYSPACE` | `1000000` | key 空间大小 |
|
||||
| `PIPE` | `128` | pipeline 深度 |
|
||||
| `VSIZE` | `32` | value 大小(字节) |
|
||||
| `RETRIES` | `3` | 单轮失败重试次数 |
|
||||
| `SEED` | `12345` | 随机种子基数 |
|
||||
| `ALLOC` | `mypool` | allocator |
|
||||
| `KV_PORT` | `8888` | kvstore 端口 |
|
||||
| `SET_CMD` / `GET_CMD` | `RSET` / `RGET` | 压测命令 |
|
||||
|
||||
## 大Key持久化协议复测(覆盖版)
|
||||
|
||||
## 命令
|
||||
- 时间口径:2026-03-07(本次重测)
|
||||
- 参数:`requests=1000000 pipeline=128 keyspace=1000000 value-size=256`
|
||||
- 轮次:每种策略 `5` 轮
|
||||
- 去异常规则:每个场景按 `qps` 对 `5` 轮做中位数偏差,剔除偏差最大 `1` 轮,再对剩余 `4` 轮取均值
|
||||
- kvstore 源数据:`results/hash_bench_fair_summary_20260307_062549.csv`
|
||||
- redis 源数据:`results/redis_bigkey_summary_20260307_063158.csv`
|
||||
- kvstore 去异常结果:`results/hash_bench_fair_trimmed_20260307_062549.csv`
|
||||
- redis 去异常结果:`results/redis_bigkey_trimmed_20260307_063158.csv`
|
||||
|
||||
```bash
|
||||
# kvstore 写(RSET)
|
||||
./test-redis/bench --host 127.0.0.1 --port 8888 --mode set --set-cmd RSET --get-cmd RGET --requests 3000000 --pipeline 128 --keyspace 1000000 --value-size 32 --key-prefix bench:ts:set:
|
||||
## kvstore 原始5轮
|
||||
|
||||
# kvstore 读(RGET)
|
||||
./test-redis/bench --host 127.0.0.1 --port 8888 --mode get --set-cmd RSET --get-cmd RGET --requests 3000000 --pipeline 128 --keyspace 1000000 --value-size 32 --verify-get --key-prefix bench:ts:get:
|
||||
| 策略 | 模式 | Round1 | Round2 | Round3 | Round4 | Round5 | 原始均值QPS | 原始均值us/op |
|
||||
|---|---|---:|---:|---:|---:|---:|---:|---:|
|
||||
| persist_no | set | 139895.00 | 138768.00 | 138867.00 | 143296.00 | 144388.00 | 141042.80 | 7.09 |
|
||||
| persist_no | get | 163764.00 | 164079.00 | 166415.00 | 163959.00 | 147881.00 | 161219.60 | 6.21 |
|
||||
| persist_everysec | set | 133067.00 | 126140.00 | 133430.00 | 139786.00 | 141145.00 | 134713.60 | 7.43 |
|
||||
| persist_everysec | get | 162076.00 | 165415.00 | 162180.00 | 163762.00 | 158226.00 | 162331.80 | 6.16 |
|
||||
| nopersist | set | 157950.00 | 143109.00 | 135043.00 | 152045.00 | 147233.00 | 147076.00 | 6.82 |
|
||||
| nopersist | get | 163381.00 | 169356.00 | 155890.00 | 164754.00 | 157550.00 | 162186.20 | 6.17 |
|
||||
|
||||
## kvstore 去异常后(4轮均值)
|
||||
|
||||
# kvstore 写(HSET)
|
||||
./test-redis/bench --host 127.0.0.1 --port 8888 --mode set --set-cmd HSET --get-cmd HGET --requests 3000000 --pipeline 128 --keyspace 1000000 --value-size 32 --key-prefix bench:ts:set:
|
||||
| 策略 | 模式 | 剔除轮次 | 剔除QPS | 去异常均值QPS | 去异常均值us/op |
|
||||
|---|---|---:|---:|---:|---:|
|
||||
| persist_no | set | 5 | 144388.00 | 140206.50 | 7.13 |
|
||||
| persist_no | get | 5 | 147881.00 | 164554.25 | 6.08 |
|
||||
| persist_everysec | set | 5 | 141145.00 | 133105.75 | 7.52 |
|
||||
| persist_everysec | get | 5 | 158226.00 | 163358.25 | 6.12 |
|
||||
| nopersist | set | 3 | 135043.00 | 150084.25 | 6.67 |
|
||||
| nopersist | get | 3 | 155890.00 | 163760.25 | 6.11 |
|
||||
|
||||
# kvstore 读(HGET)
|
||||
./test-redis/bench --host 127.0.0.1 --port 8888 --mode get --set-cmd HSET --get-cmd HGET --requests 3000000 --pipeline 128 --keyspace 1000000 --value-size 32 --verify-get --key-prefix bench:ts:get:
|
||||
## kvstore 协议开销(基线 nopersist,去异常后)
|
||||
|
||||
# Redis 策略对比(示例:6381 配置成 rdb_default)
|
||||
./test-redis/bench --host 127.0.0.1 --port 6381 --mode set --requests 3000000 --pipeline 128 --keyspace 1000000000 --value-size 32 --key-prefix bench:ts:redis:
|
||||
./test-redis/bench --host 127.0.0.1 --port 6379 --mode set --requests 3000000 --pipeline 128 --keyspace 1000000000 --value-size 32 --key-prefix bench:ts:redis:
|
||||
| 策略 | set QPS变化 | set us/op变化 | get QPS变化 | get us/op变化 |
|
||||
|---|---:|---:|---:|---:|
|
||||
| persist_no | -6.58% | +6.90% | +0.48% | -0.49% |
|
||||
| persist_everysec | -11.31% | +12.74% | -0.25% | +0.16% |
|
||||
|
||||
./test-redis/bench --host 127.0.0.1 --port 6381 --mode set --requests 3000000 --pipeline 128 --keyspace 1000000000 --value-size 32 --key-prefix bench:ts:redis:
|
||||
./test-redis/bench --host 127.0.0.1 --port 6379 --mode set --requests 3000000 --pipeline 128 --keyspace 1000000000 --value-size 32 --key-prefix bench:ts:redis:
|
||||
```
|
||||
## Redis 原始5轮
|
||||
|
||||
| 策略 | 模式 | Round1 | Round2 | Round3 | Round4 | Round5 | 原始均值QPS | 原始均值us/op |
|
||||
|---|---|---:|---:|---:|---:|---:|---:|---:|
|
||||
| none | set | 198673.00 | 211843.00 | 193900.00 | 208293.00 | 211071.00 | 204756.00 | 4.89 |
|
||||
| none | get | 225347.00 | 221000.00 | 218357.00 | 216466.00 | 214747.00 | 219183.40 | 4.56 |
|
||||
| aof_no | set | 144042.00 | 139615.00 | 140016.00 | 149925.00 | 150658.00 | 144851.20 | 6.91 |
|
||||
| aof_no | get | 210541.00 | 211713.00 | 202589.00 | 231251.00 | 402028.00 | 251624.40 | 4.24 |
|
||||
| aof_everysec | set | 143737.00 | 132998.00 | 136973.00 | 144448.00 | 142414.00 | 140114.00 | 7.14 |
|
||||
| aof_everysec | get | 212422.00 | 201051.00 | 211508.00 | 192190.00 | 209874.00 | 205409.00 | 4.87 |
|
||||
|
||||
## Redis 去异常后(4轮均值)
|
||||
|
||||
## run_hash_bench.sh 三轮均值复测(2026-03-05 07:59:54)
|
||||
| 策略 | 模式 | 剔除轮次 | 剔除QPS | 去异常均值QPS | 去异常均值us/op |
|
||||
|---|---|---:|---:|---:|---:|
|
||||
| none | set | 3 | 193900.00 | 207470.00 | 4.82 |
|
||||
| none | get | 1 | 225347.00 | 217642.50 | 4.59 |
|
||||
| aof_no | set | 5 | 150658.00 | 143399.50 | 6.98 |
|
||||
| aof_no | get | 5 | 402028.00 | 214023.50 | 4.68 |
|
||||
| aof_everysec | set | 2 | 132998.00 | 141893.00 | 7.05 |
|
||||
| aof_everysec | get | 4 | 192190.00 | 208713.75 | 4.79 |
|
||||
|
||||
- 轮次:3 轮(取均值)
|
||||
- 参数:requests=1000000 pipeline=128 keyspace=1000000 value-size=32
|
||||
- 明细数据:`results/hash_bench_detail_20260305_075954.csv`
|
||||
- 汇总数据:`results/hash_bench_summary_20260305_075954.csv`
|
||||
## Redis 协议开销(基线 none,去异常后)
|
||||
|
||||
### kvstore:RSET/RGET(持久化 × allocator)
|
||||
| 策略 | set QPS变化 | set us/op变化 | get QPS变化 | get us/op变化 |
|
||||
|---|---:|---:|---:|---:|
|
||||
| aof_no | -30.88% | +44.81% | -1.66% | +1.96% |
|
||||
| aof_everysec | -31.61% | +46.27% | -4.10% | +4.36% |
|
||||
|
||||
| 场景 | 模式 | Round1 | Round2 | Round3 | 均值QPS | 均值avg(us/op) | 均值elapsed(s) |
|
||||
|---|---:|---:|---:|---:|---:|---:|---:|
|
||||
| persist_mypool (incremental, mypool) | set | 125179 | 170592 | 164976 | 153582.33 | 6.64 | 6.64 |
|
||||
| persist_mypool (incremental, mypool) | get | 186087 | 195807 | 193450 | 191781.33 | 5.22 | 5.22 |
|
||||
| nopersist_mypool (none, mypool) | set | 185397 | 189265 | 187515 | 187392.33 | 5.33 | 5.34 |
|
||||
| nopersist_mypool (none, mypool) | get | 195032 | 203252 | 196291 | 198191.67 | 5.05 | 5.05 |
|
||||
| persist_malloc (incremental, malloc) | set | 175529 | 172307 | 181948 | 176594.67 | 5.67 | 5.67 |
|
||||
| persist_malloc (incremental, malloc) | get | 202299 | 207732 | 181749 | 197260.00 | 5.08 | 5.09 |
|
||||
| nopersist_malloc (none, malloc) | set | 162956 | 192052 | 191846 | 182284.67 | 5.52 | 5.52 |
|
||||
| nopersist_malloc (none, malloc) | get | 200417 | 211609 | 196936 | 202987.33 | 4.93 | 4.93 |
|
||||
|
||||
### Redis:SET/GET(各持久化模式)
|
||||
|
||||
| 场景 | 模式 | Round1 | Round2 | Round3 | 均值QPS | 均值avg(us/op) | 均值elapsed(s) |
|
||||
|---|---:|---:|---:|---:|---:|---:|---:|
|
||||
| none (none) | set | 234761 | 247981 | 243948 | 242230.00 | 4.13 | 4.13 |
|
||||
| none (none) | get | 247753 | 284771 | 275492 | 269338.67 | 3.73 | 3.73 |
|
||||
| rdb_default (rdb_default) | set | 245989 | 238020 | 241112 | 241707.00 | 4.14 | 4.14 |
|
||||
| rdb_default (rdb_default) | get | 278725 | 274510 | 276342 | 276525.67 | 3.62 | 3.62 |
|
||||
| aof_no (aof_no) | set | 196100 | 209723 | 201687 | 202503.33 | 4.94 | 4.94 |
|
||||
| aof_no (aof_no) | get | 269520 | 277701 | 270562 | 272594.33 | 3.67 | 3.67 |
|
||||
| aof_everysec (aof_everysec) | set | 201758 | 201078 | 180037 | 194291.00 | 5.16 | 5.16 |
|
||||
| aof_everysec (aof_everysec) | get | 259585 | 269224 | 279181 | 269330.00 | 3.71 | 3.72 |
|
||||
| aof_always (aof_always) | set | 75968 | 78265 | 76608 | 76947.00 | 13.00 | 13.00 |
|
||||
| aof_always (aof_always) | get | 276839 | 271247 | 275017 | 274367.67 | 3.65 | 3.65 |
|
||||
|
||||
|
||||
## run_hash_bench.sh 三轮均值复测(2026-03-05 12:58:34)
|
||||
|
||||
- 轮次:5 轮(取均值)
|
||||
- 参数:requests=1000000 pipeline=128 keyspace=1000000 value-size=32
|
||||
- 明细数据:`results/hash_bench_detail_20260305_125834.csv`
|
||||
- 汇总数据:`results/hash_bench_summary_20260305_125834.csv`
|
||||
|
||||
### kvstore:RSET/RGET(持久化 × allocator)
|
||||
|
||||
| 场景 | 模式 | Round1 | Round2 | Round3 | Round4 | Round5 | 均值QPS | 均值avg(us/op) | 均值elapsed(s) |
|
||||
|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|
|
||||
| persist_mypool (incremental, mypool) | set | 166832 | 172252 | 184622 | 173181 | 180547 | 175486.80 | 5.71 | 5.71 |
|
||||
| persist_mypool (incremental, mypool) | get | 187976 | 188203 | 193459 | 184560 | 190543 | 188948.20 | 5.29 | 5.29 |
|
||||
| nopersist_mypool (none, mypool) | set | 183273 | 180666 | 184588 | 182765 | 180441 | 182346.60 | 5.49 | 5.48 |
|
||||
| nopersist_mypool (none, mypool) | get | 186969 | 185652 | 183546 | 187826 | 191845 | 187167.60 | 5.34 | 5.34 |
|
||||
| persist_malloc (incremental, malloc) | set | 189030 | 135132 | 163693 | 161888 | 163137 | 162576.00 | 6.22 | 6.22 |
|
||||
| persist_malloc (incremental, malloc) | get | 198683 | 166038 | 159371 | 184912 | 181288 | 178058.40 | 5.65 | 5.65 |
|
||||
| nopersist_malloc (none, malloc) | set | 181197 | 189295 | 189128 | 181291 | 178993 | 183980.80 | 5.44 | 5.44 |
|
||||
| nopersist_malloc (none, malloc) | get | 189424 | 193316 | 194474 | 186572 | 163052 | 185367.60 | 5.42 | 5.42 |
|
||||
|
||||
### Redis:SET/GET(各持久化模式)
|
||||
|
||||
| 场景 | 模式 | Round1 | Round2 | Round3 | Round4 | Round5 | 均值QPS | 均值avg(us/op) | 均值elapsed(s) |
|
||||
|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|
|
||||
| none (none) | set | 229799 | 235912 | 233883 | 232683 | 239711 | 234397.60 | 4.27 | 4.27 |
|
||||
| none (none) | get | 256082 | 274863 | 257801 | 250389 | 262797 | 260386.40 | 3.85 | 3.84 |
|
||||
| rdb_default (rdb_default) | set | 238612 | 232348 | 231110 | 233426 | 227900 | 232679.20 | 4.30 | 4.30 |
|
||||
| rdb_default (rdb_default) | get | 268351 | 263651 | 268189 | 265139 | 249811 | 263028.20 | 3.80 | 3.80 |
|
||||
| aof_no (aof_no) | set | 178673 | 199836 | 205048 | 204901 | 195694 | 196830.40 | 5.09 | 5.09 |
|
||||
| aof_no (aof_no) | get | 245237 | 271172 | 257791 | 260414 | 269400 | 260802.80 | 3.84 | 3.84 |
|
||||
| aof_everysec (aof_everysec) | set | 198803 | 193822 | 188866 | 170821 | 97423 | 169947.00 | 6.32 | 6.32 |
|
||||
| aof_everysec (aof_everysec) | get | 277244 | 257143 | 253943 | 269896 | 284002 | 268445.60 | 3.73 | 3.73 |
|
||||
| aof_always (aof_always) | set | 66274 | 70593 | 65851 | 54098 | 74587 | 66280.60 | 15.27 | 15.27 |
|
||||
| aof_always (aof_always) | get | 263043 | 265738 | 257121 | 266889 | 272781 | 265114.40 | 3.77 | 3.77 |
|
||||
|
||||
|
||||
## run_hash_bench.sh 三轮均值复测(2026-03-06 09:00:30)
|
||||
|
||||
- 轮次:3 轮(取均值)
|
||||
- 参数:requests=1000000 pipeline=128 keyspace=1000000 value-size=32
|
||||
- 明细数据:`results/hash_bench_detail_20260306_090030.csv`
|
||||
- 汇总数据:`results/hash_bench_summary_20260306_090030.csv`
|
||||
|
||||
### kvstore:RSET/RGET(持久化 × allocator)
|
||||
|
||||
| 场景 | 模式 | Round1 | Round2 | Round3 | 均值QPS | 均值avg(us/op) | 均值elapsed(s) |
|
||||
|---|---:|---:|---:|---:|---:|---:|---:|
|
||||
| persist_mypool (incremental, mypool) | set | 170954 | 158299 | 175493 | 168248.67 | 5.96 | 5.96 |
|
||||
| persist_mypool (incremental, mypool) | get | 173519 | 181416 | 188295 | 181076.67 | 5.53 | 5.53 |
|
||||
| everysec_mypool (incremental, mypool) | set | 158378 | 160029 | 175998 | 164801.67 | 6.08 | 6.08 |
|
||||
| everysec_mypool (incremental, mypool) | get | 180343 | 177421 | 177644 | 178469.33 | 5.60 | 5.60 |
|
||||
| nopersist_mypool (none, mypool) | set | 168031 | 160304 | 168327 | 165554.00 | 6.04 | 6.04 |
|
||||
| nopersist_mypool (none, mypool) | get | 173737 | 173007 | 161784 | 169509.33 | 5.91 | 5.91 |
|
||||
| persist_malloc (incremental, malloc) | set | 160752 | 142393 | 182518 | 161887.67 | 6.24 | 6.24 |
|
||||
| persist_malloc (incremental, malloc) | get | 157918 | 177457 | 181606 | 172327.00 | 5.83 | 5.82 |
|
||||
| everysec_malloc (incremental, malloc) | set | 178195 | 168682 | 177041 | 174639.33 | 5.73 | 5.73 |
|
||||
| everysec_malloc (incremental, malloc) | get | 193145 | 149187 | 178615 | 173649.00 | 5.83 | 5.83 |
|
||||
| nopersist_malloc (none, malloc) | set | 170011 | 172967 | 171752 | 171576.67 | 5.83 | 5.83 |
|
||||
| nopersist_malloc (none, malloc) | get | 174777 | 173381 | 181365 | 176507.67 | 5.67 | 5.67 |
|
||||
|
||||
### Redis:SET/GET(各持久化模式)
|
||||
|
||||
| 场景 | 模式 | Round1 | Round2 | Round3 | 均值QPS | 均值avg(us/op) | 均值elapsed(s) |
|
||||
|---|---:|---:|---:|---:|---:|---:|---:|
|
||||
| none (none) | set | 218920 | 223448 | 222306 | 221558.00 | 4.52 | 4.51 |
|
||||
| none (none) | get | 252607 | 255685 | 256130 | 254807.33 | 3.92 | 3.92 |
|
||||
| rdb_default (rdb_default) | set | 216497 | 220924 | 214752 | 217391.00 | 4.60 | 4.60 |
|
||||
| rdb_default (rdb_default) | get | 252492 | 246194 | 248558 | 249081.33 | 4.01 | 4.02 |
|
||||
| aof_no (aof_no) | set | 166307 | 186052 | 181121 | 177826.67 | 5.63 | 5.64 |
|
||||
| aof_no (aof_no) | get | 255742 | 254771 | 257784 | 256099.00 | 3.91 | 3.90 |
|
||||
| aof_everysec (aof_everysec) | set | 180584 | 184429 | 172466 | 179159.67 | 5.59 | 5.59 |
|
||||
| aof_everysec (aof_everysec) | get | 257102 | 232146 | 242470 | 243906.00 | 4.11 | 4.11 |
|
||||
| aof_always (aof_always) | set | 65397 | 67487 | 67538 | 66807.33 | 14.97 | 14.97 |
|
||||
| aof_always (aof_always) | get | 235975 | 247116 | 227383 | 236824.67 | 4.23 | 4.23 |
|
||||
## 简要结论
|
||||
|
||||
1. 本次大 key(256)下,持久化开销主要体现在 `set`,`get` 相对更稳。
|
||||
2. `aof_no/aof_everysec` 在 Redis 写路径的开销明显;kvstore 三策略在写路径也存在可见差异。
|
||||
3. 本报告已剔除每场景 1 个异常轮次,避免单点抖动主导结论。
|
||||
|
||||
Reference in New Issue
Block a user