磁盘的五个常见性能指标,使用率,饱和度,IOPS,吞吐量和响应时间
使用率:指磁盘处理I/O的时间百分比,过高的使用率,通常意味着磁盘I/O存在性能瓶颈,但是使用率只考虑有没有I/O,而不考虑I/O大小,当使用率达到100%的时候,磁盘依旧会接受新的I/O请求
饱和度:指磁盘处理I/O的繁忙程度,过高的饱和度意味着磁盘存在严重的性能瓶颈,当饱和度打到100%时,则代表磁盘不会再接受新的I/O请求
IOPS:指每秒的I/O请求数
吞吐量:指每秒的I/O请求大小
响应时间:指I/O请求从发出到收到响应的间隔时间
例如,再数据库,大量大小文件等这类随机读写比较多的场景中,IOPS更能反应系统的整体性能,而在多媒体等顺序读写较多的场景中,吞吐量才能更好的反应系统的整体性能
一般来说,再选择应用程序的服务器时,要先对磁盘的I/O性能进行基准测试,一遍可以准确的评估,磁盘的性能是否可以满足程序的要求,推荐使用fio
fio -name=mytest -direct=0 -thread -rw=randread -ioengine=psync -bs=4k -size=10M -numjobs=1 -runtime=5 -group_reporting
name:要测试的文件
direct:-direct=0
不使用O_DIECT
方式
thread:创建线程为POSIX线程
rw=randread:I/O类型为随机读
psync:则使用pread函数引擎
-bs=4k:块大小为4k
size:总共读10M
numjobs=1:总共开1个线程读
runtime:总共运行时间为10s
group_reporting:结果把多线程汇总输出
运行结果如下:
bw=平均IO带宽
iops=IOPS
runt=线程运行时间
slat=提交延迟,提交该IO请求到kernel所花的时间(不包括kernel处理的时间)
clat=完成延迟, 提交该IO请求到kernel后,处理所花的时间
cpu=利用率
IO depths=io队列
IO submit=单个IO要提交的IO数
io=总共执行了多少size的IO
aggrb=group总带宽
minb=最小.平均带宽.
maxb=最大平均带宽.
mint=group中线程的最短运行时间.
maxt=group中线程的最长运行时间.
ios=所有group总共执行的IO数.
merge=总共发生的IO合并数.
ticks=Number of ticks we kept the disk busy.
io_queue=花费在队列上的总共时间.
util=磁盘利用率
需要测出不同I/O大小分别再随机读,顺序读,随机写,顺序写等各种情况下的性能情况
观测磁盘I/O
iostat是常见的磁盘I/O性能观测工具
特别注意:
%util ,就是我们前面提到的磁盘 I/O 使用率;
r/s+ w/s ,就是 IOPS;
rkB/s+wkB/s ,就是吞吐量;
r_await+w_await ,就是响应时间。
但同时也要解合请求的大小(rareq-sz 和 wareq-sz)一起分析