本来准备写一篇windows中监视IO性能的,后来发现好像可写的内容不多,windows在细节这方面做的不是那么的好,不过那些基本信息还是有的。
在Windows中监视性能基本都用性能监视器了,与IO性能相关的有两个大类,一个是”LogicalDisk”,另外一个是”PhysicalDisk”,”LogicalDisk”更多的是用来监视文件相关的IO性能,而”PhysicalDisk”则是用来监视LUN或者是磁盘卷,下面就列举下与前面所列举的IO性能相关的计数器,具体的自己研究了:
单次IO大小
- Avg. Disk Bytes/Read
- Avg. Disk Bytes/Write
IO响应时间
- Avg. Disk sec/Read
- Avg. Disk sec/Write
IOPS
- Disk Reads/sec
- Disk Writes/sec
- Disk Transfers/sec
IO吞吐率
- Disk Bytes/sec
- Disk Read Bytes/sec
- Disk Write Bytes/sec
理解iostat的各项输出
在Linux中,我们执行一个iostat -x命令,我们能看到如下的输出
$iostat -x Linux 2.4.21-50a6smp (linux) 11/03/2009 avg-cpu: %user %nice %sys %iowait %idle 0.42 0.00 0.26 0.47 98.86 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util hdc 0.01 0.00 0.00 0.00 0.07 0.00 0.03 0.00 24.48 0.00 4.90 4.57 0.00 hda 0.89 8.54 0.74 4.49 12.60 104.22 6.30 52.11 22.32 0.03 5.41 1.01 0.53
我们先列举一下各个性能指标的简单说明。
- rrqm/s:每秒进行merge的读操作数目。
- wrqm/s:每秒进行merge的写操作数目。
- r/s:每秒完成的读I/O设备次数。
- w/s:每秒完成的写I/O设备次数。
- rsec/s:每秒读扇区数。
- wsec/s:每秒写扇区数。
- rkB/s:每秒读K字节数。
- wkB/s:每秒写K字节数。
- avgrq-sz:平均每次设备I/O操作的数据大小(扇区)。
- avgqu-sz:平均I/O队列长度。
- await:平均每次设备I/O操作的等待时间(毫秒)。
- svctm:平均每次设备I/O操作的服务时间(毫秒)。
- %util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。
要理解这些性能指标我们先看下图
IO的执行过程的各个参数
上图的左边是iostat显示的各个性能指标,每个性能指标都会显示在一条虚线之上,这表明这个性能指标是从虚线之上的那个读写阶段开始计量的,比如说图中的w/s从Linux IO scheduler开始穿过硬盘控制器(CCIS/3ware),这就表明w/s统计的是每秒钟从Linux IO scheduler通过硬盘控制器的写IO的数量。
结合上图对读IO操作的过程做一个说明,在从OS Buffer Cache传入到OS Kernel(Linux IO scheduler)的读IO操作的个数实际上是rrqm/s+r/s,直到读IO请求到达OS Kernel层之后,有每秒钟有rrqm/s个读IO操作被合并,最终转送给磁盘控制器的每秒钟读IO的个数为r/w;在进入到操作系统的设备层(/dev/sda)之后,计数器开始对IO操作进行计时,最终的计算结果表现是await,这个值就是我们要的IO响应时间了;svctm是在IO操作进入到磁盘控制器之后直到磁盘控制器返回结果所花费的时间,这是一个实际IO操作所花的时间,当await与svctm相差很大的时候,我们就要注意磁盘的IO性能了;而avgrq-sz是从OS Kernel往下传递请求时单个IO的大小,avgqu-sz则是在OS Kernel中IO请求队列的平均大小。
现在我们可以将iostat输出结果和我们前面讨论的指标挂钩了。
- 平均单次IO大小(IO Chunk Size) <=> avgrq-sz
- 平均IO响应时间(IO Response Time) <=> await
- IOPS(IO per Second) <=> r/s + w/s
- 吞吐率(Throughtput) <=> rkB/s + wkB/s
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。