zvfs: hook db_bench thread 1 complete
This commit is contained in:
82
plan/phase2_validation.md
Normal file
82
plan/phase2_validation.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# 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 区域:
|
||||
- `### 阶段验收`
|
||||
- `### 正确性验证方案`
|
||||
Reference in New Issue
Block a user