本来准备写一篇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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

01-25 15:47