本文对AIX系统磁盘I/O性能评估做了详细介绍。

 【IT专家网独家】对磁盘IO的性能考虑

  1) 将频繁访问的文件系统和裸设备应尽可能放置在不同的磁盘上。

  2) 在建立逻辑卷时尽可能使用mklv的命令开关给不同的文件系统和裸设备赋予不同的内策略。

  3) 使用磁盘设备驱动适配器的功能属性构建合适的RAID方式,以获得更高的数据安全性和存取性能。一般考虑采用RAID5或者RAID10方式,对于写要求比较高的系统,一般建议采用RAID10方式;关于RAID10 与RAID 5的比较,可以见piner的文章,作为补充我会在后面贴出。

  4) 尽可能利用内存读写带宽远比直接磁盘I/O操作性能优越的特点,使频繁访问的文件或数据置于内存中进行操作处理;

  在这里,顺带提一下裸设备以及文件系统的对比。

  裸设备的优点

  1) 由于旁路了文件系统缓冲器而进行直接读写,从而具有更好的性能。对硬盘的直接读写就意味着取消了硬盘与文件系统的同步需求。这一点对于纯OLTP系统非常有用,因为在这种系统中,读写的随机性非常大以至于一旦数据被读写之后,它们在今后较长的一段时间内不会得到再次使用。除了OLTP,raw设备还能够从以下几个方面改善DSS应用程序的性能:

  排序:对于DSS环境中大量存在的排序需求,raw设备所提供的直接写功能也非常有用,因为对临时表空间的写动作速度更快。

  序列化访问:raw设备非常适合于序列化I/O动作。同样地,DSS中常见的序列化I/O(表/索引的完全扫描)使得raw设备更加适用于这种应用程序。

  2) 直接读写,不需要经过OS级的缓存。节约了内存资源,在一定程度上避免了内存的争用。

  3) 避免了操作系统的cache预读功能,减少了I/O。

  4) 采用裸设备避免了文件系统的开销。比如维护I-node,空闲块等。

  裸设备的缺点

  1、裸设备的空间大小管理不灵活。在放置裸设备的时候,需要预先规划好裸设备上的空间使用。还应当保留一部分裸设备以应付突发情况。这也是对空间的浪费。

  2、很多备份工具软件对裸设备的支持不足,导致备份等的操作和方法比较原始、麻烦。

  接下来,对于磁盘I/O的性能性能评估的方法。

  1、iostat查看

 

#iostat 1 3

System configuration: lcpu=16 drives=11 paths=4 vdisks=0

tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 59.7 30.4 17.0 25.6 27.1

Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk1 1.0 4.0 1.0 0 4
hdisk0 0.0 4.0 1.0 0 4
hdisk2 0.0 0.0 0.0 0 0
hdisk3 0.0 0.0 0.0 0 0
dac0 0.0 14477.7 1513.4 3072 11469
dac0-utm 0.0 0.0 0.0 0 0
dac1 0.0 0.0 0.0 0 0
dac1-utm 0.0 0.0 0.0 0 0
hdisk4 74.7 4968.3 440.1 1728 3262
hdisk5 99.6 9508.4 1073.3 1344 8206
cd0 0.0 0.0 0.0 0 0

tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 904.0 29.3 10.6 28.9 31.1

Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk1 0.0 0.0 0.0 0 0
hdisk0 0.0 0.0 0.0 0 0
hdisk2 0.0 0.0 0.0 0 0
hdisk3 0.0 0.0 0.0 0 0
dac0 0.0 5956.0 492.0 1832 4124
dac0-utm 0.0 0.0 0.0 0 0
dac1 0.0 0.0 0.0 0 0
dac1-utm 0.0 0.0 0.0 0 0
hdisk4 49.0 2840.0 221.0 512 2328
hdisk5 100.0 3116.0 271.0 1320 1796
cd0 0.0 0.0 0.0 0 0

tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 898.2 41.6 8.9 21.2 28.3

Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk1 0.0 0.0 0.0 0 0
hdisk0 0.0 0.0 0.0 0 0
hdisk2 0.0 0.0 0.0 0 0
hdisk3 0.0 0.0 0.0 0 0
dac0 0.0 25695.7 2306.8 2344 23432
dac0-utm 0.0 0.0 0.0 0 0
dac1 0.0 0.0 0.0 0 0
dac1-utm 0.0 0.0 0.0 0 0
hdisk4 67.8 7908.3 542.3 712 7221
hdisk5 99.7 17787.4 1764.5 1632 16211
cd0 0.0 0.0 0.0 0 0

 

 
 

