服务器磁盘性能测试首选fio(Linux)和CrystalDiskMark(Windows),具体步骤包括工具安装、参数配置、执行测试与结果解读,其中fio通过自定义IO模式模拟真实负载,CrystalDiskMark主打图形化快速测试。
服务器磁盘性能测试工具推荐:哪个更适合你
选择磁盘性能测试工具时,需要根据操作系统、测试场景和个人技术栈来定,Linux环境以命令行工具为主,Windows则更多依赖图形化软件,以下对主流工具做横向对比,帮你快速定位。
主流工具概览与对比
- fio:Linux下最灵活的基准测试工具,支持异步IO、多种引擎、自定义块大小、队列深度和读写比例,几乎所有Linux服务器磁盘性能测试的权威结果都来自fio。
- CrystalDiskMark:Windows平台最流行的磁盘测试工具,界面简洁,测试模式固定,适合快速对比“跑分”,不支持自定义IO模式,但胜在操作门槛低。
- dd:Linux原生命令,可测试顺序读写吞吐量,但无法模拟随机IO,也无法控制队列深度,早期常用于简单测试,现已逐步被fio替代。
- hdparm:Linux下用于测试缓存和直接读取速度的工具,结果不够全面,仅作参考。
- IOmeter:老牌跨平台工具,功能强大,但配置复杂,社区活跃度下降,传统IT运维中仍有使用,新项目建议直接使用fio。
具体选择建议:Linux服务器测试首选fio,它能覆盖从顺序读写到随机小IO的所有场景;Windows服务器快速验证用CrystalDiskMark,深度分析可用fio for Windows版;仅需简单看带宽时,dd或hdparm可应急使用。
不同场景下的工具选取
- 数据库服务器选型:需要测试随机4KB读写和70%读30%写混合负载,fio的
--rwmixread参数能精确控制,CrystalDiskMark的“混合测试”模式也可参考。 - 文件服务器选型:关注顺序读写大文件性能,fio和CrystalDiskMark都能胜任,但后者更直观。
- 云服务器磁盘性能测试:云厂商多限制直接磁盘测试,避免影响同宿主机,需使用fio限制IO深度,并配合
--direct=1跳过缓存。
业内专家指出,fio搭配CrystalDiskMark能覆盖市面上超过90%的磁盘性能测试需求,且两者均有免费版,学习成本低。
Linux磁盘读写性能测试命令详解
在Linux环境下,fio是公认的统治级工具,以下步骤以CentOS 7/Ubuntu 20.04为例,完整演示从安装到读取结果的全过程。
安装fio及基础参数
# CentOS/RHEL yum install -y fio # Ubuntu/Debian apt-get install -y fio
安装后,执行fio -v确认版本,常用参数解释:
--filename
:指定测试文件路径,建议放在待测磁盘上。
--direct=1:跳过操作系统缓存,直接读写磁盘,得到真实性能。--bs:块大小,常用4k(随机小IO)、1m(顺序大IO)。--iodepth:队列深度,模拟多个并发请求,对SSD影响大,通常设为32或64。--size:测试数据量,建议大于磁盘总容量的一倍缓存的2-3倍,避免缓存命中,一般设为4G-8G。--numjobs:并发线程数,模拟多进程同时读写。--runtime:测试时长,单位秒,建议至少30秒。--rw:读写模式,可选read、write、randread、randwrite、randrw(随机读写混合)。
典型测试命令示例
顺序读测试(大文件带宽)
fio --filename=/data/testfile --direct=1 --bs=1m --iodepth=64 --size=4G --numjobs=1 --runtime=60 --rw=read --name=seq_read
重点关注bw(带宽,单位KB/s)和clat(完成延迟,单位us/ms)。
随机写测试(数据库日志场景)
fio --filename=/data/testfile --direct=1 --bs=4k --iodepth=32 --size=4G --numjobs=1 --runtime=60 --rw=randwrite --name=rand_write
重点关注iops(每秒IO次数)和lat(平均延迟)。
混合随机读写(数据库OLTP场景)
fio --filename=/data/testfile --direct=1 --bs=4k --iodepth=32 --size=4G --numjobs=1 --runtime=60 --rw=randrw --rwmixread=70 --name=oltp_mix
--rwmixread=70表示70%读、30%写,模拟大多数业务负载。
结果解读要点
输出结果中,关键字段:
- read/write:统计信息,包括IOPS、带宽、延迟。
- slat (submission latency):提交延迟,通常很低。
- clat (completion latency):完成延迟,反映磁盘响应速度。
- lat (总延迟):实际业务感知延迟,需重点关注p99或p999值。
- bw (带宽):平均带宽,单位KB/s或MB/s。
测试完成后,务必删除测试文件:rm -f /data/testfile,避免占用磁盘空间。
Windows平台磁盘读写速度测试实操
Windows服务器多用CrystalDiskMark,它自带NVMe和SSD优化,下载即用,无需命令行基础,但若想测试更复杂的场景,可用fio for Windows(需安装Cygwin或WSL)。
CrystalDiskMark快速测试流程
- 下载并安装CrystalDiskMark(官网或第三方镜像站)。
- 启动后,在“设置”中调整测试参数:
- 测试次数

