【磁盘性能测试 fio】
linux 磁盘性能测试 fio
一、磁盘读写测试工具
常用的磁盘测试工具有fio netstat 等,这里主要记录一下fio的测试过程。
FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。
fio 官网地址:http://freshmeat.net/projects/fio/
二、使用步骤
1.fio下载安装
centos通过yum install fio即可,离线安装
(1)联网下载fio所需的rpm包,无网络情况直接安装rpm安装即可
yum install --downloadonly --downloaddir /tmp/ fio
(2)查看磁盘,选择测试的磁盘

(3)注意事项
1. 测试机械硬盘时,一般设置线程数为1,即numjobs=1,iodepth=32。特别是测试顺序读写性能的时候,多个线程会导致顺序IO变成随机IO,性能变差。测试文件系统系统性能的时候,需要先用顺序的大块IO将磁盘写一遍,然后再测试文件系统性能;
2)测试文件系统时,先测试顺序,再测随机;
3)SSD硬盘测试需要绑核,taskset -c 1-4 fio …;
4)测试过程中需要使用iostat观测硬盘实时性能,fio显示的数据不准确;
5)测试NVME时,如果硬盘背板存在PCIe Switch,需要注意NVME盘的插法,按照最佳插法配置;
6)测试磁盘性能时,如果服务器散热较差,需要提高风扇转速,机械硬盘50度就开始降性能了,raid卡温度过高也会影响性能;
7)需要保证使用的工具版本是一样的,不同版本的测试工具有性能差异。 测试硬盘与测试文件系统要用两种不同方法与时机: 单纯测试硬盘需要裸设备,因为直接操作磁盘,磁盘读写会破坏文件系统,测试完成后需要重新格盘,充分格式化文件系统! 测试文件系统方式为指定文件系统中某个路径下的不存在的文件用来测试读写。
2.测试磁盘读写
测试指令如下:
顺序读:(注意:磁盘测试后需要重新格式化文件系统)
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest
随机写:(注意:磁盘测试后需要重新格式化文件系统)
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest
顺序写:(注意:磁盘测试后需要重新格式化文件系统)
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest
混合随机读写:(注意:磁盘测试后需要重新格式化文件系统)
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest -ioscheduler=noop
说明:
随机读取:写入是根据磁盘数据分布进行随机读写,可能数据的读、写并不在连续的磁盘空间上,因此磁头寻址时间长、负荷大,每段数据都有地址码,通过地址码进行数据段读取。
顺序读取:写入是根据磁盘数据分布进行连续读写,由于数据分布连续,寻址时间短,中间没有地址码。
通常机械硬盘主要是看顺序读写性能,SSD主要看随机读写性能
如何快速确定磁盘是机械还是ssd?当ROTA为1 则为 机械磁盘。

参考链接:https://blog.csdn.net/m0_58833554/article/details/136901548
3.结果检查

检查结果的磁盘IOPS 与时延
还可以用iostat -x 命令实时观察磁盘的压测情况,1是每秒输出持续使用情况,安装命令:
yun install sysstat -y

