3.3 KiB
3.3 KiB
Phase 0 - 基线命令与验证记录
- 日期: 2026-03-02
- 主机:
ubuntu(本地开发机) - db_bench 路径:
/home/lian/env/rocksdb-test/db_bench - LD_PRELOAD 库:
/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so
1) 成功基线(不启用 LD_PRELOAD)
命令
rm -rf /tmp/rdb_phase0_plain && \
strace -f -qq -o /tmp/phase0_plain.strace \
-e trace=%file,%desc,fsync,fdatasync,ftruncate,fallocate,pread64,pwrite64,lseek,rename,renameat,renameat2 \
/home/lian/env/rocksdb-test/db_bench \
--benchmarks=fillseq \
--db=/tmp/rdb_phase0_plain \
--num=5000 \
--value_size=128 \
--threads=1 \
--compression_type=none \
--stats_interval_seconds=0
结果摘要
- 命令退出码:
0 - db_bench 输出:
fillseq ... 5000 operations(成功) - errno 分布(trace 全局):
ENOENT x11EEXIST x9
- 关键 syscall(全局计数):
openat 91,fcntl 82,pread64 8,fsync 10,fdatasync 10,ftruncate 5,fallocate 5,rename 9
- DB 路径相关 syscall(
/tmp/rdb_phase0_plain):openat 61,mkdir 12,access 10,rename 9,unlink 12,rmdir 2
2) 失败分支(启用 LD_PRELOAD,/zvfs 路径)
命令
strace -f -qq -o /tmp/phase0_preload.strace \
-e trace=%file,%desc,fsync,fdatasync,ftruncate,fallocate,pread64,pwrite64,lseek,rename,renameat,renameat2 \
env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so \
/home/lian/env/rocksdb-test/db_bench \
--benchmarks=fillseq \
--db=/zvfs/rdb_phase0_preload \
--num=1000 \
--value_size=128 \
--threads=1 \
--compression_type=none \
--stats_interval_seconds=0
结果摘要
- 命令退出码:
1 - 关键报错:
Cannot use IOVA as 'PA'Failed to initialize DPDKopen error: ... While mkdir if missing: /zvfs/rdb_phase0_preload: No such file or directory
/zvfs/rdb_phase0_preload相关错误码:ENOENT x4
- 直接证据(trace):
openat(..., "/zvfs/rdb_phase0_preload", ... O_DIRECTORY) = -1 ENOENTmkdir("/zvfs/rdb_phase0_preload", 0755) = -1 ENOENT
3) 提取统计的复用命令
3.1 syscall 频次(全局)
sed -E 's/^\[pid +[0-9]+\] +//; s/^[0-9]+ +//' /tmp/phase0_plain.strace \
| grep -oP '^[a-zA-Z_][a-zA-Z0-9_]*(?=\()' \
| sort | uniq -c | sort -nr
3.2 errno 分布
grep -oP '= -1 [A-Z0-9]+' /tmp/phase0_plain.strace | awk '{print $3}' | sort | uniq -c | sort -nr
grep -oP '= -1 [A-Z0-9]+' /tmp/phase0_preload.strace | awk '{print $3}' | sort | uniq -c | sort -nr
3.3 DB 路径相关 syscall
grep '/tmp/rdb_phase0_plain' /tmp/phase0_plain.strace \
| sed -E 's/^\[pid +[0-9]+\] +//; s/^[0-9]+ +//' \
| grep -oP '^[a-zA-Z_][a-zA-Z0-9_]*(?=\()' \
| sort | uniq -c | sort -nr
4) Phase0 正确性验证清单(执行记录)
- 每个“phase2 必须实现 syscall”都在矩阵中给出复现证据或来源。
- 基线命令可重复执行(成功路径与失败路径各 1 组)。
- 输出包含 syscall 统计与错误码分布。
- 验证记录已写入
plan/baseline_commands.md。
5) 已知限制(phase1 前需处理)
- 当前环境中 SPDK 初始化失败(IOVA/PA),导致无法在本机直接完成完整
/zvfsI/O 链路验证。 - phase0 主要覆盖
fillseq;phase1/phase2 开始前应补readrandom/overwrite的 syscall 采样。