解决多线程dmabuffer竞态问题
This commit is contained in:
91
README.md
91
README.md
@@ -123,6 +123,7 @@ make -j"$(nproc)"
|
||||
|
||||
cd ..
|
||||
make -j"$(nproc)"
|
||||
mkdir -p tests/bin
|
||||
make test -j"$(nproc)"
|
||||
```
|
||||
|
||||
@@ -173,8 +174,6 @@ LD_PRELOAD=./src/libzvfs.so ZVFS_TEST_ROOT=/zvfs ./tests/bin/hook_api_test
|
||||
|
||||
### 5.3 历史结果
|
||||
|
||||
> 以下是历史版本结论,用于说明设计方向。
|
||||
|
||||
- QD=1 下可达到 `spdk_nvme_perf` 的约 `90%~95%`。
|
||||
- 相对同机 `O_DIRECT`,顺序写吞吐可有约 `2.2x~2.3x` 提升。
|
||||
- 非对齐写因 RMW 开销,吞吐明显下降。
|
||||
@@ -216,53 +215,9 @@ Disk stats (read/write):
|
||||
sda: ios=0/118, merge=0/104, ticks=0/66, in_queue=67, util=0.24%
|
||||
```
|
||||
|
||||
#### psync
|
||||
```shell
|
||||
root@ubuntu20-129:/home/lian/share/zvfs# fio ./fio_script/psync.fio
|
||||
test: (g=0): rw=randwrite, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=psync, iodepth=64
|
||||
fio-3.16
|
||||
Starting 1 thread
|
||||
Jobs: 1 (f=1): [w(1)][100.0%][w=39.5MiB/s][w=2528 IOPS][eta 00m:00s]
|
||||
test: (groupid=0, jobs=1): err= 0: pid=16831: Sat Mar 14 14:13:39 2026
|
||||
Description : ["variable bs"]
|
||||
write: IOPS=2468, BW=38.6MiB/s (40.4MB/s)(386MiB/10001msec); 0 zone resets
|
||||
clat (usec): min=184, max=16636, avg=401.35, stdev=153.93
|
||||
lat (usec): min=184, max=16636, avg=401.86, stdev=153.98
|
||||
clat percentiles (usec):
|
||||
| 1.00th=[ 247], 5.00th=[ 273], 10.00th=[ 289], 20.00th=[ 318],
|
||||
| 30.00th=[ 338], 40.00th=[ 355], 50.00th=[ 375], 60.00th=[ 400],
|
||||
| 70.00th=[ 429], 80.00th=[ 469], 90.00th=[ 545], 95.00th=[ 611],
|
||||
| 99.00th=[ 783], 99.50th=[ 873], 99.90th=[ 1106], 99.95th=[ 1287],
|
||||
| 99.99th=[ 1942]
|
||||
bw ( KiB/s): min=31136, max=51008, per=100.00%, avg=39550.32, stdev=4617.82, samples=19
|
||||
iops : min= 1946, max= 3188, avg=2471.79, stdev=288.55, samples=19
|
||||
lat (usec) : 250=1.32%, 500=83.72%, 750=13.61%, 1000=1.11%
|
||||
lat (msec) : 2=0.23%, 4=0.01%, 20=0.01%
|
||||
cpu : usr=2.83%, sys=28.58%, ctx=24699, majf=0, minf=0
|
||||
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
|
||||
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
|
||||
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
|
||||
issued rwts: total=0,24690,0,0 short=0,0,0,0 dropped=0,0,0,0
|
||||
latency : target=0, window=0, percentile=100.00%, depth=64
|
||||
|
||||
Run status group 0 (all jobs):
|
||||
WRITE: bw=38.6MiB/s (40.4MB/s), 38.6MiB/s-38.6MiB/s (40.4MB/s-40.4MB/s), io=386MiB (405MB), run=10001-10001msec
|
||||
|
||||
Disk stats (read/write):
|
||||
sda: ios=0/24384, merge=0/4, ticks=0/7764, in_queue=7764, util=99.10%
|
||||
```
|
||||
|
||||
### 5.5 pgbench
|
||||
```shell
|
||||
root@ubuntu20:/home/lian/try/zvfs# ./scripts/run_pgbench_no_mmap.sh
|
||||
当前配置:
|
||||
host=127.0.0.1 port=5432 db=benchdb
|
||||
scale=1 clients=1 threads=1 time=15s preload=1
|
||||
init_jobs=1 init_steps=dtg skip_init=0
|
||||
|
||||
[1/2] pgbench 初始化(-i)
|
||||
some of the specified options cannot be used in initialization (-i) mode
|
||||
root@ubuntu20:/home/lian/try/zvfs# ./scripts/run_pgbench_no_mmap.sh
|
||||
root@ubuntu20-129:/home/lian/share/zvfs# ./scripts/run_pgbench_no_mmap.sh
|
||||
当前配置:
|
||||
host=127.0.0.1 port=5432 db=benchdb
|
||||
scale=1 clients=1 threads=1 time=15s preload=1
|
||||
@@ -276,7 +231,7 @@ NOTICE: table "pgbench_history" does not exist, skipping
|
||||
NOTICE: table "pgbench_tellers" does not exist, skipping
|
||||
creating tables...
|
||||
generating data...
|
||||
100000 of 100000 tuples (100%) done (elapsed 0.02 s, remaining 0.00 s)
|
||||
100000 of 100000 tuples (100%) done (elapsed 15.06 s, remaining 0.00 s)
|
||||
done.
|
||||
[2/2] pgbench 压测(-T)
|
||||
starting vacuum...end.
|
||||
@@ -286,10 +241,42 @@ query mode: simple
|
||||
number of clients: 1
|
||||
number of threads: 1
|
||||
duration: 15 s
|
||||
number of transactions actually processed: 1381
|
||||
latency average = 10.869 ms
|
||||
tps = 92.003503 (including connections establishing)
|
||||
tps = 92.206743 (excluding connections establishing)
|
||||
number of transactions actually processed: 564
|
||||
latency average = 26.614 ms
|
||||
tps = 37.573586 (including connections establishing)
|
||||
tps = 38.176262 (excluding connections establishing)
|
||||
```
|
||||
|
||||
|
||||
```shell
|
||||
root@ubuntu20-129:/home/lian/share/zvfs# ./scripts/run_pgbench.sh
|
||||
当前配置:
|
||||
host=127.0.0.1 port=5432 db=postgres
|
||||
scale=1 clients=1 threads=1 time=15s preload=0
|
||||
init_jobs=1 init_steps=dtg skip_init=0
|
||||
|
||||
[1/2] pgbench 初始化(-i)
|
||||
dropping old tables...
|
||||
NOTICE: table "pgbench_accounts" does not exist, skipping
|
||||
NOTICE: table "pgbench_branches" does not exist, skipping
|
||||
NOTICE: table "pgbench_history" does not exist, skipping
|
||||
NOTICE: table "pgbench_tellers" does not exist, skipping
|
||||
creating tables...
|
||||
generating data...
|
||||
100000 of 100000 tuples (100%) done (elapsed 1.08 s, remaining 0.00 s)
|
||||
done.
|
||||
[2/2] pgbench 压测(-T)
|
||||
starting vacuum...end.
|
||||
transaction type: <builtin: TPC-B (sort of)>
|
||||
scaling factor: 1
|
||||
query mode: simple
|
||||
number of clients: 1
|
||||
number of threads: 1
|
||||
duration: 15 s
|
||||
number of transactions actually processed: 586
|
||||
latency average = 25.602 ms
|
||||
tps = 39.059387 (including connections establishing)
|
||||
tps = 39.102273 (excluding connections establishing)
|
||||
```
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user