性能测试
This commit is contained in:
107
README.md
107
README.md
@@ -19,7 +19,61 @@ make
|
||||
|
||||
```
|
||||
|
||||
## 测试
|
||||
## REDIS 对比测试
|
||||
### 数据口径(2026-03-07 大 key 5轮复测)
|
||||
- 参数:`requests=1000000 pipeline=128 keyspace=1000000 value-size=256`
|
||||
- 轮次:每个策略 `5` 轮,按场景剔除 `1` 个异常轮次后取 `4` 轮均值
|
||||
- kvstore 源数据:`test-redis/results/hash_bench_fair_summary_20260307_062549.csv`
|
||||
- redis 源数据:`test-redis/results/redis_bigkey_summary_20260307_063158.csv`
|
||||
- 去异常结果:
|
||||
- `test-redis/results/hash_bench_fair_trimmed_20260307_062549.csv`
|
||||
- `test-redis/results/redis_bigkey_trimmed_20260307_063158.csv`
|
||||
|
||||
### kvstore 协议开销(基线:nopersist,去异常后)
|
||||
| 策略 | set 均值QPS | set 均值us/op | get 均值QPS | get 均值us/op |
|
||||
|---|---:|---:|---:|---:|
|
||||
| nopersist | 150084.25 | 6.67 | 163760.25 | 6.11 |
|
||||
| persist_no | 140206.50 | 7.13 | 164554.25 | 6.08 |
|
||||
| persist_everysec | 133105.75 | 7.52 | 163358.25 | 6.12 |
|
||||
|
||||
| 相对 nopersist 的开销 | 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% |
|
||||
|
||||
### Redis 协议开销(基线:none,去异常后)
|
||||
| 策略 | set 均值QPS | set 均值us/op | get 均值QPS | get 均值us/op |
|
||||
|---|---:|---:|---:|---:|
|
||||
| none | 207470.00 | 4.82 | 217642.50 | 4.59 |
|
||||
| aof_no | 143399.50 | 6.98 | 214023.50 | 4.68 |
|
||||
| aof_everysec | 141893.00 | 7.05 | 208713.75 | 4.79 |
|
||||
|
||||
| 相对 none 的开销 | 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% |
|
||||
|
||||
结论:本轮数据下,持久化开销仍主要体现在 `set`,`get` 相对更稳;Redis 的 AOF 写路径开销显著高于无持久化。
|
||||
|
||||
## 调用开销
|
||||
### gprof Flat Profile(Top 12,按 self time)
|
||||
|
||||
| 排名 | 函数 | self time % | self seconds | calls |
|
||||
|---:|---|---:|---:|---:|
|
||||
| 1 | `rbtree_node_get_key` | 58.34 | 0.56 | 103209091 |
|
||||
| 2 | `rbtree_search` | 7.29 | 0.07 | 1874362 |
|
||||
| 3 | `kvs_keycmp` | 5.73 | 0.06 | 74287566 |
|
||||
| 4 | `ascii_casecmp` | 3.13 | 0.03 | 21490996 |
|
||||
| 5 | `task_init` | 3.13 | 0.03 | 1397974 |
|
||||
| 6 | `mp_page_create` | 3.13 | 0.03 | 23556 |
|
||||
| 7 | `need` | 2.08 | 0.02 | 14042759 |
|
||||
| 8 | `parse_i64` | 2.08 | 0.02 | 7029783 |
|
||||
| 9 | `mp_page_alloc` | 2.08 | 0.02 | 5122487 |
|
||||
| 10 | `rbtree_node_size` | 2.08 | 0.02 | 1860739 |
|
||||
| 11 | `submit_write` | 2.08 | 0.02 | 1394599 |
|
||||
| 12 | `rbtree_insert` | 2.08 | 0.02 | 926531 |
|
||||
|
||||
## 其他测试
|
||||
### 测试1:性能测试
|
||||
测试条件:
|
||||
1. 不启用持久化。
|
||||
@@ -162,57 +216,6 @@ average qps:777838
|
||||
ALL TESTS PASSED.
|
||||
```
|
||||
|
||||
## REDIS 对比测试
|
||||
### 数据口径(2026-03-06 09:00:30)
|
||||
- 轮次:3 轮(取均值)
|
||||
- 参数:requests=1000000 pipeline=128 keyspace=1000000 value-size=32
|
||||
- 数据来源:`test-redis/results/hash_bench_summary_20260306_090030.csv`
|
||||
|
||||
### 仅看 mypool 与 Redis
|
||||
|
||||
| 系统 | 场景 | set 均值QPS | set 均值us/op | get 均值QPS | get 均值us/op |
|
||||
|---|---|---:|---:|---:|---:|
|
||||
| kvstore (mypool) | none | 165554.00 | 6.04 | 169509.33 | 5.91 |
|
||||
| kvstore (mypool) | incremental(oplog_sync=none) | 168248.67 | 5.96 | 181076.67 | 5.53 |
|
||||
| kvstore (mypool) | incremental(oplog_sync=every_sec) | 164801.67 | 6.08 | 178469.33 | 5.60 |
|
||||
| redis | none | 221558.00 | 4.52 | 254807.33 | 3.92 |
|
||||
| redis | aof_no | 177826.67 | 5.63 | 256099.00 | 3.91 |
|
||||
| redis | aof_everysec | 179159.67 | 5.59 | 243906.00 | 4.11 |
|
||||
| redis | aof_always | 66807.33 | 14.97 | 236824.67 | 4.23 |
|
||||
|
||||
### oplog 与 AOF 安全性级别
|
||||
1. `oplog_sync=none` 时,kvstore 仅异步写入,不做周期 fsync,安全级别仍接近 Redis `aof_no`。
|
||||
2. `oplog_sync=every_sec` 时,kvstore 每秒执行一次“flush + 每个 uring worker 提交 fsync(drain) 并等待回调”,可提供接近 Redis `aof_everysec` 的周期性落盘保证(仍可能丢失最近 1 秒窗口)。
|
||||
3. 与 Redis 相比,当前 kvstore 仍缺少 AOF 尾部校验/截断等恢复增强机制,崩溃恢复鲁棒性上略弱于 Redis AOF 体系。
|
||||
|
||||
### 落盘性能退化(写路径,set)
|
||||
1. kvstore(mypool):`none 165554.00 -> incremental(oplog_sync=none) 168248.67`,变化 `+1.63%`(本轮无退化,属抖动范围)。
|
||||
2. kvstore(mypool):`none 165554.00 -> incremental(oplog_sync=every_sec) 164801.67`,退化 `0.45%`。
|
||||
3. redis:`none 221558.00 -> aof_no 177826.67`,退化 `19.74%`。
|
||||
4. redis:`none 221558.00 -> aof_everysec 179159.67`,退化 `19.14%`。
|
||||
5. redis:`none 221558.00 -> aof_always 66807.33`,退化 `69.85%`。
|
||||
6. 对应 set 平均时延(us/op)变化:kvstore every_sec `6.04 -> 6.08`(`+0.61%`),redis aof_no `4.52 -> 5.63`(`+24.72%`),redis aof_everysec `4.52 -> 5.59`(`+23.69%`),redis aof_always `4.52 -> 14.97`(`+231.51%`)。
|
||||
|
||||
结论:本轮下 kvstore(mypool) 的 `every_sec` 持久化性能代价远低于 Redis AOF 系列,同时安全性目标已从 `aof_no` 抬升到接近 `aof_everysec` 的级别。
|
||||
|
||||
## 调用开销
|
||||
### gprof Flat Profile(Top 12,按 self time)
|
||||
|
||||
| 排名 | 函数 | self time % | self seconds | calls |
|
||||
|---:|---|---:|---:|---:|
|
||||
| 1 | `rbtree_node_get_key` | 58.34 | 0.56 | 103209091 |
|
||||
| 2 | `rbtree_search` | 7.29 | 0.07 | 1874362 |
|
||||
| 3 | `kvs_keycmp` | 5.73 | 0.06 | 74287566 |
|
||||
| 4 | `ascii_casecmp` | 3.13 | 0.03 | 21490996 |
|
||||
| 5 | `task_init` | 3.13 | 0.03 | 1397974 |
|
||||
| 6 | `mp_page_create` | 3.13 | 0.03 | 23556 |
|
||||
| 7 | `need` | 2.08 | 0.02 | 14042759 |
|
||||
| 8 | `parse_i64` | 2.08 | 0.02 | 7029783 |
|
||||
| 9 | `mp_page_alloc` | 2.08 | 0.02 | 5122487 |
|
||||
| 10 | `rbtree_node_size` | 2.08 | 0.02 | 1860739 |
|
||||
| 11 | `submit_write` | 2.08 | 0.02 | 1394599 |
|
||||
| 12 | `rbtree_insert` | 2.08 | 0.02 | 926531 |
|
||||
|
||||
## 项目收获
|
||||
#### reactor网络模型,用户态网络缓冲区的写法。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user