Skip to content

sirius1024/volume-performance-testing

Repository files navigation

虚拟机存储性能测试工具

License Python Platform

一个专业的虚拟机存储性能测试工具,使用 DD 和 FIO 进行全面的存储系统性能评估和分析。支持 490 种 FIO 测试配置组合,提供详细的性能报告。

📋 目录

🚀 快速开始

快速测试场景(开发和验证)

适用于快速验证存储性能,测试时间短,资源消耗低:

# 克隆项目
git clone <repository-url>
cd volume-performance-testing

# 快速测试(推荐用于开发环境)
python3 main.py --quick

# 仅测试 FIO 随机 IO 性能
python3 main.py --fio-only --quick

# 仅测试 DD 顺序 IO 性能
python3 main.py --dd-only

快速测试特点:

  • 测试时间:每个 FIO 测试 3 秒
  • 测试场景:精选的代表性配置组合
  • 总耗时:约 2-5 分钟
  • 适用场景:功能验证、快速评估、CI/CD 流水线

生产使用场景(性能评估和基准测试)

适用于生产环境性能评估,提供全面准确的性能数据:

# 生产级完整测试(推荐)
python3 main.py --runtime 60 --cleanup

# 高精度 FIO 测试
python3 main.py --fio-only --runtime 120

# 自定义测试目录和报告
python3 main.py --test-dir /mnt/nvme --output nvme_report.md --runtime 60

# 查看测试配置信息
python3 main.py --fio-info

生产测试特点:

  • 测试时间:每个 FIO 测试 60-120 秒
  • 测试场景:490 种完整配置组合
  • 总耗时:8-16 小时(完整测试)
  • 适用场景:性能基准测试、容量规划、硬件选型

📦 安装

系统要求

  • Python 3.6+
  • FIO (Flexible I/O Tester)
  • 至少 2GB 可用磁盘空间

安装依赖

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install fio python3 python3-pip

# CentOS/RHEL
sudo yum install fio python3 python3-pip
# 或使用 dnf (较新版本)
sudo dnf install fio python3 python3-pip

# macOS (使用 Homebrew)
brew install fio python3

验证安装

# 检查 FIO 版本
fio --version

# 检查 Python 版本
python3 --version

# 测试工具是否正常工作
python3 main.py --fio-info

🔧 使用方法

基本用法

# 运行所有测试(默认)
python3 main.py

# 等价于
python3 main.py --all

选择测试类型

# 仅运行 DD 测试
python3 main.py --dd-only

# 仅运行 FIO 测试
python3 main.py --fio-only

# 运行所有测试
python3 main.py --all

自定义测试参数

# 自定义测试时间
python3 main.py --runtime 30

# 自定义测试目录
python3 main.py --test-dir /tmp/storage_test

# 自定义报告文件
python3 main.py --output my_report.md

# 测试完成后清理文件
python3 main.py --cleanup

独立模块使用

# 单独运行 DD 测试
python3 dd_test.py --test-dir /tmp/test --cleanup

# 单独运行 FIO 测试
python3 fio_test.py --runtime 10 --cleanup

# FIO 快速测试
python3 fio_test.py --quick --runtime 1

⚙️ 参数说明

main.py 主控脚本参数

参数 类型 默认值 说明 推荐场景
--all flag True* 运行所有测试(DD + FIO) 完整性能评估
--dd-only flag False 仅运行 DD 测试 顺序 IO 性能测试
--fio-only flag False 仅运行 FIO 测试 随机 IO 性能测试
--fio-info flag False 显示 FIO 测试矩阵信息 了解测试配置
--test-dir string ./test_data 测试数据目录 指定测试存储位置
--runtime int 3 FIO 每个测试运行时间(秒) 快速测试: 3-10, 生产: 60-120
--quick flag False 快速测试模式 开发验证、CI/CD
--cleanup flag False 测试完成后清理测试文件 生产环境、磁盘空间有限
--output string 自动生成 指定报告输出文件路径 自定义报告位置

*注:如果不指定测试类型,默认运行 --all

独立模块参数

dd_test.py 参数

