99 lines
3.3 KiB
Markdown
99 lines
3.3 KiB
Markdown
# 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 采样。
|