DingoFS 存储性能测试工具是一个 Docker 镜像,集成了 fio、vdbench、mdtest 三种存储性能测试工具,支持通过命令行参数快速执行存储性能测试。
推荐使用 dingofs-testsuite-tool 外壳脚本,它封装了 docker 命令的复杂参数,让测试更简单。
# 1. 首次配置:设置测试目录、输出目录和镜像
dingofs-testsuite-tool config set testdir /mnt/test
dingofs-testsuite-tool config set output /tmp/results
dingofs-testsuite-tool config set image localhost/dingofs-testsuite-tools:latest
# 2. 查看当前配置
dingofs-testsuite-tool config show
# 3. 运行测试(无需指定 -m -o,使用配置的值)
dingofs-testsuite-tool -t fio -s seq_write
dingofs-testsuite-tool -t mdtest -s mdtest
dingofs-testsuite-tool -t vdbench -s vdbench
dingofs-testsuite-tool -t pjdtest -s pjdtest
# 4. 进入镜像调试
dingofs-testsuite-tool debug
# 5. 显示帮助
dingofs-testsuite-tool help| 命令 | 说明 |
|---|---|
config set testdir <dir> |
设置测试目录(挂载点) |
config set output <dir> |
设置输出目录 |
config set image <name> |
设置 Docker 镜像 |
config show |
显示当前配置 |
-t -s [-n] |
运行测试(testdir/output 从配置读取) |
debug |
进入镜像交互式调试 |
help |
显示帮助信息 |
快捷命令:
dtt是dingofs-testsuite-tool的别名,两者功能相同。
如尚未安装 dingofs-testsuite-tool,也可直接使用 docker run 命令(见下文)。
使用 install.sh 一键安装(构建镜像 + 配置环境变量 + 设置默认镜像):
./install.sh或者分步进行:
# 1. 构建镜像
docker build -t dingofs-testsuite-tools .
# 2. 将 dingofs-testsuite-tool 加入 PATH
export PATH="$PATH:/path/to/dingofs-storage-testsuite-tools"
# 3. 设置镜像
dingofs-testsuite-tool config set image localhost/dingofs-testsuite-tools:latestinstall.sh 参数:
-n, --no-build: 跳过镜像构建,只配置环境变量和设置镜像
./uninstall.sh # 卸载并删除镜像
./uninstall.sh --keep-image # 卸载但保留镜像docker build -t dingofs-testsuite-tools
--build-arg http_proxy=http://10.220.69.222:1088
--build-arg https_proxy=http://10.220.69.222:1088
.
## 使用方法
```bash
docker run dingofs-testsuite-tools -t <tool> -s <scenario> -m <mount> -o <output>
# 一次性测试:容器运行完测试后自动删除
docker run --rm dingofs-testsuite-tools -t mdtest -s mdtest -m /data -o /data
# 后台运行:容器在后台运行,测试结果在容器内,通过 docker stop 停止
docker run -d dingofs-testsuite-tools -t mdtest -s mdtest -m /data -o /data
docker stop <container_id>
# 交互式测试:进入容器内部,可手动执行测试命令
docker run --rm -it dingofs-testsuite-tools /bin/bash# 查看所有选项和示例
docker run --rm dingofs-testsuite-tools --help| 选项 | 说明 |
|---|---|
-t, --tool |
测试工具: fio, vdbench, mdtest |
-s, --scenario |
测试场景 |
-m, --mount |
被测存储的挂载点 (例如: /mnt/test) |
-o, --output |
测试结果输出目录 (例如: /output) |
-n, --np |
mdtest MPI 进程数 (默认: 16) |
--mode |
运行模式: one-shot (默认) 或 long-running |
注意:
-o指定的是容器内路径,需要通过-v将容器内目录映射到本机路径。
| 工具 | 说明 |
|---|---|
| fio | Flexible I/O tester (存储性能测试) |
| vdbench | Oracle storage testsuite |
| mdtest | MPI filesystem metadata test |
| pjdtest | POSIX 文件系统测试套件 |
| ltp | Linux Test Project (内核测试套件) |
| 模式 | 说明 |
|---|---|
| one-shot | 容器启动 → 运行测试 → 测试完成后容器退出 (默认) |
| long-running | 容器启动 → 运行测试 → 容器保持运行,可用 docker exec 执行更多测试 |
| 场景 | 说明 |
|---|---|
| rand_read | Random read (24 variants: 2 direct × 3 block size × 4 numjobs) |
| rand_write | Random write |
| seq_read | Sequential read |
| seq_write | Sequential write |
| 参数 | 值 |
|---|---|
| direct | 0 (buffered), 1 (direct I/O) |
| block size | 128k, 1m, 4m |
| numjobs | 1, 8, 16, 32 |
| iodepth | 1 (fixed) |
| size | 8G per job |
| 场景 | 说明 |
|---|---|
| mdtest_z0_n100 | z=0, n=100 (扁平目录, 3200 files) |
| mdtest_z5_b4_I1 | z=5, b=4, I=1 (多分支树, 32736 items) |
| mdtest_z6_b3_I1 | z=6, b=3, I=1 (中等深度树, 34976 items) |
| mdtest_z9_b2_I1 | z=9, b=2, I=1 (深层二叉树, 32736 items) |
| mdtest | 运行以上所有 4 个场景 |
默认进程数: 16,可用
-n或--np参数调整
pjdtest 是 POSIX 文件系统测试套件,用于验证文件系统对 POSIX 标准的兼容性。
# 运行 pjdtest 测试
docker run --rm -v /tmp/test:/data dingofs-testsuite-tools -t pjdtest -s pjdtest -m /data -o /dataLTP (Linux Test Project) 是 Linux 内核测试套件,用于验证内核和系统调用的正确性、稳定性和可靠性。
注意: LTP 测试需要 --privileged 标志运行,以访问 /dev/kmsg 等设备。
| 场景 | 说明 | 对应测试套件 |
|---|---|---|
| ltp | 默认运行文件系统测试 | fs |
| ltp_fs | 文件系统测试 | fs |
| ltp_dio | Direct I/O 测试 | dio |
| ltp_mm | 内存管理测试 | mm |
# 运行 LTP 文件系统测试 (需要 --privileged)
docker run --rm --privileged -v /mnt/disk0/daigy/tmp/:/data dingofs-testsuite-tools -t ltp -s ltp -m /data -o /data
# 运行特定 LTP 测试场景
docker run --rm --privileged -v /tmp/test:/data dingofs-testsuite-tools -t ltp -s ltp_fs -m /data -o /data在容器中运行 LTP 时,部分测试会失败或报错(如 /dev/kmsg、/proc/sys 等内核接口),这是预期行为。LTP 设计用于在裸机上运行以获得完整测试结果。
# 运行所有 rand_read 场景 (24 tests)
docker run --rm -v /tmp/test:/data dingofs-testsuite-tools -t fio -s rand_read -m /data -o /data
# 运行所有 seq_write 场景 (24 tests)
docker run --rm -v /tmp/test:/data dingofs-testsuite-tools -t fio -s seq_write -m /data -o /data
# 运行单个特定场景
docker run --rm -v /tmp/test:/data dingofs-testsuite-tools -t fio -s rand_read_0d_128k_1j -m /data -o /datadocker run --rm -v /tmp/test:/data dingofs-testsuite-tools -t vdbench -s seq_rd -m /data -o /data# 运行所有 4 个 mdtest 场景并汇总
docker run --rm -v /tmp/test:/data dingofs-testsuite-tools -t mdtest -s mdtest -m /data -o /data
# 运行单个 mdtest 场景
docker run --rm -v /tmp/test:/data dingofs-testsuite-tools -t mdtest -s mdtest_z0_n100 -m /data -o /data
# 自定义进程数测试 (默认 16)
docker run --rm -v /tmp/test:/data dingofs-testsuite-tools -t mdtest -s mdtest -m /data -o /data -n 32# 运行 pjdtest 测试
docker run --rm -v /tmp/test:/data dingofs-testsuite-tools -t pjdtest -s pjdtest -m /data -o /data# 运行 LTP 文件系统测试 (需要 --privileged)
docker run --rm --privileged -v /tmp/test:/data dingofs-testsuite-tools -t ltp -s ltp -m /data -o /data# 启动长期运行容器
docker run --detach -v /tmp/test:/data dingofs-testsuite-tools -t fio -s rand_read -m /data -o /data --mode long-running
# 在运行中的容器内执行更多测试
docker exec <container_id> entrypoint.sh -t fio -s seq_write -m /data -o /data如果需要将测试结果保存到与挂载点不同的路径,可以分别挂载:
# -m 指定被测存储的挂载点
# -o 指定结果输出目录(需要额外挂载)
docker run --rm \
-v /mnt/disk1/test:/data \
-v /tmp/results:/output \
dingofs-testsuite-tools \
-t fio -s seq_read -m /data -o /output测试结果保存在输出目录中:
| 文件 | 说明 |
|---|---|
| fio.raw / fio.json | 原始输出和 JSON 格式 |
| vdbench.raw | vdbench 原始输出 |
| mdtest.raw | mdtest 原始输出 |
| pjdtest_YYYYMMDD_HHMMSS | pjdtest 测试结果 |
| ltp_YYYYMMDD_HHMMSS.log | LTP 测试日志 |
| report.html | HTML 可视化报告 |
| summary.md | Markdown 格式摘要 |
| running_result.log | 测试执行结果汇总 |
- 基础镜像: ubuntu:24.04
- 工具版本: fio (最新稳定版), vdbench 50406, mdtest (IOR 套件)
- 支持平台: x86_64, ARM64