Linux操作系统-磁盘IO测试
常用的测试磁盘 IO 性能的命令.
工具
日常运维少不了对服务器的磁盘 IO 性能进行测试的操作,记这些命令太费脑子了,每次都要去百度又比较麻烦,所以将常用的命令记录下来,以备后续使用可以快速查找。
常用的工具有:
-
dd
-
fio
dd
我们可以利用 dd 命令测试某个磁盘的 IO 性能,须要注意的是 dd 命令只能大致测出磁盘的 IO 性能,不是非常准确。
测试写性能命令:
|
|
该分区磁盘写入速率为 159M/s
参数解释:
-
/dev/zero 伪设备,会产生空字符流,对它不会产生 IO 。
-
if 参数用来指定 dd 命令读取的文件。
-
of 参数用来指定 dd 命令写入的文件。
-
bs 参数代表每次写入的块的大小。
-
count 参数用来指定写入的块的个数。
-
offlag=direc 参数测试 IO 时必须指定,代表直接写如磁盘,不使用 cache 。
测试读性能命令:
|
|
该分区的读取速率为 440MB/s
fio
fio 命令是专门测试 iops 的命令,比 dd 命令准确,fio 命令的参数很多。
安装
yum install fio libaio-devel -y
(可选)安装 libaio 引擎:libaio 测试出来的 IO 会比 psync 要准确一些。
参数
参数的含义如下1:
|
|
场景
顺序读:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=read -ioengine=libaio -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r
随机写:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw
顺序写:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w
混合随机读写(70%随机读,30%随机写):
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=libaio -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w -ioscheduler=noop
报告
|
|
分析
I/O 统计数据信息的值的含义
-
read/write: 读/写的IO操作(还有一个trim没用过)
-
salt: 提交延迟,这是提交I/O所花费的时间(min:最小值,max:最大值,avg:平均值,stdev:标准偏差)
-
chat: 完成延迟,表示从提交到完成I/O部分的时间
-
lat: 相应时间,表示从fio创建I/O单元到完成I/O操作的时间
-
bw: 带宽统计
-
iops: IOPS统计
-
lat(nsec/usec/msec): I/O完成延迟的分布。这是从I/O离开fio到它完成的时间。与上面单独的读/写/修剪部分不同,这里和其余部分的数据适用于报告组的所有I/ o。10=0.01%意味着0.01%的I/O在250us以下完成。250=0.02%意味着0.02%的I/O需要10到250us才能完成。
-
cpu: cpu使用率
-
IO depths: I/O深度在作业生命周期中的分布
-
IO submit: 在一个提交调用中提交了多少个I/O。每一个分录表示该数额及其以下,直到上一分录为止——例如,4=100%意味着我们每次提交0到4个I/O调用
-
IO complete: 和上边的submit一样,不过这个是完成了多少个
-
IO issued rwt: 发出的read/write/trim请求的数量,以及其中有多少请求被缩短或删除
-
IO latency: 满足指定延迟目标所需的I/O深度
Run status group 0 (all jobs) 汇总信息的含义:
-
bw: 总带宽以及最小和最大带宽
-
io: 该组中所有线程执行的累计I/O
-
run: 这组线程中最小和最长的运行时。
Linux磁盘状态统计信息的值含义:
-
ios: 所有组的I/ o个数
-
merge: I/O调度器执行的总合并数
-
ticks: 使磁盘繁忙的滴答数(仅供参考,原文是Number of ticks we kept the disk busy)
-
in_queue: 在磁盘队列中花费的总时间
-
util: 磁盘利用率。值为100%意味着我们保留了磁盘,如果一直很忙,那么50%的时间磁盘就会闲置一半的时间