# 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) ### 命令 ```bash 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 x11` - `EEXIST 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 路径) ### 命令 ```bash 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 DPDK` - `open 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 ENOENT` - `mkdir("/zvfs/rdb_phase0_preload", 0755) = -1 ENOENT` ## 3) 提取统计的复用命令 ### 3.1 syscall 频次(全局) ```bash 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 分布 ```bash 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 ```bash 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 正确性验证清单(执行记录) - [x] 每个“phase2 必须实现 syscall”都在矩阵中给出复现证据或来源。 - [x] 基线命令可重复执行(成功路径与失败路径各 1 组)。 - [x] 输出包含 syscall 统计与错误码分布。 - [x] 验证记录已写入 `plan/baseline_commands.md`。 ## 5) 已知限制(phase1 前需处理) 1. 当前环境中 SPDK 初始化失败(IOVA/PA),导致无法在本机直接完成完整 `/zvfs` I/O 链路验证。 2. phase0 主要覆盖 `fillseq`;phase1/phase2 开始前应补 `readrandom/overwrite` 的 syscall 采样。