讨论指标之前,得先解决两个概念:文件系统和磁盘I/O栈。

  文件系统是什么?文件系统是在磁盘的基础上,提供了一个用来管理文件的树状结构。简言之,文件系统是树状结构,一种数据结构~逻辑上的概念。磁盘大家都比较熟悉了,硬件设备。借图描述下两者的关系:

    Linux性能优化之磁盘I/O性能指标_数据传输

   IO栈指Linux操作系统中的IO路径,算是其比较复杂的模块之一吧,结构如下:

    Linux性能优化之磁盘I/O性能指标_文件系统_02

  根据这张 I/O 栈的全景图,我们可以更清楚地理解,存储系统 I/O 的工作原理。
  应用程序
    这没什么好说的,通过相关系统调用(open/read/write)发起IO请求,属于IO请求的源头;
  文件系统
  应用程序的请求直接到达文件系统层。文件系统又分为VFS和具体文件系统(ext3ext4等),VFS对应用层提供统一的访问接口,而ext3等文件系统则实现了这些接口。另外,提高IO性能,在该层还实现了诸如page cache等功能。同时,用户也可以选择绕过page cache,而是直接使用direct模式进行IO(如数据库)。
  块设备层
    文件系统将IO请求打包提交给块设备层,该层会对这些IO请求作合并、排序、调度等,然后以新的格式发往更底层。在该层次上实现了多种电梯调度算法,如cfqdeadline等。
  SCSI
    块设备层将请求发往SCSI层,SCSI就开始真实处理这些IO请求,但是SCSI层又对其内部按照功能划分了不同层次: *
  SCSI高层:

    高层驱动负责管理disk,接收块设备层发出的IO请求,打包成SCSI层可识别的命令格式,继续往下发; *
  SCSI中层:

    中层负责通用功能,如错误处理,超时重试等; * SCSI低层:底层负责识别物理设备,将其抽象提供给高层,同时接收高层派发的scsi命令,交给物理设备处理。

  磁盘 I/O 性能监控的指标主要包括:

    1) 每秒 I/O 数( IOPS 
      一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和。
    2) 吞吐量( Throughput
      指硬盘传输数据流的速度,传输数据为读出数据和写入数据的和。
    3) 平均 I/O 数据尺寸
      平均 I/O 数据尺寸为吞吐量除以 I/O 数目,该指标对揭示磁盘使用模式有重要意义。
    4) 磁盘活动时间百分比( Utilization) %util
      磁盘处于活动时间的百分比,即磁盘利用率,磁盘在数据传输和处理命令处于活动状态。
    5) 服务时间( ServiceTime) svctm
      指磁盘读或写操作执行的时间,包括寻道,数据传输等时间。
    6) I/O 等待队列长度( Queue Length
      指待处理的 I/O 请求的数目,如果 I/O 请求压力持续超出磁盘处理能力,该值将增加。
    7) 等待时间( Wait Time
      
指磁盘读或写操作等待执行的时间,即在队列中排队的时间。