Files
zvfs/plan/phase2_validation.md

2.2 KiB
Raw Blame History

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/rmdir
    • pread/pwrite + 稀疏洞校验
    • fsync/fdatasync
    • ftruncate
    • fstat/stat/access
    • rename
    • O_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 区域:

  • ### 阶段验收
  • ### 正确性验证方案