AIX系统磁盘IO性能评估
AIX系统磁盘IO性能评估... 2
一, 对磁盘IO的性能考虑, 裸设备优缺点分析... 2
1.1 对磁盘IO的性能考虑... 2
1.2 裸设备的优点... 2
1.3 裸设备的缺点... 2
二, IOSTAT工具使用... 3
2.1 参数与用法... 3
2.2 iostat报告解析... 6
三, sar –d看... 7
四, 使用lslv –l lvname估逻辑卷的碎片情况... 8
五, 使用vmstat命令评估调页空间... 10
六, 使用filemon命令监控系统IO.. 10
6.1 filemon标记描述... 11
6.2 filemon报告解析... 11
七, 监视磁盘IO的小结... 12
AIX系统磁盘IO性能评估
一, 对磁盘IO的性能考虑, 裸设备优缺点分析
1.1 对磁盘IO的性能考虑
1, 将频繁访问的文件系统和裸设备尽可能放置在不同的磁盘上.
2, 在建立逻辑卷时尽可能使用mklv的命令开关给不同的文件系统和裸设备赋予不同的内策略.
3, 使用磁盘设备驱动器的功能属性构建合适的RAID方式, 以获得更高的数据安全性和存取性能. 一般考虑采用RAID5或者RAID10的方式, 对于写要求比较高的系统, 一般建议采用RAID10方式.
4, 尽可能利用内存读写带宽远比直接磁盘IO操作性能优越的特点, 使频繁访问的文件或数据置于内存中进行操作处理.
1.2 裸设备的优点
由于忽略了文件系统缓冲器而直接读写, 从而具有更好的性能. 对磁盘的直接读写就意味着取消了磁盘与文件系统的同步要求. 这一点对于纯OLTP系统非常有用, 因为在这种系统中, 读写的随机性非常大以至于一旦数据被读写之后,它们在以后的较长一段时间内不会得到再次使用. 除了OLTP, raw设备还能够从以下几个方面改善DSS应用程序性能.
排序: 由于对临时表空间的写作数据更快, 所以对排序也有一定的好处.
序列号访问: 比如对表,索引的完全扫描等序列化操作, 这种速度会更快.
直接读写: 不需要经过OS级的缓存, 节约了内存资源, 在一定程度上避免了内存的争用.
避免了OS的cache预读功能, 减少了IO.
采用裸设备避免了文件系统的开销. 比如维护I-node, 空闲块等.
1.3 裸设备的缺点
1, 裸设备的空间管理不灵活, 需要预先规划好裸设备上的空间使用, 还应当保留一部分裸设备以应付突发情况. 这是对空间的浪费.
2, 很多备份工具对裸设备的支持不足, 导致备份的操作方式比较原始, 麻烦.
二, IOSTAT工具使用
Iostat主要用来报告中央处理器(CPU)统计信息和整个系统, 适配器, tty设备, 磁盘和CD-ROM的输入输出统计信息. Iostat的一个缺点是它不能对某个进程进行深入分析.仅对系统的整体情况进行分析.
2.1 参数与用法
iostat [ -s ] [ -a ] [ -d | -t ] [ -T ][ -m ][ PhysicalVolume ... ] [ Interval [ Count ] ]
1. 其中-s为显示系统信息.
# iostat -s
System configuration: lcpu=4 drives=11 paths=2 vdisks=0
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 2.7 0.8 0.3 98.7 0.2
System: i2db
Kbps tps Kb_read Kb_wrtn
200.7 4.6 1526558379 1603904240
Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk0 0.3 3.0 0.6 20332313 27206892
hdisk1 0.0 0.0 0.0 3157 0
dac0 0.0 197.7 4.0 1506222909 1576697348
dac0utm 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
hdisk4 0.0 0.0 0.0 0 0
hdisk5 0.7 197.7 4.0 1506222909 1576697348
hdisk6 0.0 0.0 0.0 0 0
hdisk7 0.0 0.0 0.0 0 0
cd0 0.0 0.0 0.0 0 0
2, -d标志不能和-t标志合用, 且仅仅显示磁盘使用率报告.
# iostat -d
System configuration: lcpu=4 drives=11 paths=2 vdisks=0
Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk0 0.3 3.0 0.6 20332317 27207032
hdisk1 0.0 0.0 0.0 3157 0
dac0 0.0 197.7 4.0 1506222913 1576700356
dac0utm 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
hdisk4 0.0 0.0 0.0 0 0
hdisk5 0.7 197.7 4.0 1506222913 1576700356
hdisk6 0.0 0.0 0.0 0 0
hdisk7 0.0 0.0 0.0 0 0
cd0 0.0 0.0 0.0 0 0
3, -a 显示适配器吞吐量报告
# iostat -a
System configuration: lcpu=4 drives=11 paths=2 vdisks=0
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 2.7 0.8 0.3 98.7 0.2
Adapter: Kbps tps Kb_read Kb_wrtn
sisscsia0 3.0 0.6 20335478 27207108
Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk0 0.3 3.0 0.6 20332321 27207108
hdisk1 0.0 0.0 0.0 3157 0
Adapter: Kbps tps Kb_read Kb_wrtn
fcs0 197.7 4.0 1506222913 1576701580
Disks: % tm_act Kbps tps Kb_read Kb_wrtn
dac0 0.0 197.7 4.0 1506222913 1576701580
hdisk2 0.0 0.0 0.0 0 0
hdisk3 0.0 0.0 0.0 0 0
hdisk4 0.0 0.0 0.0 0 0
hdisk5 0.7 197.7 4.0 1506222913 1576701580
hdisk6 0.0 0.0 0.0 0 0
hdisk7 0.0 0.0 0.0 0 0
Adapter: Kbps tps Kb_read Kb_wrtn
vsa0 0.0 0.0 0 0
Disks: % tm_act Kbps tps Kb_read Kb_wrtn
dac0utm 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
4, -t标记排除了-d标记且仅显示tty和cpu的用法报告
# iostat -t
System configuration: lcpu=4
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 2.7 0.8 0.3 98.7 0.2
5, -T 打印iostat输出的每一行边上的时间戳记,
# iostat -T
System configuration: lcpu=4 drives=11 paths=2 vdisks=0
tty: tin tout avg-cpu: % user % sys % idle % iowait time
0.0 2.7 0.8 0.3 98.7 0.2 11:44:48
Disks: % tm_act Kbps tps Kb_read Kb_wrtn time
hdisk0 0.3 3.0 0.6 20332325 27207328 11:44:48
hdisk1 0.0 0.0 0.0 3157 0 11:44:48
dac0 0.0 197.7 4.0 1506222925 1576705176 11:44:48
dac0utm 0.0 0.0 0.0 0 0 11:44:48
hdisk2 0.0 0.0 0.0 0 0 11:44:48
hdisk3 0.0 0.0 0.0 0 0 11:44:48
hdisk4 0.0 0.0 0.0 0 0 11:44:48
hdisk5 0.7 197.7 4.0 1506222925 1576705176 11:44:48
hdisk6 0.0 0.0 0.0 0 0 11:44:48
hdisk7 0.0 0.0 0.0 0 0 11:44:48
cd0 0.0 0.0 0.0 0 0 11:44:48
2.2 iostat报告解析
Iostat命令生成四种类型的报告, tty和cpu使用率报告, 磁盘使用率报告, 系统吞吐量报告和适配器吞吐量报告.
1, tty和cpu使用率报告
tty: tin tout avg-cpu: % user % sys % idle % iowait time
0.0 2.7 0.8 0.3 98.7 0.2 11:44:48
对于多处理器系统, cpu值是所有处理器的总平均. 同时, IO等待状态是系统级定义的, 而不是每个处理器.
注释: tty是teletype的缩写.通常使用tty来简称各种类型的终端设备
栏
描述
Tin
系统为所有tty读取的字符总数
Tout
系统为所有tty写入的字符总数
% user
用户使用cpu的时间百分比
% sys
系统使用cpu的时间百分比
% idle
Cpu空闲且系统没有未完成的io请求的时间百分比
% iowait
Cpu空闲期间系统有未完成的磁盘io请求的时间百分比
每过一定的时间间隔, 内核就更新这条信息(一般每秒六十次). Tty报告提供了从系统中所有终端收到的每秒字符数, 以及每秒输出到系统所有终端的字符的总数.
2, 磁盘使用率报告
这个报告提供了在每个物理磁盘上的统计信息.
栏
描述
% tm_act
物理磁盘处于活动状态的时间百分比
Kbps
平均每秒传输(读或写)到驱动器的数据量
Tps
传输次数, 也就是对物理磁盘的io请求次数
Kb_read
读取的kb总数
Kb_wrtn
写入的KB总数
3, 系统吞吐量报告
这个报告提供了针对系统的统计信息.
栏
描述
Kbps
平均每秒传输(读或写)到系统的数据量
Tps
传输次数, 也就是对系统的io请求次数
Kb_read
读取的kb总数
Kb_wrtn
写入的KB总数
4, 适配器吞吐量报告
这个报告提供了针对适配器的统计信息.
栏
描述
Kbps
平均每秒传输(读或写)到适配器的数据量
Tps
传输次数, 也就是对适配器的io请求次数
Kb_read
读取的kb总数
Kb_wrtn
写入的KB总数
三, sar –d看
搜集, 报告, 或者保存系统活动信息
# sar -d 1 1
AIX i2db 3 5 00CC886E4C00 07/10/09
System configuration: lcpu=4 drives=11
09:42:23 device %busy avque r+w/s Kbs/s avwait avserv
09:42:24 hdisk0 0 0.0 0 0 0.0 0.0
hdisk1 0 0.0 0 0 0.0 0.0
dac0 0 0.0 0 0 0.0 0.0
dac0utm 0 0.0 0 0 0.0 0.0
hdisk2 0 0.0 0 0 0.0 0.0
hdisk3 0 0.0 0 0 0.0 0.0
hdisk4 0 0.0 0 0 0.0 0.0
hdisk5 0 0.0 0 0 0.0 0.0
hdisk6 0 0.0 0 0 0.0 0.0
hdisk7 0 0.0 0 0 0.0 0.0
cd0 0 0.0 0 0 0.0 0.0
栏
描述
Device
设备名称
%busy
磁盘活动占时间百分比 对应% tm_act
Avque
磁盘活动时间内未完成的请求的平均值,该值较高表明存在IO瓶颈
R+W/S
对应tps, 报告从一个设备读和写数据的次数
Blks/s
以0.5KB为单位的传输数据量
Avwait
总是设置为0.0
Avserv
总是设置为0.0
四, 使用lslv –l lvname估逻辑卷的碎片情况
1,显示卷组列表:
# lsvg
rootvg
rootvg1
datavg
2, 查看卷组的逻辑卷组成
# lsvg -l datavg
datavg:
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
loglv00 jfs2log 1 1 1 open/syncd N/A
fslv03 jfs2 720 720 1 open/syncd /oradata
3, 显示某个逻辑卷的信息
# lslv fslv03
LOGICAL VOLUME: fslv03 VOLUME GROUP: datavg
LV IDENTIFIER: 00cc886e00004c00000001153b9e95c7.2 PERMISSION: read/write
VG STATE: active/complete LV STATE: opened/syncd
TYPE: jfs2 WRITE VERIFY: off
MAX LPs: 720 PP SIZE: 128 megabyte(s)
COPIES: 1 SCHED POLICY: parallel
LPs: 720 PPs: 720
STALE PPs: 0 BB POLICY: relocatable
INTER-POLICY: minimum RELOCATABLE: yes
INTRA-POLICY: middle UPPER BOUND: 32
MOUNT POINT: /oradata LABEL: /oradata
MIRROR WRITE CONSISTENCY: on/ACTIVE
EACH LP COPY ON A SEPARATE PV ?: yes
Serialize IO ?: NO
4, 显示每个逻辑卷由哪些物理分区组成
# lslv -m fslv03|head
fslv03:/oradata
LP PP1 PV1 PP2 PV2 PP3 PV3
0001 0162 hdisk5
0002 0163 hdisk5
0003 0164 hdisk5
0004 0165 hdisk5
0005 0166 hdisk5
0006 0167 hdisk5
0007 0168 hdisk5
0008 0169 hdisk5
5, 评估逻辑卷的碎片情况
# lslv -l fslv03
fslv03:/oradata
PV COPIES IN BAND DISTRIBUTION
hdisk5 720:000:000 22% 160:159:159:160:082
栏
描述
PV
物理卷名称
Copies
三个字段分别代表
720: 在物理卷上至少包含一个物理分区的逻辑分区的数量
0: 在物理卷上至少包含两个物理分区(一个副本)的逻辑分区数量
0: 在物理卷上至少包含两个物理分区(两个副本)的逻辑分区数量
In band
物理卷上物理分区的百分比. 此物理卷属于逻辑卷, 且分配在由物理内分配策略指定的物理卷中
Distribution
分配在物理卷每个区域内: 160:159:159:160:082
外部边缘(160), 外部中间(159), 中间(159), 内部中心(160),内部边缘(182)的物理分区数目.
对于该例中的结果说明:
Copies显示逻辑卷fslv03只复制了一份.
In Band显示了内策略是如何遵循的. 这个百分比越高, 分配效率就越好.
Distribution显示, 逻辑卷fslv03总共有720个逻辑分区, 外部边缘(160), 外部中间(159), 中间(159), 内部中心(160),内部边缘(182). In band = 159/720 = 22%.
6, 查看卷组的物理卷组成
# lsvg -p datavg
datavg:
PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION
hdisk5 active 799 78 00..00..00..00..78
五, 使用vmstat命令评估调页空间
# vmstat -s
293967066 total address trans. Faults: 地址翻译错误, 每次发生地址转换页面故障时增加.
383887108 page ins: 入页: 随虚拟内存管理器读入的每页增加. 计数随调页空间和文件空间的入页增加. 它和出页统计信息一起表示实际IO总量.
398373792 page outs
4197657 paging space page ins: 调页空间入页, 只随VMM启动的来自调页空间的入页而增加.
4351404 paging space page outs
0 total reclaims
237662205 zero filled pages faults
222070 executable filled pages faults
1399248325 pages examined by clock
1487 revolutions of the clock hand
518506491 pages freed by the clock
4249427 backtracks
420362 free frame waits
0 extend XPT waits
16247685 pending I/O waits
782289679 start I/Os
69941471 iodones
3375131147 cpu context switches
381625154 device interrupts
814614929 software interrupts
2805794153 decrementer interrupts
410037 mpc-sent interrupts
410037 mpc-receive interrupts
1677224 phantom interrupts
0 traps
24457805147 syscalls
六, 使用filemon命令监控系统IO
监视文件系统的性能, 并且报告代表逻辑文件, 虚拟内存段, 逻辑卷和物理卷的IO活动.
filemon [ -d ] [ -i Trace_File -n Gennames_File] [ -o File] [ -O Levels] [ -P ] [ -T n] [ -u ] [ -v ]
6.1 filemon标记描述
-I
-o file 写IO活动报告到指定的File, 而不是到stdout文件.
-d 启动filemon命令, 但是一直推迟跟踪直到用户执行trcon命令. 默认立刻启动.
-T n 设置内核的跟踪缓冲区大小为n字节. 缺省值32000字节.
-O levels 只监控指定的文件系统级别. 有效的级别标识是
Lf 逻辑文件级别
Vm 虚拟内存级别
Lv 逻辑卷级别
Pv 物理卷级别
All lf,vm,lv,pv的简单表示
6.2 filemon报告解析
1,最活动的文件报告
栏
描述
#MBS
从文件中传输的数据总量, 递减排序
#opns
在评估周期内, 文件被打开的次数
#Rds
对文件的系统读取调用数目
#wrs
对文件的系统写入调用数目
File
文件名
Volume:inode
2,最活动的段报告
栏
描述
#MBS
从段中传输的数据总量, 递减排序
#rpgs
从磁盘读入到段的那些4KB的页的数目
#wpgs
Segid
段的内部标识
Segtype
输入段: 工作段, 持久段, 客户机段, 页面表段, 系统段或者特殊的永久段
Volume:inode
3,最活动的逻辑卷报告
栏
描述
Util
卷的使用情况(忙的时间片)
#rblk
从卷中读入的512字节的块的数目
#wblk
Kb/sec
总共的传输吞吐量
Volume
卷的名称
3,最活动的物理卷报告
栏
描述
Util
卷的使用情况(忙的时间片)
#rblk
从卷中读入的512字节的块的数目
#wblk
Kb/sec
总共的传输吞吐量
Volume
卷的名称
七, 监视磁盘IO的小结
一般来说, 高的%iowait表明系统存在一个应用程序问题, 缺少内存问题或低效的IO子系统配置. 例如, 应用程序的问题可能是由于过多的IO请求而不是处理许多数据. 理解IO瓶颈并且要清楚解决瓶颈问题的关键在于提高IO子系统的效率. 一些典型的解决方案可能包括.
1, 限制在特定的物理盘上活动逻辑卷和文件系统的数目. 该方法是为了在所有的物理磁盘驱动器中平衡文件IO.
2, 在多个物理磁盘间展开逻辑卷. 该方法在当有一些不同的文件被存取时特别有用.
3, 为一个卷组创建多个 Journaled 文件系统(JFS)日志并且把它们分配到特定的文件系统中(最好在快速写高速缓存驱动器中)。这对应用程序创建、删除或者修改大量文件特别是临时文件来说十分有益。
4, 如果 iostat 命令的输出结果表明您的负载的 I/O 活动没有被均衡地分配到系统磁盘驱动器中,并且一个或多个磁盘驱动器的使用率经常在 70-80 之间或更高,您就得考虑重组文件系统,例如备份和恢复文件系统以便减少碎片。碎片将引起驱动器过多地搜索并且可能产生大部分响应时间过长。
5, 如果很大,I/O 增强的后台作业将涉及和相应时间交互,您可能希望激活I/O 调步。
6, 如果有迹象表明一小部分文件被一次又一次地读取,您可以考虑附加的实存是否允许那些文件更加有效地缓存。
7, 如果负载的存取模式是随机占主导地位,您可能要考虑增加磁盘并把按那些随机存取的文件分布到更多的磁盘中。
8, 如果负载的存取模式是顺序占主导地位并且涉及多个磁盘驱动器,您可能要考虑增加一个或多个磁盘适配器。您也可以适当地考虑构建一个条带状逻辑卷来适应大型并且性能关键的顺序文件。
9, 使用快速写高速缓存设备。
10, 使用异步 I/O。