:默认5次,建议保持5次,取平均值。
- 文件大小:默认1GiB,测试SSD时建议选2GiB以上,避免缓存影响。
- 测试模式:
- Seq Q32T1:顺序读写,队列深度32,线程1,适合大文件传输。
- 4K Q32T1:随机4KB读写,队列深度32,线程1,适合数据库等小IO业务。
- 4K Q1T1:单队列单线程随机4KB,反映单应用性能。
- 测试次数
- 选择待测盘符,点击“All”开始测试。
- 结果以MB/s和IOPS显示,默认单位是MB/s,IOPS需手动计算(IOPS = MB/s 1024 / 块大小)。
对比测试注意事项
- 测试前关闭所有正在访问待测盘的应用程序,包括杀毒软件、备份程序等。
- 若测试NVMe SSD,建议在BIOS中确认已开启NVMe驱动,并确保散热良好。
- 对于RAID阵列,CrystalDiskMark测试的是阵列整体性能,单盘测试需在RAID卡上直通。
Windows上也有DiskSpd(微软官方命令行工具)和IOmeter,DiskSpd支持类似fio的参数,适合自动化脚本,教程可参考微软文档。
磁盘IOPS与延迟测试方法
IOPS(Input/Output Operations Per Second)和延迟是衡量磁盘性能的核心指标,分别对应吞吐能力和响应速度。
不同队列深度与块大小的影响
测试IOPS时,通常使用4KB块大小,队列深度从1到256逐步增加,观察IOPS和延迟的变化,以下是一个典型fio命令示例,测试不同队列深度下的随机读IOPS:
for qd in 1 4 8 16 32 64 128; do
fio --filename=/data/testfile --direct=1 --bs=4k --iodepth=$qd --size=2G --numjobs=1 --runtime=30 --rw=randread --name=test_qd$qd
done
结果往往显示:队列深度增加初期,IOPS线性增长,但增加到一定程度后增长放缓,延迟则持续上升,对于SSD,最佳队列深度通常在32-64之间,过低则无法压满磁盘性能,过高则增加延迟浪费。
业务场景模拟测试
- 数据库场景:使用
--rw=randrw --rwmixread=70 --bs=8k,队列深度8-16,模拟TPC-C类负载。 - 视频监控写入:使用
--rw=write --bs=512k --iodepth=4,强调持续大块写入。 - 虚拟化场景:使用
--rw=randrw --rwmixread=50 --bs=4k --numjobs=4,模拟多个虚拟机同时IO。
建议在测试报告中同时记录IOPS和平均延迟(尤其是p99),单一指标无法全面反映性能。
测试结果解读与性能优化建议
拿到测试数据后,如何判断磁盘性能是否达标,并找到瓶颈方向?
判断基准与常见瓶颈
- 对比官方标称值:例如PCIe 4.0 NVMe SSD顺序读可达7000MB/s,但实际测试受主板芯片组、PCIe通道数、散热影响,达到

5000-6000MB/s
已属正常。 - 如果测试结果远低于标称,优先检查:
- 磁盘是否过热:SSD高温会触发降频,监控温度曲线。
- 操作系统调度:Linux下可检查
/sys/block/nvme0n1/queue/scheduler,建议设置为none。 - 分区对齐:使用
parted或fdisk确保分区起始于4K边界,否则影响随机性能。 - 文件系统类型:xfs通常比ext4在并发场景下表现更好,尤其大文件。
- 对于RAID卡,调整缓存策略(直写/回写)和条带大小(stripe size)可显著影响性能。
性能优化具体措施
- 硬件层面:升级接口速率(如从SATA到NVMe)、增加内存通道、使用高速存储网络(如NVMe over Fabrics)。
- 软件层面:调整内核IO调度器、使用
blk-mq多队列、优化文件系统挂载参数(如noatime、nodiratime)。 - 测试层面:确保测试数据量大于磁盘DRAM缓存,避免“虚假”高性能,若测试时间过短,缓存命中率高,结果偏乐观。
多数情况下,磁盘性能瓶颈不在磁盘本身,而在IO链路或软件配置,通过fio的分步测试(如测试不同块大小、队列深度),可以定位瓶颈究竟在PCIe带宽、控制器固件还是文件系统。
掌握fio和CrystalDiskMark的基本用法,就能准确评估服务器磁盘性能,为业务选型提供可靠依据。
服务器磁盘性能测试常见问题解答
测试结果与官方标称差距很大,为什么?
官方标称通常在理想环境下(如特定主板、散热、驱动版本)测得,实际测试受CPU负载、芯片组带宽、PCIe通道数、磁盘温度、操作系统调度等因素影响,差距在10%-30%属于正常范围,若差距超过50%,建议检查是否开启了缓存(--direct=1)、测试文件大小是否足够大,以及磁盘是否处于降速状态。
测试时应该选择多大的文件和数据量?
对于SSD,建议文件大小至少为磁盘容量的5%-10%,或者大于磁盘DRAM缓存容量的2-3倍,以避免缓存命中导致测试结果虚高,常见1TB NVMe SSD的DRAM缓存约1GB,测试文件建议选2GiB以上,HDD受缓存影响较小,但建议选1GiB以上,避免测试时间过短。
混合读写测试中,读写比例怎么设置比较合理?
根据业务场景,数据库OLTP负载通常为70%读、30%写;文件共享服务读多写少,可设为90%读、10%写;视频监控写入则接近100%写,如果无法确定,建议做70%读、30%写的测试,这是多数企业级业务的通用参考值,也是行业共识中常用的基准比例。