Files
zvfs/plan/phase2_validation.md

83 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 2 验证方案(用户执行)
目标:验证 phase2 新增 hook 与 POSIX 语义openat/pread/pwrite/fsync/ftruncate/stat/rename 等)。
## 1) 构建
```bash
cd /home/lian/share/10.1-spdk/zvfs
make -C zvfs -j
make -C test -j
```
## 2) 关键回归LD_PRELOAD
```bash
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 最小验证
```bash
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 已被接管:
```bash
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 区域:
- `### 阶段验收`
- `### 正确性验证方案`