参数 类型 默认值 说明
--test-dir string ./test_data 测试数据目录
--cleanup flag False 测试完成后清理测试文件

fio_test.py 参数

参数 类型 默认值 说明
--test-dir string ./test_data 测试数据目录
--runtime int 3 FIO 测试时间(秒)
--quick flag False 快速测试模式
--cleanup flag False 测试完成后清理测试文件
--info flag False 显示测试配置信息

参数使用建议

开发和测试环境

# 快速验证
python3 main.py --quick --cleanup

# 功能测试
python3 main.py --runtime 10 --cleanup

生产环境评估

# 标准性能测试
python3 main.py --runtime 60 --cleanup

# 高精度基准测试
python3 main.py --runtime 120 --test-dir /mnt/target_storage

CI/CD 集成

# 自动化测试
python3 main.py --quick --cleanup --output ci_report.md

📁 项目结构

volume-performance-testing/
├── main.py                    # 主控脚本,统一入口
├── dd_test.py                 # DD 测试模块
├── fio_test.py                # FIO 测试模块
├── common.py                  # 共享工具类和数据结构
├── generate_fio_commands.py   # FIO 命令生成工具
├── fio_test.md               # FIO 测试详细说明
├── README.md                 # 项目文档
├── LICENSE                   # 开源许可证
├── .gitignore               # Git 忽略文件配置
└── reports/                 # 测试报告目录(运行时创建)
    ├── performance_test_report.md
    └── fio_detailed_report.md

核心模块说明

main.py - 主控脚本

  • 功能:提供统一的命令行接口,协调各个测试模块
  • 核心类
    • StoragePerformanceTest:主测试控制器
    • ReportGenerator:报告生成器
  • 职责:参数解析、测试流程控制、结果汇总

dd_test.py - DD 测试模块

  • 功能:使用 dd 命令进行顺序读写性能测试
  • 核心类DDTestRunner
  • 测试类型
    • 顺序写入测试(1M、4K、1G 块大小)
    • 顺序读取测试(1M、4K、1G 块大小)
  • 输出指标:吞吐量 (MB/s)

fio_test.py - FIO 测试模块

  • 功能:使用 FIO 进行随机 IO 性能测试
  • 核心类FIOTestRunner
  • 测试矩阵:490 种配置组合
    • 7 种块大小:4K/8K/16K/32K/64K/1M/4M
    • 7 种队列深度:1/2/4/8/16/32/128
    • 智能并发数映射
    • 5 种读写比例:0%/25%/50%/75%/100% 读
  • 输出指标:IOPS、延迟 (μs)、吞吐量 (MB/s)

common.py - 共享工具类

  • 功能:提供通用的工具类和数据结构
  • 核心类
    • TestResult:测试结果数据结构
    • Logger:日志记录器
    • SystemInfoCollector:系统信息收集器
  • 工具函数:目录管理、文件操作等

代码架构

┌─────────────────┐
│    main.py      │  ← 用户入口
│  (主控脚本)      │
└─────────┬───────┘
          │
          ├─────────────────┬─────────────────
          │                 │
┌─────────▼───────┐ ┌───────▼───────┐
│   dd_test.py    │ │  fio_test.py  │
│   (DD测试)      │ │  (FIO测试)    │
└─────────┬───────┘ └───────┬───────┘
          │                 │
          └─────────┬───────┘
                    │
          ┌─────────▼───────┐
          │   common.py    │
          │   (共享工具)    │
          └─────────────────┘

扩展开发指南

