hdparm -t 可合理评估 hdd 原始顺序读吞吐,但对 ssd/nvme 无效或不准;测 ssd/nvme 应用 fio 或 dd direct,-t 仅测内存缓存带宽,非磁盘真实性能。

hdparm 能测机械硬盘(HDD)的真实读吞吐,但对 SSD 和 NVMe 设备的“真实读写吞吐”支持有限——它不是为固态设备设计的基准工具,部分参数甚至被忽略或无效。想获得可靠结果,得区分设备类型、明确测试目标,并搭配更合适的工具。
测机械硬盘(HDD)的真实顺序读吞吐
hdparm -t 是 HDD 原始读性能的合理参考:它绕过文件系统缓存,直接从扇区连续读取,反映硬件层顺序读能力。
- 运行 sudo hdparm -t /dev/sda(将 /dev/sda 替换为你的 SATA/IDE 设备)
- 输出如 “Timing buffered disk reads: 142 MB in 3.00 seconds = 47.3 MB/sec”,这就是实测值
- 重复三次取平均更稳妥:
for i in {1..3}; do sudo hdparm -t /dev/sda; done - 注意:这不是裸设备 direct I/O,但无后台干扰时,结果贴近 HDD 真实顺序读上限
测 SSD 的真实读吞吐不推荐用 hdparm -t
SSD 通常默认启用高效传输路径,-t 测试结果可能偏高(混入缓存)、不稳定,且无法反映随机性能、队列深度或延迟等关键指标。
- hdparm -t /dev/nvme0n1 或 /dev/sda(SSD)会报错或返回无效值 —— NVMe 设备完全不支持 -t 参数
- 即使对 SATA SSD 执行成功,数值也受内核页缓存影响大,不能代表底层 NAND 访问能力
- 若仍需快速粗略对比,可用 sudo hdparm --direct -t /dev/sda 强制绕过 page cache,但精度仍不如专业工具
真正测 SSD/NVMe 真实吞吐应换 fio 或 dd
fio 支持 direct I/O、可调队列深度、IO 模式(顺序/随机)、块大小,能逼近 SSD 固件实际表现;dd 简单直接,适合验证基础写入能力。
- 顺序读(4K 随机读可改 rw=randread):
fio -filename=/dev/sda -rw=read -bs=128k -direct=1 -sync=1 -ioengine=libaio -iodepth=32 -runtime=30 -time_based -name=seqread - 安全写入测试(避免缓存干扰):
dd if=/dev/zero of=/tmp/test bs=1M count=2048 oflag=direct conv=fdatasync - 查看结果时重点看 bandwidth(MB/s)和 IOPS,而非耗时
别把缓存读当真实磁盘读
hdparm -T 测的是内存带宽(page cache),不是磁盘性能。哪怕 SSD 和 HDD 在这项上都跑出 1500+ MB/s,也不能说明它们物理读速一样快。
- sudo hdparm -T /dev/sda → 测 CPU/内存总线 + 内核缓存路径
- 该值受系统负载影响极大,图形界面、日志服务都会拉低结果
- 要验证是否真在读缓存,可先 sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' 清空,再对比 -T 和 -t 差异











