1. 基本磁盘测试方法
1.1 纯写入速度测试
1 2 3 4 5 6 7 8 9 10 11
| # 测试/data目录所在磁盘的纯写速度 time dd if=/dev/zero of=/var/test bs=8k count=1000000
# 示例输出: 1000000+0 records in 1000000+0 records out 8192000000 bytes (8.2 GB) copied, 52.5749 seconds, 156 MB/s
real 0m55.841s user 0m0.507s sys 0m15.706s
|
1.2 纯读取速度测试
1 2 3 4 5 6 7 8 9 10 11
| # 测试/data目录所在磁盘的纯读速度 time dd if=/var/test of=/dev/null bs=8k count=1000000
# 示例输出: 1000000+0 records in 1000000+0 records out 8192000000 bytes (8.2 GB) copied, 49.0088 seconds, 167 MB/s
real 0m49.025s user 0m0.559s sys 0m6.383s
|
1.3 读写同时测试
1 2 3 4 5 6 7 8 9 10 11
| # 测试读写速度 time dd if=/var/test of=/tmp/test bs=8k count=1000000
# 示例输出: 125000+0 records in 125000+0 records out 8192000000 bytes (8.2 GB) copied, 129.239 seconds, 63.4 MB/s
real 2m9.251s user 0m0.114s sys 0m21.494s
|
2. 专业工具测试方法
2.1 使用 hdparm 测试读速度
1 2 3 4 5 6 7 8 9
| # 安装hdparm(如未安装) yum install hdparm -y
# 测试IO读速度(绕过缓存) hdparm -t --direct /dev/sda1
# 示例输出: /dev/sda1: Timing O_DIRECT disk reads: 163 MB in 3.00 seconds = 54.33 MB/sec
|
2.2 多种写入测试方法
1 2 3 4 5 6 7 8 9 10
| # 基本写入测试 time dd if=/dev/zero bs=1024 count=1000000 of=/1Gb.file
# 精确时间测量写入(1MB块大小,20GB文件) sync;/usr/bin/time -p bash -c "(dd if=/dev/zero of=test.dd bs=1M count=20000)"
# 示例输出: 20000+0 records in 20000+0 records out 20971520000 bytes (21 GB) copied, 168.32 s, 125 MB/s
|
3. 测试结果分析
3.1 典型测试结果对比
| 测试类型 |
速度 |
备注 |
| 磁盘缓存读 |
7471 MB/s |
内存缓存速度 |
| 直接磁盘读 |
163 MB/s |
绕过缓存的实际磁盘速度 |
| IO写入 |
125 MB/s |
顺序写入速度 |
| IO读取 |
206 MB/s |
顺序读取速度 |
3.2 测试注意事项
- 块大小影响:通过
bs 选项设置不同的读写块大小(默认512字节,推荐使用1M)
- 系统干扰:测试结果可能受到系统中有IO读写进程的影响
- 多次测试:相同命令多次测试结果可能有差异,建议取平均值
- 测试环境:明确测试是在什么样的环境下获得的(是否有多任务运行)
4. 测试结论与建议
工具选择:
- 读测试推荐使用
hdparm(更准确)
- 写测试推荐使用
dd 并配合 time 命令
性能分析:
1 2 3 4 5
| graph LR A[测试方法] --> B[顺序读写] A --> C[随机读写] B --> D[高吞吐量] C --> E[低延迟]
|
影响因素:
- 读写方式(顺序/随机)
- 系统缓存机制
- 磁盘类型(HDD/SSD/NVMe)
- 测试数据取样大小
最佳实践:
1 2 3 4 5
| # 推荐的综合测试流程 hdparm -t --direct /dev/sda1 # 测试直接读 sync; dd if=/dev/zero of=tempfile bs=1M count=2048; sync # 测试写入 dd if=tempfile of=/dev/null bs=1M # 测试读取 rm -f tempfile # 清理测试文件
|
注意:所有测试都应使用root用户执行,测试完成后请及时删除生成的测试文件,避免占用磁盘空间。