落盘机制修改
This commit is contained in:
@@ -1,96 +1,3 @@
|
||||
## 测试口径
|
||||
|
||||
- 时间:2026-03-04
|
||||
- 工具:`./test-redis/bench`
|
||||
- kvstore 测试命令:`RSET/RGET`
|
||||
- Redis 测试命令:`SET/GET`
|
||||
- 通用参数:
|
||||
- 写:`requests=10000 pipeline=128 keyspace=1000000000 value-size=32`
|
||||
- 读:`requests=300000 pipeline=128 keyspace=100000 value-size=32`
|
||||
- kvstore 复测时临时使用 `persistence=none`(避免历史 oplog 回放影响)。
|
||||
|
||||
---
|
||||
|
||||
## 优化项 #1:ChainBuffer 接收链路改造
|
||||
|
||||
改造点:`readv` 直写 + 回环 chunk + 节点池(减少接收路径中转拷贝)。
|
||||
|
||||
### A. 改造前后(kvstore)
|
||||
|
||||
| 指标 | 改造前(旧记录,单次) | 改造后(本次,3轮均值) | 变化 |
|
||||
|---|---:|---:|---:|
|
||||
| RSET QPS | 260604 | 331063 | **+27.04%** |
|
||||
| RGET QPS | 288107 | 360581 | **+25.15%** |
|
||||
|
||||
> 说明:旧值来自此前同文档记录;新值是本次重跑 3 轮的均值,可信度更高。
|
||||
|
||||
### B. 本次 3 轮明细(kvstore)
|
||||
|
||||
| 场景 | Round1 | Round2 | Round3 | 平均 |
|
||||
|---|---:|---:|---:|---:|
|
||||
| RSET QPS | 513321 | 507820 | 496906 | **331063** |
|
||||
| RGET QPS | 348981 | 380502 | 352261 | **360581** |
|
||||
2.87
|
||||
---
|
||||
|
||||
## Redis 对照(同口径复测)
|
||||
|
||||
### A. 默认 Redis 实例(127.0.0.1:6379,3轮均值)
|
||||
|
||||
| 场景 | Round1 | Round2 | Round3 | 平均 |
|
||||
|---|---:|---:|---:|---:|
|
||||
| SET QPS | 299221 | 130792 | 312117 | **247377** |
|
||||
| GET QPS | 349242 | 343573 | 353091 | **348635** |
|
||||
|
||||
### B. 与 kvstore 对比(本次均值)
|
||||
|
||||
| 指标 | kvstore | redis:6379 | 相对变化(kvstore 对 redis) |
|
||||
|---|---:|---:|---:|
|
||||
| 写 QPS | 331063 | 247377 | **+33.83%** |
|
||||
| 读 QPS | 360581 | 348635 | **+3.36%** |
|
||||
|
||||
> 解释:这说明“kvstore 在当前写路径上有优势,但读路径仍落后 Redis”。
|
||||
|
||||
---
|
||||
|
||||
## Redis 持久化策略对比(写压测,SET)
|
||||
|
||||
| 策略 | QPS | avg(us/op) | 备注 |
|
||||
|---|---:|---:|---|
|
||||
| `none`(无持久化) | **492561** | 2.03 | 最高吞吐(但不持久) |
|
||||
| `rdb_default` | **285885** | 3.50 | 本次“持久化策略中最快” |
|
||||
| `aof_no` | 281870 | 3.55 | AOF,`appendfsync no` |
|
||||
| `aof_everysec` | 266878 | 3.75 | AOF,`appendfsync everysec` |
|
||||
| `aof_always` | 110793 | 9.03 | 最慢,但最强一致性 |
|
||||
|
||||
结论:
|
||||
|
||||
- 如果包含“无持久化”,最快是 `none`。
|
||||
- 如果限定“必须持久化”,本次最快是 `rdb_default`(略快于 `aof_no`)。
|
||||
|
||||
---
|
||||
|
||||
## 历史复现命令(关键)
|
||||
|
||||
```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 读(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:
|
||||
|
||||
# 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:
|
||||
|
||||
# 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:
|
||||
|
||||
# Redis 策略对比(示例:6381 配置成 rdb_default)
|
||||
./test-redis/bench --host 127.0.0.1 --port 6381 --mode set --requests 10000 --pipeline 128 --keyspace 1000000000 --value-size 32 --key-prefix bench:ts:redis:
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## `bench` 程序使用说明(命令 + 参数解释)
|
||||
|
||||
### 1) 快速查看帮助
|
||||
@@ -136,6 +43,34 @@
|
||||
| `--seed <n>` | 当前时间 | 随机种子;固定后可复现实验 |
|
||||
| `--verify-get` | 关闭 | 开启后校验 GET 返回内容是否与写入值一致 |
|
||||
| `--help` / `-h` | - | 打印帮助 |
|
||||
|
||||
|
||||
## 命令
|
||||
|
||||
```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 读(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:
|
||||
|
||||
|
||||
# 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:
|
||||
|
||||
# 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:
|
||||
|
||||
# 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:
|
||||
|
||||
./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:
|
||||
```
|
||||
|
||||
|
||||
|
||||
## run_hash_bench.sh 三轮均值复测(2026-03-05 07:59:54)
|
||||
|
||||
- 轮次:3 轮(取均值)
|
||||
@@ -171,3 +106,79 @@
|
||||
| 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 |
|
||||
|
||||
|
||||
BIN
test-redis/bench
Executable file
BIN
test-redis/bench
Executable file
Binary file not shown.
@@ -54,11 +54,12 @@ set_config() {
|
||||
local ptype="$1"
|
||||
local alloc="$2"
|
||||
local pdir="$3"
|
||||
python3 - "$CONFIG_XML" "$ptype" "$alloc" "$pdir" "$KV_PORT" <<'PY'
|
||||
local oplog_sync="$4"
|
||||
python3 - "$CONFIG_XML" "$ptype" "$alloc" "$pdir" "$KV_PORT" "$oplog_sync" <<'PY'
|
||||
import sys
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
path, ptype, alloc, pdir, kv_port = sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5]
|
||||
path, ptype, alloc, pdir, kv_port, oplog_sync = sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6]
|
||||
tree = ET.parse(path)
|
||||
root = tree.getroot()
|
||||
|
||||
@@ -81,10 +82,13 @@ persistence = root.find("persistence")
|
||||
if persistence is not None:
|
||||
t = persistence.find("type")
|
||||
d = persistence.find("dir")
|
||||
osync = persistence.find("oplog_sync")
|
||||
if t is not None:
|
||||
t.text = ptype
|
||||
if d is not None:
|
||||
d.text = pdir
|
||||
if osync is not None:
|
||||
osync.text = oplog_sync
|
||||
|
||||
memory = root.find("memory")
|
||||
if memory is not None:
|
||||
@@ -277,6 +281,7 @@ run_kv_case() {
|
||||
local strategy="$1"
|
||||
local persistence="$2"
|
||||
local alloc="$3"
|
||||
local oplog_sync="$4"
|
||||
|
||||
local -a set_qps_list=() set_avg_list=() set_elapsed_list=()
|
||||
local -a get_qps_list=() get_avg_list=() get_elapsed_list=()
|
||||
@@ -289,7 +294,7 @@ run_kv_case() {
|
||||
rm -rf "$pdir_abs"
|
||||
mkdir -p "$pdir_abs"
|
||||
|
||||
set_config "$persistence" "$alloc" "$pdir_rel"
|
||||
set_config "$persistence" "$alloc" "$pdir_rel" "$oplog_sync"
|
||||
start_kv "${strategy}_r${round}"
|
||||
|
||||
local m qps avg elapsed
|
||||
@@ -496,10 +501,12 @@ main() {
|
||||
require_cmd redis-cli
|
||||
ensure_binaries
|
||||
|
||||
run_kv_case "persist_mypool" "incremental" "mypool"
|
||||
run_kv_case "nopersist_mypool" "none" "mypool"
|
||||
run_kv_case "persist_malloc" "incremental" "malloc"
|
||||
run_kv_case "nopersist_malloc" "none" "malloc"
|
||||
run_kv_case "persist_mypool" "incremental" "mypool" "none"
|
||||
run_kv_case "everysec_mypool" "incremental" "mypool" "every_sec"
|
||||
run_kv_case "nopersist_mypool" "none" "mypool" "none"
|
||||
run_kv_case "persist_malloc" "incremental" "malloc" "none"
|
||||
run_kv_case "everysec_malloc" "incremental" "malloc" "every_sec"
|
||||
run_kv_case "nopersist_malloc" "none" "malloc" "none"
|
||||
|
||||
run_redis_case "none" "none" 6381 "\"\"" "no" "everysec"
|
||||
run_redis_case "rdb_default" "rdb_default" 6382 "900 1 300 10 60 10000" "no" "everysec"
|
||||
|
||||
155
test-redis/run_overwrite5_bench.sh
Normal file
155
test-redis/run_overwrite5_bench.sh
Normal file
@@ -0,0 +1,155 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
TS=$(date +%Y%m%d_%H%M%S)
|
||||
CSV="test-redis/results/kv_overwrite5_${TS}.csv"
|
||||
SUMMARY="test-redis/results/kv_overwrite5_summary_${TS}.csv"
|
||||
BACKUP=$(mktemp /tmp/config.xml.bak.${TS}.XXXXXX)
|
||||
cp config/config.xml "$BACKUP"
|
||||
|
||||
cleanup() {
|
||||
cp "$BACKUP" config/config.xml || true
|
||||
rm -f "$BACKUP" || true
|
||||
pkill -x kvstore >/dev/null 2>&1 || true
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
pkill -x kvstore >/dev/null 2>&1 || true
|
||||
mkdir -p test-redis/results
|
||||
rm -rf data/*
|
||||
|
||||
echo "case,mode,round,qps,avg_us,requests,keyspace,value_size,pipeline" > "$CSV"
|
||||
|
||||
auto_set_cfg() {
|
||||
local ptype="$1" alloc="$2" syncm="$3" pdir="$4"
|
||||
python3 - "$ptype" "$alloc" "$syncm" "$pdir" <<'PY'
|
||||
import sys
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
ptype, alloc, syncm, pdir = sys.argv[1:]
|
||||
path = "config/config.xml"
|
||||
tree = ET.parse(path)
|
||||
root = tree.getroot()
|
||||
|
||||
server = root.find("server")
|
||||
if server is not None:
|
||||
ip = server.find("ip")
|
||||
port = server.find("port")
|
||||
mode = server.find("mode")
|
||||
replica = server.find("replica")
|
||||
if ip is not None:
|
||||
ip.text = "127.0.0.1"
|
||||
if port is not None:
|
||||
port.text = "8888"
|
||||
if mode is not None:
|
||||
mode.text = "master"
|
||||
if replica is not None:
|
||||
replica.text = "disable"
|
||||
|
||||
persist = root.find("persistence")
|
||||
if persist is not None:
|
||||
ptype_node = persist.find("type")
|
||||
dir_node = persist.find("dir")
|
||||
sync_node = persist.find("oplog_sync")
|
||||
if ptype_node is not None:
|
||||
ptype_node.text = ptype
|
||||
if dir_node is not None:
|
||||
dir_node.text = pdir
|
||||
if sync_node is not None:
|
||||
sync_node.text = syncm
|
||||
|
||||
memory = root.find("memory")
|
||||
if memory is not None:
|
||||
alloc_node = memory.find("allocator")
|
||||
leak_node = memory.find("leakage")
|
||||
if alloc_node is not None:
|
||||
alloc_node.text = alloc
|
||||
if leak_node is not None:
|
||||
leak_node.text = "disable"
|
||||
|
||||
tree.write(path, encoding="UTF-8", xml_declaration=True)
|
||||
PY
|
||||
}
|
||||
|
||||
wait_port_open() {
|
||||
for _ in $(seq 1 200); do
|
||||
if ss -ltn | rg -q ":8888\\b"; then
|
||||
return 0
|
||||
fi
|
||||
sleep 0.1
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
extract_qps() {
|
||||
local line="$1"
|
||||
echo "$line" | sed -E "s/.*qps=([0-9]+).*/\\1/"
|
||||
}
|
||||
|
||||
extract_avg() {
|
||||
local line="$1"
|
||||
echo "$line" | sed -E "s/.*avg=([0-9]+(\\.[0-9]+)?).*/\\1/"
|
||||
}
|
||||
|
||||
run_case() {
|
||||
local cname="$1" ptype="$2" alloc="$3" syncm="$4"
|
||||
local REQ=2000000 KEYSPACE=1000000 VSIZE=64 PIPE=128
|
||||
|
||||
for r in 1 2 3 4 5; do
|
||||
local pdir="data/ovw_${cname}_r${r}_${TS}"
|
||||
local line qps avg out kp
|
||||
|
||||
rm -rf "$pdir"
|
||||
mkdir -p "$pdir"
|
||||
auto_set_cfg "$ptype" "$alloc" "$syncm" "$pdir"
|
||||
|
||||
./kvstore > "/tmp/kv_${cname}_r${r}_${TS}.log" 2>&1 &
|
||||
local kvpid=$!
|
||||
wait_port_open
|
||||
|
||||
kp="bench:ovw:long-key-prefix-abcdefghijklmnopqrstuvwxyz-0123456789:${cname}:r${r}:set:"
|
||||
out=$(./test-redis/bench \
|
||||
--host 127.0.0.1 --port 8888 --mode set \
|
||||
--set-cmd RSET --get-cmd RGET \
|
||||
--requests "$REQ" --pipeline "$PIPE" --keyspace "$KEYSPACE" \
|
||||
--value-size "$VSIZE" --seed $((13000 + r * 31)) \
|
||||
--key-prefix "$kp")
|
||||
echo "$out"
|
||||
line=$(echo "$out" | rg "\\[result\\]" | tail -n1)
|
||||
qps=$(extract_qps "$line")
|
||||
avg=$(extract_avg "$line")
|
||||
echo "${cname},set,${r},${qps},${avg},${REQ},${KEYSPACE},${VSIZE},${PIPE}" >> "$CSV"
|
||||
|
||||
kp="bench:ovw:long-key-prefix-abcdefghijklmnopqrstuvwxyz-0123456789:${cname}:r${r}:get:"
|
||||
out=$(./test-redis/bench \
|
||||
--host 127.0.0.1 --port 8888 --mode get \
|
||||
--set-cmd RSET --get-cmd RGET \
|
||||
--requests "$REQ" --pipeline "$PIPE" --keyspace "$KEYSPACE" \
|
||||
--value-size "$VSIZE" --seed $((23000 + r * 31)) --verify-get \
|
||||
--key-prefix "$kp")
|
||||
echo "$out"
|
||||
line=$(echo "$out" | rg "\\[result\\]" | tail -n1)
|
||||
qps=$(extract_qps "$line")
|
||||
avg=$(extract_avg "$line")
|
||||
echo "${cname},get,${r},${qps},${avg},${REQ},${KEYSPACE},${VSIZE},${PIPE}" >> "$CSV"
|
||||
|
||||
kill "$kvpid" >/dev/null 2>&1 || true
|
||||
wait "$kvpid" >/dev/null 2>&1 || true
|
||||
done
|
||||
}
|
||||
|
||||
run_case nopersist_mypool none mypool none
|
||||
run_case persist_mypool incremental mypool none
|
||||
run_case everysec_mypool incremental mypool every_sec
|
||||
run_case nopersist_malloc none malloc none
|
||||
run_case persist_malloc incremental malloc none
|
||||
run_case everysec_malloc incremental malloc every_sec
|
||||
|
||||
{
|
||||
echo "case,mode,avg_qps,avg_avg_us"
|
||||
awk -F, 'NR>1{ k=$1","$2; q[k]+=$4; u[k]+=$5; n[k]++ } END{ for(k in n) printf "%s,%.2f,%.2f\n", k, q[k]/n[k], u[k]/n[k] }' "$CSV" | sort
|
||||
} > "$SUMMARY"
|
||||
|
||||
echo "RAW_CSV=$CSV"
|
||||
echo "SUMMARY_CSV=$SUMMARY"
|
||||
cat "$SUMMARY"
|
||||
Reference in New Issue
Block a user