Windows Perfmon与Linux IOstat存储性能工具
转载请在文首保留原文出处:介绍
Windows的Perfmon和*nux的IOStat是操作系统自带的存储性能状态检测的工具。它们能收集绝大多数性能指标,文章给出了两个工具输出的参数详解。操作系统自带的工具也派大用场。更多信息
Windows Perfmon:
Perfmon的全称是Windows Peformance Monitor(“Perfmon”),是Windows操作系统自带一个性能监控工具,可以用来发现操作系统是否存在I/O瓶颈。基本上每个管理员都会用它。虽然他的功能强大,涵盖得面也比较广。不过其中参数众多,可能管理员在选择特定性能指标的时候无从下手。本文是着重在磁盘性能的性能参数入手,介绍一下Perform针对PhysicalDisk的部分。
Perfmon中和磁盘性能有关的计数器有以下几种:
% idle time
% disk time
% disk read time
% disk write time
Disk Bytes/sec
Disk Transfers/sec
Disk Reads/sec
Disk Writes/sec
Disk Read Bytes/sec
Disk Write Bytes/sec
Avg. disk sec/read
Avg. disk sec/write
Avg. disk sec/transfer
Avg. disk bytes/transfer
Avg. Disk Queue Length
Avg. disk read queue length
Avg. disk write queue length
Current Disk Queue Length
其中比较重要的参数有:
% Disk Time
% Disk Time说明在性能数据采样区间内,磁盘处于做读写状态的百分比。一个没有I/O压力的磁盘,这个值应该小于100%。理论上应该是% Disk Read Time 和% Disk Write Time这两个值的和。但是有时候这个值会远大于100%,不太准确。作为一个趋势线,供管理员参考。
% Idle Time
% Idle Time说明在采样区间内,磁盘处于空闲状态的百分比。相对于经常大于100%的% Disk Time,这个值却是准的。当磁盘处于空闲状态时,它的值是100%。当磁盘在满负荷做操作时,它的值是0%。所以我们可以通过这个值,反推出% Disk Time的真实值。
Disk Bytes/sec
Disk Bytes/sec指明每秒钟磁盘作的读和写的数量,以Bytes为单位。它是Disk Read Bytes/sec 和 Disk Write Bytes/sec的和。管理员可以根据链接的存储系统的磁盘速度和Raid类型,看看是否达到理论上限。关于各种磁盘的参考速度,可以参考
Avg. disk sec/transfer
磁盘每做一次读或者写的动作所花的平均时间。如果后端存储的缓存可用且没有压力,这个值理论上会比较低。
Avg. disk sec/read
磁盘每做一次读操作所花的平均时间。后端存储Read Hit的比例会影响到这个数值
Avg. disk sec/write
磁盘每做一次写操作所花的平均时间。一样。存储系统的缓存会影响到这个数值
给一些参考值,这个是一个通用的界定,管理员还需要针对自己的应用要求来衡量:
好: < 10 ms、 还能接受: 10ms ~ 20ms 、比较差:20ms ~ 50m、很差: > 50ms
Avg. Disk Queue Length
在一个时间点上,磁盘队列的长度,也就是发出的磁盘操作正在等待被磁盘处理的请求数目。例如前端应用发出一条读的请求,但是目标磁盘当时正在处理其他任务(大文件读写之类的)。那么这个新的读请求就会被放在磁盘队列里。这时候磁盘队列的值就是1。理论上讲,这个值不应该长时间地大于2,如果是的话,说明磁盘的相应速度已经很慢了,前端应用程序肯定会受到影响。
Linux IOStat:
IOStat *nux的系统命令用来收集操作系统存储端的输入输出相关的统计信息。简单易用,遇到存储相关问题的时候管理员最想想到的就是这个命令,它支持本地磁盘的同时也支持mount到操作系统的网络文件系统,例如NFS。
IOstat的基本输出包括以下几项(单位都是KB):
Tps:指该磁盘设备上每秒的传输次数,这和存储系统的IOPS有点不同,根据不同的应用,每个IO的小大是不一样的,有可能多个逻辑请求会被合并成一个文件系统的IO。
kB_read/s: 每秒从该磁盘设备上读取的数据量
kB_wrtn/s: 每秒写入的数据量
kB_read:命令运行的区间内读取数据总量
kB_wrtn:命令运行的区间内写入数据总量
如果使用-X参数,iostat会输出更多信息
rrqm/s:每秒这个设备相关的读取请求有多少被合并了,例如文件系统发现不同的读取请求读取的是相同Block的数据,文件会将这个请求合并;
wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒所读取的扇区数
wsec/:每秒所写入的扇区数。
r/s:每秒读取请求的数目;
w/s:每秒写入请求的数目;
await:每一个IO请求的处理的平均时间(单位是微秒毫秒)。类似于前文中介绍的Avg. Disk Queue Length,可以理解为IO的响应时间。
%util:在统计时间内所有处理IO时间,除以总共统计时间。和Windows中的% Idle Time。
检查存储性能的过程不能单单靠一个指标确定问题所在,管理员要综合考虑,某一个数值高并不代表肯定有存储性能问题存在。以Windows Perfmon为例,在磁盘负荷高峰的时候,可能会看到Avg. disk sec/transfer比较高的现象。但是这个时候Disk Bytes/sec是不是也很高就比较关键了。如果Disk Bytes/sec已经接近了磁盘的最高上限,那么这个问题就更加是一个磁盘超负荷的问题。如果Disk Bytes/sec不算很高,就应该考虑的是为什么磁盘的速度不理想,可以往后端存储的方向查找问题所在。调整Raid保护级别,存储系统内部的资源分配,创建条带等都是解决方案。
参考
应用于
Windows Operation System
Linux Operation System