这样使用fio命令就测试出来我们磁盘的IOPS和吞吐量了。
4.磁盘读写常见的指标
1. 常见指标
(1)IOPS(Input/Output Operations per Second)
- 指每秒能处理的I/O个数,表示块存储处理读写(输出/输入)的能力,单位为次,有顺序IOPS和随机IOPS
- 比如100次/秒,那iops就是100次/秒,例如数据库类应用等典型场景重点提升这个指标,下面是阿里云盘性能
(2)吞吐量/带宽(Throughput)
- 是指单位时间内可以成功传输的数据数量,单位为MB/s
- 比如 一个硬盘的读写 IO 是 1MB,硬盘的 IOPS 是 100,那么硬盘总的吞吐率就是 100MB/s
- 带宽 = IOPS * IO大小
(3)访问时延(Latency)
- 是指IO请求从发出到收到响应的间隔时间,常以毫秒ms或者微妙us为单位
- 硬盘响应时间 = 硬盘访问时间 + IO排队延迟,过高的时延会导致应用性能下降或报错。
- 普通的HDD磁盘,随机IO读写延迟是10毫秒,IO带宽大约100MB/秒,随机IOPS一般在100左右
(4)使用率 Utilization
- 指磁盘处理 I/O 的时间百分比,过高的使用率 ,常规字段 Utilization-缩写%util 表示
- 如超过 80%意味着磁盘 I/O 存在性能瓶颈
(5)I/O 等待队列长度 Queue Length
- 表示等待处理的 I/O 请求的数目,如果 I/O 请求压力持续超出磁盘处理能力,就会增大队列长度
(6)饱和度
- 使用率只考虑有没有IO,不考虑IO的大小;当使用率是100%时,磁盘也可能接收新的IO请求
2.iostat查看系统综合的磁盘IO情况
- 格式:iostat [参数] [时间] [次数]
iostat -p ALL -h - 参数说明
| 参数 | 说明 |
|---|---|
| -c | 仅显示CPU状态统计信息 |
| -d | 仅显示磁盘统计信息 |
| -k或者-m | 以kb或者mb为单位显示,常用-h可读性高 |
| -p | 指定显示IO的设备,ALL表示显示所有 |
| -x | 显示详细信息 |

注意:iostat不能直接得到磁盘饱和度
| 字段 | 说明 |
|---|---|
| r/s | 每秒发送给磁盘的读请求次数,r/s+w/s 是磁盘IOPS |
| w/s | 每秒发送给磁盘的写请求次数,r/s+w/s手机磁盘IOPS |
| rkB/s | 每秒从磁盘读取的数据量,rkB/s+wkB/s 是吞吐量 |
| wkB/s | 每秒向磁盘写入的数据量,rkB/s+wkB/s 是吞吐量 |
| r_await | 读请求处理完成等待时间,包括在队列中的等待时间和设备实际处理时间 r_await+w_await ,是RT响应时间 |
| w_await | 写请求处理完成等待时间,包括在队列中的等待时间和设备实际处理时间 r_await+w_await ,是RT响应时间 |
| aqu-sz | 平均请求队列长度 |
| rareq-sz | 平均读请求大小 |
| wareq-sz | 平均写请求大小 |
| %util | 磁盘处理I/O的时间百分比,表示的是磁盘的忙碌情况;如果>80% 就是磁盘可能处于忙碌状态 一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的 |
3.磁盘IO常见指标和分析命令工具介绍
(1)iotop命令
- 查看当前系统各个进程使用磁盘IO的情况
- 安装:yum -y install iotop
- iotop -o -d 3 每3秒刷新下各个进程磁盘IO情况
| 参数 | 说明 |
|---|---|
| -o | 只显示正在读写磁盘的程序 |
| -d | 跟一个数值,表示iotop命令刷新的时间 |

| 字段 | 说明 |
|---|---|
| Total DISK READ | 从磁盘中读取的总速率 |
| Total DISK WRITE | 往磁盘里写入的总速率 |
| Actual DISK READ | 从磁盘中读取的实际速率 |
| Actual DISK WRITE | 往磁盘里写入的实际速率 |
| TID | 线程ID,按p可以转换成进程ID |
| PRIO | 优先级 |
| USER | 线程所有者 |
| DISK READ | 进程从磁盘中读取的速率 |
| DISK WRITE | 进程往磁盘里写入的速率 |
| SWAPIN | 进程swap交换百分比 |
| IO> | IO等待所占用的百分比 |
| COMMAND | 具体的进程命令 |
- iostats是系统级别的IO监控
- iotop是进程级别的IO监控
(2)案例测试:模拟IO密集型应用,系统是4核
- 终端一 模拟2个磁盘IO进程, 持续600s
stress --hdd 2 --hdd-bytes 6G --timeout 600s - 终端二 全局
iostat -d -x 1 - 终端三 全局
top - 终端四 局部
iotop

- 测试结果

参考:【操作系统】磁盘IO常见性能指标和分析工具实战-云社区-华为云
总结
以上就是linux测试磁盘吞吐的过程。
更多推荐
所有评论(0)