注意:第一个报告代表自系统启动以来所有的活动。

  下面对输出的结果说明如下:

  ¨ tty TTY 的两列信息(tin 和 tou)显示了由所有 TTY 设备读写的字符数。

  ¨ avg-cpu CPU 统计信息列(% user、% sys、% idle 和 % iowait)提供了 CPU 的使用故障。如果 iostat 命令表明 CPU 受限的情况不存在,并且 % iowait 时间大于 20%,则可能出现 I/O 或磁盘受限情况。这一情况可能在缺少实内存的情况下由过多调页产生。也有可能是由于不平衡的磁盘负载、碎片数据或应用模式而产生。

  ¨ % tm_act 指示物理磁盘活动所占总时间的百分比(磁盘的带宽利用率),或者换句话说,磁盘请求的总时间未达到。驱动器在数据传送和处理命令时是活动的,例如寻道至新的位置。“磁盘活动时间”百分比正比于资源争用,反比于性能。当磁盘使用率增加时,性能就下降并且响应时间就增加。一般来说,当利用率超过 70% 时,进程将等待的时间会比完成 I/O 所必需的时间更长,因为大多数 UNIX 进程在等待它们的 I/O 请求完成时会阻塞(或休眠)。查找相对空闲驱动器来说繁忙的驱动器。把数据从繁忙的驱动器中移到空闲驱动器里可以帮助减轻磁盘的瓶颈。在磁盘中调入调出页面会使 I/O 负载增加。

  ¨ Kbps指示了每秒钟多少 KB 的数据被传送(读或写)。这是在系统报告时间间隔内 Kb_read 加上 Kb_wrtn 的总和并除以的这段时间间隔的总数的结果。

  ¨ tps 指示了每秒钟物理磁盘传送的次数。一次传送是设备驱动程序级别到物理磁盘的一次 I/O 处理请求。多重逻辑请求可以组合成单一的磁盘 I/O 请求。传送的大小是不确定的。

  ¨ Kb_read报告了在测量间隔中总的从物理卷中读取的数据量(以 KB 为单位)。

  ¨ Kb_wrtn显示了在测量间隔中总的写入物理卷中的数据量(以 KB 为单位)。

  我们也可以针对适配器作性能评估。想知道某个适配器是否饱和,使用 iostat 命令并且把所有连接到这个适配器上的磁盘的 Kbps 数量加起来。为了获得最大的聚集性能,总的传送率(Kbps)必须在磁盘适配器的吞吐量之下。在大多数情况下,使用 70% 的吞吐量,-a 或 -A 选项会显示这些信息。

 

#iostat -a 1 1

System configuration: lcpu=16 drives=11 paths=4 vdisks=0

tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 59.8 20.8 7.8 34.9 36.5

Adapter: Kbps tps Kb_read Kb_wrtn
sisscsia2 0.0 0.0 0 0

Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk1 0.0 0.0 0.0 0 0
hdisk0 0.0 0.0 0.0 0 0

Adapter: Kbps tps Kb_read Kb_wrtn
sisscsia4 0.0 0.0 0 0

Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk2 0.0 0.0 0.0 0 0
hdisk3 0.0 0.0 0.0 0 0

Adapter: Kbps tps Kb_read Kb_wrtn
fcs0 12614.7 1338.0 2160 10502

Disks: % tm_act Kbps tps Kb_read Kb_wrtn
dac0 0.0 12615.7 1338.0 2160 10503
hdisk4 59.8 4255.0 405.5 752 3519
hdisk5 99.6 8359.7 932.5 1408 6983

Adapter: Kbps tps Kb_read Kb_wrtn
vsa0 0.0 0.0 0 0

Disks: % tm_act Kbps tps Kb_read Kb_wrtn
dac0-utm 0.0 0.0 0.0 0 0
dac1-utm 0.0 0.0 0.0 0 0

Adapter: Kbps tps Kb_read Kb_wrtn
fcs2 0.0 0.0 0 0

Disks: % tm_act Kbps tps Kb_read Kb_wrtn
dac1 0.0 0.0 0.0 0 0

Adapter: Kbps tps Kb_read Kb_wrtn
ide0 0.0 0.0 0 0

Disks: % tm_act Kbps tps Kb_read Kb_wrtn
cd0 0.0 0.0 0.0 0 0