zvfs: hook db_bench thread 1 complete

This commit is contained in:
2026-03-02 14:45:24 +00:00
parent 321212826b
commit c33a694bd8
12 changed files with 3349 additions and 794 deletions

82
plan/phase2_validation.md Normal file
View 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 区域:
- `### 阶段验收`
- `### 正确性验证方案`