Files
zvfs/plan/baseline_commands.md

99 lines
3.3 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 0 - 基线命令与验证记录
- 日期: 2026-03-02
- 主机: `ubuntu`(本地开发机)
- db_bench 路径: `/home/lian/env/rocksdb-test/db_bench`
- LD_PRELOAD 库: `/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so`
## 1) 成功基线(不启用 LD_PRELOAD
### 命令
```bash
rm -rf /tmp/rdb_phase0_plain && \
strace -f -qq -o /tmp/phase0_plain.strace \
-e trace=%file,%desc,fsync,fdatasync,ftruncate,fallocate,pread64,pwrite64,lseek,rename,renameat,renameat2 \
/home/lian/env/rocksdb-test/db_bench \
--benchmarks=fillseq \
--db=/tmp/rdb_phase0_plain \
--num=5000 \
--value_size=128 \
--threads=1 \
--compression_type=none \
--stats_interval_seconds=0
```
### 结果摘要
- 命令退出码: `0`
- db_bench 输出: `fillseq ... 5000 operations`(成功)
- errno 分布trace 全局):
- `ENOENT x11`
- `EEXIST x9`
- 关键 syscall全局计数:
- `openat 91`, `fcntl 82`, `pread64 8`, `fsync 10`, `fdatasync 10`, `ftruncate 5`, `fallocate 5`, `rename 9`
- DB 路径相关 syscall`/tmp/rdb_phase0_plain`:
- `openat 61`, `mkdir 12`, `access 10`, `rename 9`, `unlink 12`, `rmdir 2`
## 2) 失败分支(启用 LD_PRELOAD/zvfs 路径)
### 命令
```bash
strace -f -qq -o /tmp/phase0_preload.strace \
-e trace=%file,%desc,fsync,fdatasync,ftruncate,fallocate,pread64,pwrite64,lseek,rename,renameat,renameat2 \
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_phase0_preload \
--num=1000 \
--value_size=128 \
--threads=1 \
--compression_type=none \
--stats_interval_seconds=0
```
### 结果摘要
- 命令退出码: `1`
- 关键报错:
- `Cannot use IOVA as 'PA'`
- `Failed to initialize DPDK`
- `open error: ... While mkdir if missing: /zvfs/rdb_phase0_preload: No such file or directory`
- `/zvfs/rdb_phase0_preload` 相关错误码:
- `ENOENT x4`
- 直接证据trace:
- `openat(..., "/zvfs/rdb_phase0_preload", ... O_DIRECTORY) = -1 ENOENT`
- `mkdir("/zvfs/rdb_phase0_preload", 0755) = -1 ENOENT`
## 3) 提取统计的复用命令
### 3.1 syscall 频次(全局)
```bash
sed -E 's/^\[pid +[0-9]+\] +//; s/^[0-9]+ +//' /tmp/phase0_plain.strace \
| grep -oP '^[a-zA-Z_][a-zA-Z0-9_]*(?=\()' \
| sort | uniq -c | sort -nr
```
### 3.2 errno 分布
```bash
grep -oP '= -1 [A-Z0-9]+' /tmp/phase0_plain.strace | awk '{print $3}' | sort | uniq -c | sort -nr
grep -oP '= -1 [A-Z0-9]+' /tmp/phase0_preload.strace | awk '{print $3}' | sort | uniq -c | sort -nr
```
### 3.3 DB 路径相关 syscall
```bash
grep '/tmp/rdb_phase0_plain' /tmp/phase0_plain.strace \
| sed -E 's/^\[pid +[0-9]+\] +//; s/^[0-9]+ +//' \
| grep -oP '^[a-zA-Z_][a-zA-Z0-9_]*(?=\()' \
| sort | uniq -c | sort -nr
```
## 4) Phase0 正确性验证清单(执行记录)
- [x] 每个“phase2 必须实现 syscall”都在矩阵中给出复现证据或来源。
- [x] 基线命令可重复执行(成功路径与失败路径各 1 组)。
- [x] 输出包含 syscall 统计与错误码分布。
- [x] 验证记录已写入 `plan/baseline_commands.md`
## 5) 已知限制phase1 前需处理)
1. 当前环境中 SPDK 初始化失败IOVA/PA导致无法在本机直接完成完整 `/zvfs` I/O 链路验证。
2. phase0 主要覆盖 `fillseq`phase1/phase2 开始前应补 `readrandom/overwrite` 的 syscall 采样。