CentOS 测试硬盘读写速度
数据库、日志、缓存这类服务都是典型的 IO 密集场景,磁盘速度直接决定请求延迟。买机器时商家标称的"500MB/s"和实际跑出来的数往往有差距,所以上生产之前用 dd 快速验证一下很值。dev 为挂载的硬盘目录(例如 /www 或 /data),测试文件会写入该目录。下面三条命令分别覆盖写、读、小文件同步写三种场景。
即使不追求实验室级的精确,dd 的结果也足够回答"这块盘能不能扛住我现在的业务":数据库事务、日志落盘这类负载,瓶颈往往就卡在同步写入速度上。
1. 测试写入速度
dd if=/dev/zero of=/test.bin bs=1M count=256 conv=fsync
if=/dev/zero:从零设备读取(产生全零数据);of=/test.bin:写入到测试文件;bs=1M:每次读写 1M;count=256:共读写 256 次,即生成 256M 的测试文件;conv=fsync:物理同步写入后再统计,避免内存缓存虚高。
2. 测试读取速度
dd if=/test.bin of=/dev/zero bs=1M count=256 iflag=direct
iflag=direct:绕过文件系统缓存,直接读取磁盘,结果更接近真实磁盘读性能。
3. 测试同步写入速度(小数据块)
dd if=/dev/zero of=/test.bin bs=64k count=1k oflag=dsync
bs=64k:每次写入 64K;count=1k:写入 1024 次,共 64M;oflag=dsync:每次写入都同步落盘,模拟真实小文件写入场景,速度会明显低于上面的缓存写。
如何判断结果是否正常
不同介质的速度差异很大,先看参考范围:
| 存储类型 | 顺序写 | 顺序读 | 典型用途 |
|---|---|---|---|
| 机械硬盘 HDD | 80-150 MB/s | 100-180 MB/s | 冷数据备份 |
| SATA SSD | 300-500 MB/s | 400-550 MB/s | 入门云主机数据盘 |
| NVMe SSD | 1000-3500 MB/s | 1500-7000 MB/s | 数据库、高并发应用 |
如果一块标称 SSD 的盘测出来只有几十 MB/s,大概率是买到了共享 IO 或限速的实例,也可能是测试时负载太高。如果读快写慢,通常是写入缓存策略或固件差异,可接受;如果读写都比同规格机型慢一倍以上,就该联系厂商核查。
补充:hdparm 读测试
如果只想快速看读取能力,hdparm 更轻量:
yum install -y hdparm
hdparm -t /dev/vda1
-t 测缓冲读取,-T 测缓存读取。注意 hdparm 需要 root 权限,且只能测块设备,不能测挂载目录。
为什么建议再跑一次 fio
dd 简单直观,但对真实负载的模拟有限,它只测顺序读写,不测随机 IOPS。生产环境做容量规划建议用 fio:
fio --name=randwrite --rw=randwrite --bs=4k --size=1G --numjobs=4
fio 能同时测随机读写、混合读写和时延分布,结果更接近数据库的真实负载,适合作为 dd 之后的进阶验证。执行时注意磁盘空间,--size=1G 会生成 1GB 测试文件,记得放在目标挂载点并随后清理。
什么时候测、测哪里
测之前先想清楚目的。给新买的云主机做"体检",就在系统盘和数据盘各测一次;给数据库迁移做评估,则要测目标实例挂载的数据盘,而不是系统盘——两者往往不是同一块物理盘。时间上避开业务高峰,一般选凌晨或低峰期,连续测三轮取中间值,结果更有参考意义。
另一个常见疑问是"测出来慢要不要退换"。先对照上文参考区间判断介质类型,再确认是否被限速:云厂商的低价实例经常共享宿主机 IO,测出明显低于标称值的速率,多半不是盘本身的问题,而是买到了受限的规格。
测试结果示例
1073741824 bytes (1.1 GB) copied, 4.63867 s, 231 MB/s
最后的 231 MB/s 即为测得的读写速度。注意:dd 的测试结果是顺序读写速度,且受 CPU、文件系统、磁盘缓存策略等因素影响,同一块盘多次测试结果可能略有差异,建议测三次取中间值。
对比时还要注意单位口径:dd 输出的 MB/s 是十进制(1 MB = 1,000,000 字节),多数厂商标称也是十进制,可以直接比;如果商家按二进制 GiB 标称,数字会显得"偏小",先统一口径再下结论。
注意事项
测试本身不难,难的是别留下隐患。下面几点照着做,基本不会踩坑:
-
测试完成后记得删除测试文件,避免占用磁盘空间:
rm -f /test.bin -
建议在服务器负载较低时测试,结果更准确;
-
conv=fsync和oflag=dsync会牺牲部分速度换取更真实的落盘数据,这正是我们想要的; -
测试文件放在哪个挂载点,测的就是那块盘,换盘测试记得改路径;
-
删除测试文件前,把同步写的测试结果单独记录下来,方便和换盘、扩容后的数据对比。
硬盘性能测试是服务器性能测试的重要环节,更多服务器运维与性能优化内容可以参考云服务器分类下的文章。
原文链接:https://www.cnblogs.com/cqzhuomi/articles/17284297.html(博客园 CQZHUOMI,转载)
参考:fio 文档 —— https://fio.readthedocs.io ;Red Hat 性能测试文档 —— https://access.redhat.com/documentation/