iostat主要用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty设备、磁盘和CD-ROM的输入/输出统计信息,下面小编就为大家具体的讲解Linux系统中容易被误读的IOSTAT。
iostat(1)是在Linux系统上查看I/O性能最基本的工具,然而对于那些熟悉其它UNIX系统的人来说它是很容易被误读的。比如在HP-UX上avserv(相当于Linux上的svctm)是最重要的I/O指标,反映了硬盘设备的性能,它是指I/O请求从SCSI层发出、到I/O完成之后返回SCSI层所消耗的时间,不包括在SCSI队列中的等待时间,所以avserv体现了硬盘设备处理I/O的速度,又被称为diskservicetime,如果avserv很大,那么肯定是硬件出问题了。然而Linux上svctm的含义截然不同,事实上在iostat(1)和sar(1)的manpage上都说了不要相信svctm,该指标将被废弃:
Warning!Donottrustthisfieldanymore.Thisfieldwillberemovedinafuturesysstatversion.
在Linux上,每个I/O的平均耗时是用await表示的,但它不能反映硬盘设备的性能,因为await不仅包括硬盘设备处理I/O的时间,还包括了在队列中等待的时间。I/O请求在队列中的时候尚未发送给硬盘设备,即队列中的等待时间不是硬盘设备消耗的,所以说await体现不了硬盘设备的速度,内核的问题比如I/O调度器什么的也有可能导致await变大。那么有没有哪个指标可以衡量硬盘设备的性能呢?非常遗憾的是,iostat(1)和sar(1)都没有,这是因为它们所依赖的/proc/diskstats不提供这项数据。要真正理解iostat的输出结果,应该从理解/proc/diskstats开始。
#cat/proc/diskstats80sda2392191806372812592513275904326888325026882426816609047530602932910581sda13380532416959154054963724063371068382sda223869517973722645825044896203228883250263328252665990329798827770221816sdb1009117481101177312731900000126604126604817sdb110087924801010929127078000001263631263632530dm-010050804015137301460241168249023003091125053692531dm-119279103550045723760873591620440956002294946602312433253255632532dm-24713201717329183565496207059265607348763025177537532688