添加新的测试模块

  1. 创建新的测试文件(如 new_test.py
  2. 实现测试运行器类,继承或参考现有模式
  3. main.py 中集成新模块
  4. 更新参数解析和报告生成

修改测试配置

  • FIO 配置:修改 fio_test.py 中的测试矩阵参数
  • DD 配置:修改 dd_test.py 中的块大小和文件大小
  • 报告格式:修改 common.py 中的 ReportGenerator

代码风格

  • 使用 Python 3.6+ 语法
  • 遵循 PEP 8 代码规范
  • 添加类型注解(typing 模块)
  • 编写详细的文档字符串
  • 使用有意义的变量和函数名

🧪 测试配置

FIO 测试矩阵(490 种配置)

测试参数组合

  • 块大小:4K, 8K, 16K, 32K, 64K, 1M, 4M(7种)
  • 队列深度:1, 2, 4, 8, 16, 32, 128(7种)
  • 并发数:根据队列深度智能映射(2种配置/队列深度)
  • 读写比例:0%, 25%, 50%, 75%, 100% 读(5种)

队列深度与并发数映射

队列深度 并发数选项 适用场景
1-4 1, 4 单线程和轻度并发
8-16 4, 8 中等并发负载
32-128 8, 16, 32 高并发负载

测试类型说明

  • randread:100% 随机读
  • randwrite:100% 随机写
  • randrw:随机读写混合(25%/50%/75% 读比例)

DD 测试配置

  • 顺序写入:1M, 4K, 1G 块大小
  • 顺序读取:1M, 4K, 1G 块大小
  • 测试文件大小:1GB

📊 性能报告

报告文件

  • performance_test_report.md:综合性能报告
  • fio_detailed_report.md:FIO 详细测试结果
  • storage_test.log:详细执行日志

关键性能指标

DD 测试指标

  • 吞吐量 (MB/s):数据传输速率
  • 测试时间 (秒):完成时间

FIO 测试指标

  • IOPS:每秒 I/O 操作数
  • 延迟 (μs):平均响应时间
  • 吞吐量 (MB/s):数据传输速率
  • P99 延迟:99% 请求的响应时间

性能评估标准

SSD 性能参考值

  • 随机读 IOPS:> 10,000(优秀),> 5,000(良好)
  • 随机写 IOPS:> 8,000(优秀),> 3,000(良好)
  • 顺序读写:> 500 MB/s(优秀),> 200 MB/s(良好)

HDD 性能参考值

  • 随机读 IOPS:> 150(优秀),> 80(良好)
  • 随机写 IOPS:> 120(优秀),> 60(良好)
  • 顺序读写:> 150 MB/s(优秀),> 80 MB/s(良好)

🤝 贡献指南

我们欢迎所有形式的贡献!

如何贡献

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

开发环境设置

# 克隆你的 fork
git clone https://github.com/yourusername/volume-performance-testing.git
cd volume-performance-testing

# 安装依赖
sudo apt-get install fio python3

# 运行测试验证环境
python3 main.py --quick

代码贡献规范

  • 遵循现有代码风格
  • 添加适当的注释和文档
  • 确保新功能有相应的测试
  • 更新相关文档

报告问题

如果发现 bug 或有功能建议,请创建 Issue 并包含:

  • 详细的问题描述
  • 复现步骤
  • 系统环境信息
  • 相关日志输出

功能请求

我们特别欢迎以下类型的贡献:

  • 新的存储测试工具集成
  • 性能分析和可视化功能
  • 测试报告格式扩展
  • 性能优化建议
  • 文档改进

❓ 常见问题

Q: 测试失败,提示 "fio: command not found"

A: 需要安装 FIO 工具:

sudo apt-get install fio  # Ubuntu/Debian
sudo yum install fio      # CentOS/RHEL

Q: 如何选择合适的测试时间?

A:

  • 快速验证:3-10 秒
  • 标准测试:30-60 秒
  • 生产基准:120 秒或更长

Q: 测试结果如何解读?

A:

  • IOPS:越高越好,关注随机访问性能
  • 延迟:越低越好,特别关注 P99 延迟
  • 吞吐量:顺序访问的重要指标

Q: 可以在生产环境运行吗?

A:

  • 快速模式:相对安全,建议维护窗口运行
  • 完整测试:会产生大量 I/O,谨慎使用
  • 建议:先在测试环境验证

📄 许可证

本项目采用 Apache 2.0 许可证 - 查看 LICENSE 文件了解详情。

🙏 致谢

感谢以下开源项目:

  • FIO - Flexible I/O Tester
  • Python - 编程语言

如果这个项目对你有帮助,请给我们一个 ⭐️!

About

volume-performance-testing with dd/fio

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages