2.2 KiB
2.2 KiB
Phase 2 验证方案(用户执行)
目标:验证 phase2 新增 hook 与 POSIX 语义(openat/pread/pwrite/fsync/ftruncate/stat/rename 等)。
1) 构建
cd /home/lian/share/10.1-spdk/zvfs
make -C zvfs -j
make -C test -j
2) 关键回归(LD_PRELOAD)
cd /home/lian/share/10.1-spdk/zvfs
sudo env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so ./test/bin/test_basic /zvfs
sudo env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so ./test/bin/test_lseek /zvfs
sudo env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so ./test/bin/test_two_files /zvfs
sudo env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so ./test/bin/test_phase2_posix /zvfs
期望:
- 以上 4 个测试全部 PASSED。
test_phase2_posix会覆盖:mkdir/openat/close/rmdirpread/pwrite+ 稀疏洞校验fsync/fdatasyncftruncatefstat/stat/accessrenameO_EXCL与只读 fd 上write的 errno
3) db_bench 最小验证
cd /home/lian/share/10.1-spdk/zvfs
sudo 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_phase2 \
--num=200000 \
--value_size=128 \
--threads=1 \
--compression_type=none \
--stats_interval_seconds=5
sudo /home/lian/env/rocksdb-test/db_bench \
--benchmarks=fillseq \
--db=/tmp/rdb_native \
--num=200000 \
--value_size=128 \
--threads=1 \
--compression_type=none \
--stats_interval_seconds=5
期望:
- 不出现
Function not implemented - 不出现
Bad file descriptor - 不出现
While mkdir if missing相关ENOENT
4) 失败场景建议(可选)
用 strace 辅助确认关键 syscall 已被接管:
sudo strace -f -qq -o /tmp/phase2_check.strace \
-e trace=%file,%desc,fsync,fdatasync,ftruncate,pread64,pwrite64,rename,fcntl \
env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so ./test/bin/test_phase2_posix /zvfs
看点:
openat("/zvfs/...")不再因目录缺失直接失败rename/ftruncate/pread64/fdatasync调用链完整
5) 回填要求
执行后请把结果回填到 plan/plan.md 的 phase2 区域:
### 阶段验收### 正确性验证方案