AIX 5L 磁盘性能优化.docx
《AIX 5L 磁盘性能优化.docx》由会员分享,可在线阅读,更多相关《AIX 5L 磁盘性能优化.docx(13页珍藏版)》请在冰豆网上搜索。
AIX5L磁盘性能优化
AIX5L磁盘性能优化
引言
磁盘I/O优化的关键部分涉及到在构建您的系统之前实现相关的最佳实践。
因为当您已经启动并处于运行状态时,很难再对数据进行移动,所以在规划您的磁盘和I/O子系统环境时,需要在第一次就正确地完成这项任务,这一点是非常重要的。
这包括物理体系结构、逻辑磁盘排列,以及逻辑卷和文件系统配置。
当系统管理员听到可能出现了磁盘争用的问题时,他或她首先将会求助iostat。
iostat等同于使用vmstat提供有关内存的报告,它是获得有关您的I/O子系统的当前运行情况概述的一种快速而原始的方法。
尽管运行iostat并不是一种完全不合理的“膝跳反应”,但是很早就应该着手考虑磁盘I/O的问题,而不是等到必须进行优化工作的时候。
如果从一开始就没有正确地为您的环境配置磁盘,那么任何优化工作都无法提供帮助。
而且,有一点非常重要,需要了解磁盘I/O的详细信息,以及它与AIX®及您的Systemp™硬件之间的关系。
就磁盘I/O优化而言,特定的AIX工具和实用工具比通用的UNIX®命令和工具能够提供更多的帮助,因为它们的任务就是帮助您优化本机AIX磁盘I/O子系统。
本文定义和介绍了AIXI/O栈,并将其与磁盘性能的物理和逻辑方面关联起来。
本文介绍了直接、并发和异步I/O:
它们是什么,如何启用它们,以及如何监视和优化它们。
本文还介绍了一些长期监视工具,您应该使用它们来帮助优化您的系统。
听到iostat并不是一种推荐的、帮助您长期收集统计数据的工具,您可能会感到奇怪。
最后,本文继续强调一点,无论您希望优化哪个子系统,始终应该将系统优化看作一个持续的过程。
开始对系统进行监视的最佳时间是当您首次将系统应用到生产环境中并且正常运行时,而不是等到用户抱怨系统的性能非常糟糕的时候。
您需要在系统正常运行的时候建立系统运行状态的基准,以便在可能不正常运行的情况下对数据进行分析。
在对您的I/O子系统进行更改时,一次仅进行一项更改,以便能够准确地评估这项更改所带来的影响。
为了评估其影响,您将使用本文中推荐的一种长期监视工具来捕获数据。
磁盘I/O概述
这个部分提供了磁盘I/O与AIX之间的关系的概述。
本部分介绍了I/O(设备驱动器和适配器)的物理方面、AIXI/O栈,以及一些相关概念(如直接、并发和异步I/O)。
还介绍了I/O处理速率调整的概念,以及iostat的一些最新改进,以便帮助您监视AIX服务器。
您应该很清楚,对于运行任何程序来说,最慢的操作实际上是花费在检索磁盘中数据上的时间。
这种情况主要是因为I/O的物理组件。
实际的磁臂必须找到正确的柱面,控制部分需要访问正确的块,并且磁头必须等到这些块旋转到磁头下面。
在对系统进行任何优化活动之前,首先应该了解您的I/O系统的物理体系结构,因为如果您所设计的I/O子系统非常糟糕,并且其中包含慢速磁盘,或者适配器的使用非常低效,那么任何优化工作都无法提供帮助。
图1清楚地阐释了物理I/O组件与逻辑磁盘及其应用程序I/O之间非常紧密地关联在一起。
这正是通常将其称为AIXI/O栈的原因。
图1.AIXI/O栈
在进行优化工作时,您需要了解所有的层次,因为它们分别以不同的方式对性能产生影响。
在第一次设置您的系统时,对于磁盘的配置,可以从底层(物理层)开始,然后是设备层、逻辑卷、文件系统、文件和应用程序。
规划您的物理存储环境是非常重要的,这一点无论怎样强调都不为过。
这涉及到确定磁盘的数量、类型(速度)、大小和吞吐量。
关于存储技术需要注意的一项重要挑战是,尽管磁盘存储功能得到了极大的改进,但是磁盘的旋转速度却没有太大的提高。
您必须清楚这样的一个事实,RAM访问仅需要540个CPU周期,而磁盘访问则需要花费20,000,000个CPU周期。
很明显,系统中最薄弱的环节就是磁盘I/O存储系统,并且作为系统管理员,您的任务是确保它不会成为更严重的瓶颈。
如前所述,与任何可调整的I/O参数相比,糟糕的数据布局将会给I/O性能带来更大的影响。
查看I/O栈可以帮助您理解这一点,因为逻辑卷管理器(LogicalVolumeManager,LVM)和磁盘布置要比优化参数(ioo和vmo)更接近于底层。
现在,让我们来介绍数据布局的一些最佳实践。
一个重要的概念是,请确保您的数据均匀地分布在整个物理磁盘中。
如果您的数据仅位于几个轴,那么使用多个逻辑单元号(LUN)或者物理磁盘又有什么实际意义呢?
如果您使用了SAN或者其他类型的存储阵列,那么您应该尝试在创建阵列时使它们具有相同的大小和类型。
您还应该在创建它们时,为每个阵列使用一个LUN,然后将所有的逻辑卷分散到您的卷组中所有的物理卷。
如前所述,应该在首次配置您的系统时完成这项工作,因为修复I/O问题要比内存或者CPU问题更加困难,特别是当它涉及到在生产环境中对数据进行移动时。
您还应该确保镜像位于不同的磁盘和适配器。
数据库提出了不同的、独特的要求,如果可能,您的索引和重做日志也应该位于不同的物理磁盘。
对于经常用于执行排序操作的临时表空间,也应该这样。
再回到物理设备方面。
使用高速适配器连接磁盘驱动器,这一点是非常重要的,但是您必须确保该总线本身不会成为一个瓶颈。
要防止这种情况发生,请确保将适配器分散到多个总线。
同时,不要将过多的物理磁盘或者LUN连接到任何一个适配器,因为这样做也会对性能产生极大的影响。
您配置的适配器越多越好,特别是在大量磁盘的利用率都很高的情况下。
您还应该确保设备驱动程序支持多路径I/O(MPIO),它支持I/O子系统的负载平衡和可用性。
直接I/O
让我们回到前面提到的一些概念,如直接I/O。
那么,什么是直接I/O?
它在AIXVersion4.3中首次引入,这种I/O方法不经过虚拟内存管理器(VirtualMemoryManager,VMM),从用户缓冲区直接与磁盘进行数据传输。
根据您的应用程序的类型,在实现这种技术时可以提高性能。
例如,那些具有糟糕的缓存使用率的文件,是使用直接I/O的很好的候选对象。
直接I/O还可以提高那些使用同步写入操作的应用程序的效率,因为这些写入操作的对象是磁盘。
直接I/O降低了CPU使用率,这是因为消除了双重数据副本。
将磁盘的数据复制到缓冲区缓存,然后再复制文件数据时会出现多余的副本。
直接I/O的一个主要性能开销是,尽管它可以降低CPU使用率,但是它可能导致进程长时间等待较小请求的完成。
请注意,这种方式适用于在磁盘上具有持久存储位置的持久段文件。
当使用IBMEnhancedJournaledFileSystemforAIX5L™(JFS2)不通过直接I/O访问文件时,文件作为本地页面缓存,并且将数据复制到RAM中。
直接I/O可以在许多方面为您提供与使用原始逻辑卷类似的性能,同时还保留了使用JFS文件系统的优点(例如,易于管理)。
在使用直接I/O装入文件系统时,您应该避免使用支持大文件的JFS文件系统。
并发I/O
并发I/O又如何呢?
它在AIXVersion5.2中首次引入,这个特性调用了直接I/O,所以它具有与直接I/O相关联的所有其他性能注意事项。
使用标准的直接I/O,会对索引节点(与文件相关联的数据结构)加锁,以防止出现多个线程试图同时更改一个文件的内容的情况。
并发I/O绕过了索引节点锁,这样可以允许多个线程并发地读写相同文件的数据。
这是因为JFS2在实现时使用了写独占(write-exclusive)索引节点锁,允许多个用户同时读取相同的文件。
可以想象,直接I/O可能使得不断地从相同文件读取数据的数据库产生很大的问题。
并发I/O则解决了这一问题,这正是该特性主要用于关系数据库的原因。
与直接I/O类似,您可以通过open系统调用或者通过装入文件系统来实现这种方式,如下所示:
#mount-ocio/u
当您使用这个命令装入文件系统时,其中所有的文件都使用并发I/O。
与使用直接I/O相比,并发I/O几乎可以提供使用原始逻辑卷的所有优点,同时保持文件系统的易管理性。
请注意,您不能对JFS(只能对JFS2)使用并发I/O。
而且,对于那些受益于文件系统预读功能或者较高缓冲区缓存命中率的应用程序,可能会出现性能的降低。
异步I/O
异步I/O是什么情况呢?
同步和异步I/O指的是,应用程序是否等待I/O的完成以开始进行处理。
正确地使用异步I/O可以极大地提高I/O子系统写入操作的性能。
其工作方式是,它本质上允许应用程序在后台等待I/O完成的同时,继续进行处理。
这种方式能够提高性能是因为它允许I/O和应用程序处理同时运行。
对于数据库环境,启用异步I/O的确可以起到帮助作用。
您如何监视异步I/O服务器的使用率呢?
iostat(仅适用于AIXVersion5.3)和nmon都可以监视异步I/O服务器的使用率。
在AIXVersion5.3之前,确定该信息的唯一方法是使用nmon命令。
确定您的系统中所配置的异步I/O(遗留)服务器数量的标准命令是:
pstat-a|egrep'aioserver'|wc-l
iostat-A命令可以报告异步I/O统计数据(请参见清单1)。
清单1.iostat-A命令
#iostat-A
Systemconfiguration:
lcpu=2drives=3ent=0.60paths=4vdisks=4
aio:
avgcavfcmaxgcmaxfcmaxreqsavg-cpu:
%user%sys%idle%iowaitphysc%entc
0032040966.48.085.40.20.116.0
Disks:
%tm_actKbpstpsKb_readKb_wrtn
hdisk00.52.00.504
hdisk11.05.91.584
hdisk20.00.00.000
所有这些内容究竟表示什么呢?
∙avgc:
它报告了在您所指定的时间间隔内平均每秒的全局异步I/O请求。
∙avfc:
它报告了在您所指定的时间间隔内平均每秒的快速路径请求计数。
∙maxgc:
它报告了从上次获取该值以来的最大全局异步I/O请求。
∙maxfc:
它报告了从上次获取该值以来的最大快速路径请求计数。
∙maxreqs:
这是所允许的最大异步I/O请求。
您究竟应该配置多大呢?
根据经验,可以将服务器的最大数目设置为磁盘数量的十倍或者处理器数量的十倍。
可以将MinServers设置为这个数量的一半。
除了使得更多的、几乎不怎么使用的(使用少量的内核内存)内核进程挂起之外,将MaxServers设置得过大,实际上并没有什么风险,所以不用担心提高这个值。
如何完成这项任务呢?
您可以使用chdev命令或者smitfastpath命令:
#smitaio(orsmitposixaio)
这也是您在系统中启用异步I/O的方法。
要从命令行将maxservers设置为100,可以使用这个命令:
#chdev-laio0-amaxservers=100
请注意,在这项更改生效之前,您必须重新启动。
有时候,我会被问及aio和posixaio之间的区别。
这两者之间的主要区别是传递不同的参数,所以您的确需要同时配置它们。
最后一个概念是I/O处理速率调整。
这是一项AIX的特性,它可以防止使用大量磁盘I/O的应用程序使得CPU和磁盘超载。
正确地使用磁盘I/O处理速率调整,可以帮助防止生成大量输出的程序使系统的I/O饱和,并导致系统性能降低。
优化maxpout和minpout可以帮助防止对文件执行顺序写入操作的线程占用过多的系统资源。
通过显式地将minput和maxpout设置为0并装入文件系统,您还可以限制设置全局参数的效果:
#mount-ominpout=0,maxpout=0/u
监视
这个部分对可用于监视磁盘I/O活动的AIX特定工具(sar、topas和nmon)提供了概述。
这些工具都允许您快速地进行故障排除,并获取相关的数据以便进行历史趋势研究和分析。
别期望在这一部分中看到iostat,因为iostat是一种允许您快速确定物理磁盘和适配器之间是否存在不平衡的I/O负载的UNIX实用工具。
除非您决定使用iostat编写自己的脚本工具,否则它无法帮助您分析长期的趋势和捕获数据。
sar是较早的通用UNIX工具之一,而这些工具已经经过了多年的改进。
尽管我通常喜欢使用更特定的AIX工具,如topas或者nmon,但是sar提供了关于磁盘I/O的详细信息。
让我们运行一个典型的sar命令以检查I/O活动(请参见清单2)。
清单2.使用sar
#sar-d12
AIXnewdev3506/04/07
SystemConfiguration:
lcpu=4disk=5
07:
11:
16device%busyavquer+w/sblks/savwaitavserv
07:
11:
17hdisk100.0000.00.0
hdisk0290.0129850.00.0
hdisk300.0000.00.0
hdisk200.0000.00.0
cd000.0000.00.0
07:
11:
18hdisk100.0000.00.0
hdisk0350.02161300.00.0
hdisk300.0000.00.0
hdisk200.0000.00.0
cd000.0000.00.0
Averagehdisk100.0000.00.0
hdisk0320.0177940.00.0
hdisk300.0000.00.0
hdisk200.0000.00.0
cd000.0000.00.0
让我们来仔细研究清单2中的列标题。
∙%busy:
这个命令可以报告该设备忙于处理传输请求的时间比例。
∙avque:
在AIXVersion5.3中,这个命令可以报告等待发送到磁盘的请求的数量。
∙r+w/s:
这个命令可以报告从设备读取或者向设备写入的次数(以512个字节为单位)。
∙avwait:
这个命令可以报告每个请求的平均等待时间(单位为毫秒)。
∙avserv:
这个命令可以报告每个请求的平均服务时间(单位为毫秒)。
您需要谨防出现任何磁盘的使用率接近百分之百,或者大量的队列请求等待磁盘的情况。
尽管sar的输出表示存在某种活动,但实际上并没有什么I/O问题,因为不存在等待I/O的情况。
您需要继续监视该系统以确保同时使用了hdisk0之外的其他磁盘。
sar不同于iostat的地方在于,它能够通过它的系统活动数据收集(sadc)实用工具,捕获数据以便进行长期的分析和趋势研究。
通常在cron中并没有开启这种实用工具,而它允许您捕获数据进行历史趋势研究和分析。
下面介绍一下它的工作方式。
在AIX系统中,缺省情况下通常有两个Shell脚本被注释掉了(/usr/lib/sa/sa1和/usr/lib/sa/sa2),它们提供了有关系统活动的每天的报告。
sar命令实际上调用了sadc例程以访问系统数据(请参见清单3)。
清单3.示例cronjob
#crontab-l|grepsa1
08-17**1-5/usr/lib/sa/sa112003&
0***0,6/usr/lib/sa/sa1&
018-7**1-5/usr/lib/sa/sa1&
有没有对用户来说更加友好的工具呢?
您指的是topas吧!
topas是一种非常优秀的性能监视工具,您可以将其用于各种不同的目的,包括(但是不限于)您的磁盘I/O子系统。
图2.topas
下面从磁盘的角度来研究topas的输出。
其中并没有发生什么I/O活动。
除了物理磁盘之外,请仔细观察“Wait”(在CPU部分的上部),它也可以帮助确定系统是不是I/O绑定的。
如果您在此处看到较高的数值,那么您可以使用其他工具,如filemon、fileplace、lsof或lslv,以帮助您确定究竟是哪个进程、适配器或者文件系统导致了瓶颈。
当您希望获得比使用iostat更多的信息时,那么可以使用topas,它适合于对一个问题进行快速故障诊断。
从某种意义而言,topas是iostat和vmstat的图形混合版,经过最近的改进,它现在支持捕获数据以进行历史分析。
这些改进是在AIXVersion5.3中完成的,毫无疑问,因为IBM的开发人员也创建了一种类似的、非常流行的工具,所以IBM并没有为这个工具提供正式的支持。
这就是nmon(我最喜欢的AIX性能工具)。
尽管nmon提供了类似于topas的前端,但是它更适合于长期趋势研究和分析。
而且,它使得系统管理员能够将数据输出到包含非常漂亮的图表(为高级管理和职能团队进行了修改)的Excel电子表格,其中清楚地说明了您的瓶颈所在。
这些工作可以通过一个称为nmon分析程序的工具来完成,它提供了到nmon的挂钩。
关于磁盘I/O,nmon可以报告下面的数据:
磁盘I/O速度、数据传输、读/写比例,以及磁盘适配器统计信息。
下面提供了一个小的示例,其中nmon确实发挥了它的作用。
假设您希望了解哪些进程占用了大多数磁盘I/O,并且您希望能够将其与实际磁盘关联起来,以便清楚地显示每个进程的I/O。
可以使用nmon获得详细信息,然后使用任何其他工具。
要使用nmon完成这项任务,可以使用-t选项;设置时间,然后按I/O通道进行排序。
您如何使用nmon来捕获数据,并将其导入到该分析程序呢?
使用sudo命令,并让nmon运行3个小时,每30秒钟进行一次快照:
#sudonmon-f-t-rtest1-s30-c180
然后,对所创建的输出文件进行排序:
#sort-Atestsystem_yymmdd.nmon>testsystem_yymmdd.csv
在完成了该任务之后,将这个.csv文件通过ftp上传到您的PC,启动nmon分析程序电子表格(启用宏),并且单击analyzenmondata。
您可以从这里下载nmon分析程序。
图3是从一个AIX5.3系统中获取的屏幕截图,它为每个磁盘的读写提供了磁盘汇总信息,单位是千字节每秒。
图3.每个磁盘的读写磁盘汇总信息,单位是千字节每秒
nmon还可以帮助跟踪异步I/O服务器的配置,如清单4中的输出所示。
清单4.使用nmon跟踪异步I/O服务器的配置
lsattr-Elaio0
lsattr-Elaio0autoconfigavailableSTATEtobeconfiguredatsystemrestartTrue
lsattr-Elaio0fastpathenableStateoffastpathTrue
lsattr-Elaio0kprocprio39ServerPRIORITYTrue
lsattr-Elaio0maxreqs16384MaximumnumberofREQUESTSTrue
lsattr-Elaio0maxservers100MAXIMUMnumberofserverspercpuTrue
lsattr-Elaio0minservers50MINIMUMnumberofserversTrue
在AIXVersion5.3之前,nmon是唯一用于显示所配置的异步I/O服务器的数量,以及实际使用量的工具。
正如前面的部分所述,最近对iostat进行了增强,使它也提供了这种功能。
结束语
本文介绍了磁盘I/O子系统的相对重要性。
本文定义并介绍了AIXI/O栈,以及它与物理和逻辑磁盘I/O之间的关系。
本文还介绍了在数据库环境中进行磁盘配置的一些最佳实践,研究了直接和并发I/O之间的区别,还介绍了异步I/O和I/O处理速率调整。
您优化了异步I/O服务器,并配置了I/O处理速率调整。
您从并发I/O模式的文件系统开始,研究了何时最适合实现并发I/O。
而且,您了解了关于iostat,以及使用sar、topas和nmonn捕获数据的所有内容。
您还研究了输出的不同类型,了解了许多在sar和iostat中使用的标志。
本系列文章的第2部分将深入研究AIXI/O栈中的逻辑卷管理器层,并介绍一些快照类型的工具,它们可以帮助您快速地访问磁盘I/O子系统的状态。
第3部分主要关注于使用各种工具跟踪I/O使用情况,如filemon和fileplace,以及如何提高文件系统性能整体.