83 lines
2.2 KiB
Markdown
83 lines
2.2 KiB
Markdown
# 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 区域:
|
||
- `### 阶段验收`
|
||
- `### 正确性验证方案`
|