资源描述
AIX 下磁盘 I/O 性能分析磁盘I/O的概念I/O的概念,从字义来理解就是输入输出。操作系统从上层到底层,各个层次之 间均存在I/O。比如,CPU有I/O,内存有I/O, VMM有I/O,底层磁盘上也有 I/O,这是广义上的I/O.通常来讲,一个上层的I/O可能会产生针对磁盘的多 个I/O,也就是说,上层的I/O是稀疏的,下层的I/O是密集的。磁盘的I/O,顾名思义就是磁盘的输入输出。输入指的是对磁盘写入数据,输出 指的是从磁盘读出数据。衡量磁盘I/O性能的指标 图1.物理磁盘的架构以及常见磁盘类型Disk performancelZBRl! GeometryATAFCSASTimeSATASCSI IO service times ire pjedamjhately seek 十 rotatsonat latency + queueing time Interface type我们常见的磁盘类型有ATA、SATA、FC、SCSI、SAS。这几种磁盘中,服务器常 用的是SAS和FC磁盘,一些高端存储也使用SSD盘。每一种磁盘的性能是不 一样的。我们在测试工作中,衡量磁盘I/O性能主要参考IOPS和吞吐量两个参数。下 面,将介绍一下这两个参数的含义。IOPS与吞吐量的概念磁盘的IOPS,也就是在一秒内,磁盘进行多少次I/O读写。磁盘的吞吐量,也就是每秒磁盘I/O的流量,即磁盘写入加上读出的数据的大 小。IOPS与吞吐量的关系每秒I/O吞吐量=IOPS*平均I/O SIZE。从公式可以看出:I/O SIZE越大, IOPS越高,那么每秒I/O的吞吐量就越高。因此,我们会认为IOPS和吞吐量 的数值越高越好。实际上,对于一个磁盘来讲,这两个参数均有其最大值,而且 这两个参数也存在着一定的关系。下图为各种磁盘的IOPS极限值。表1.常见磁盘类型及其IOPS丁沪KWSIfitiHtMS-leSLGSSDSSD-+00 ICJP护 w-亠電SATAJCbtS.waiops115ATA3GtiS5D0K IOPS1-ATA3i3tfrS Skii-Phceiffi PnoSSDaMOTCP应 nT$AlH 沁IOdra段SSDWA6t5fc.lTtias IWtflwy SyHfimsSSDTS0.OOC* Riicm RfadWcE TOPS!:raPuwoie aeDwSSDU10K 联凶d 1OPS. lli.M l IOPS tWHJTi Srs*SSD320SWO hi曲wd READ幼唱 比甲占已他 朗也蹴3ri.SU -rf讥脅冼l&Ss曲阁+a咼出&:=:POfS3D:QO.OOC R*Hj w 寸叶 4X IOPS1-:心岸旳mb春Aw Duo迓:W MC*iOP5 w斶inlAtrg 诵曲益00SSD2M.MC* Rjrdpn R*芹W-皆P;.O-ihh;scsWtrtTiJ.nRSrTBssu:轮OKI理饰q砂併即冉1FU 鼻切” I1岛ibuid. th嵯OOFLdrwXS.SSD303,00( (512E Rlfdom Re-Jid OPS:-r%d 103 ODD* .itomR?rfWt* 1 口PSFC :耐币SaMOCZ日帕 Z-C-ve R4星SO53DUa IS iw.coo SPS IK1Tg柬 Mfenwy Sysztrns RinSafr 030Ap?aaflctssol.fflK KO* KE HMIddHnRMd.Y-te :6卸祀 NfifiiiiEndFuiiHMg Ow Qdi i ng* PC-:U-nliSSD1.150 QW*4?肿讥V* IOPS122OGZ 血闘 pif&沁 Zdvt 砒 PCb 艺9也SSCSSDWto 5.3JO.MaiO?5Tms FemwySyHes RanSaoTflS5D10 DM Rartwi树严PCfi注:上表源自维基百科 在AIX中,对于同一个磁盘(或者LUN),随着每次I/O读写数据的大小不通, IOPS的数值也不是固定不变的。例如,每次I/O写入或者读出的都是连续的大 数据块,此时IOPS相对会低一些;在不频繁换道的情况下,每次写入或者读出 的数据块小,相对来讲IOPS就会高一些。I/O读写的类型大体上讲,I/O的类型可以分为:读/写I/O、大/小块I/O、连续/随机I/O, 顺序/并发I/O。在这几种类型中,我们主要讨论一下:大/小块I/O、连续 /随机I/O,顺序/并发I/O。大/小块I/O这个数值指的是控制器指令中给出的连续读出扇区数目的多少。如果数目较多, 如64, 128等,我们可以认为是大块I/O;反之,如果很小,比如4, 8,我们 就会认为是小块I/O,实际上,在大块和小块I/O之间,没有明确的界限。连续/随机I/O连续I/O指的是本次I/O给出的初始扇区地址和上一次I/O的结束扇区地址 是完全连续或者相隔不多的。反之,如果相差很大,则算作一次随机I/O连续I/O比随机I/O效率高的原因是:在做连续I/O的时候,磁头几乎不用 换道,或者换道的时间很短;而对于随机I/O,如果这个I/O很多的话,会导 致磁头不停地换道,造成效率的极大降低。顺序/并发I/O从概念上讲,并发I/O就是指向一块磁盘发出一条I/O指令后,不必等待它回 应,接着向另外一块磁盘发I/O指令。对于具有条带性的RAID(LUN),对其 进行的I/O操作是并发的,例如:raid0+l(l+0),raid5等。反之则为顺序I/O。磁盘I/O性能的监控监控磁盘的I/O性能,我们可以使用AIX的系统命令,例如:sar-d, iostat, topas, nmon等。下面,我将以nmon和topas为例,讲述在系统中如何观察 磁盘I/O的性能。t opas登录AIX操作系统,输入topas,然后按D,会出现如下界面:Diskflus护KBP3TPSKB-RARTsatkB-WAWTMarACWAGUhdiskOSrO78.0K19.50.00.00.078.0K20.365.1e.s0.0MtaUZ卩卫6 口4 口SCI6口6 口4口s 口m 口hdiskl0.0;0.0口口0.00.0El.tJ0.00.00.0DD0.00.0Q.O0.00.0D.O0.D0,0D,0D.D eD0,0hdiskSD.O口DO.D6.D 口O-aO.00.0D0hdiak0.0OK00.00.0CLCi2.0K0.90.90Q0.0在上图中,TPS即为磁盘的IOPS, KBPS即为磁盘每秒的吞吐量。由于服务器处 于空闲的状态,我们可以看到I OPS, KBPS的数据都非常低。我们使用dd if命令向磁盘hdisk2发读I/O,block大小为1MB:# drf if =/dev/rhdisk2 af=/d已丄丄 bs=1024k11O485BO利用topas进行监控:此时,hdisk2的吞吐量为163.9M, IOPS为655。我们再启动一个dd if,使hdisk的busy数值达到100%:甘 dd xf-/dev/chdxsk2j bs-iOk21111343Topss ttomtoE ior host:.p740 01 hebmgataniEn 2Kon Dec 1 17:10:32011l*i3kJusy%KBPSTPSKB-RAKTKRTKfi-JlHTHUTXQVAQDh日乙屮號2ioo.D30,1H1 PZK304.in5,6斗4 30.00.00,00, 10.0hdisSO3.S3D.OK7x50.00.00.030.0K4-1S.Sc.o0.0hd&Sfcl0,00.00.00,00.0。口0.0a.o0.00.00.0h iisk30.00.00x0:0.00B00.00.0000.0O.D0.00,0OrOOrO0.00r00.0OrOO.Q0.00,0OrOhdisk4O.D0.0DuO0.00.0O.D0.00.0OuO0.00.0从上图可以看出,在磁盘busy达到100%的时候,其吞吐量为304.1M,I0PS为 1200。hdisk2是本地集成的SAS盘,我们可以查出本地集成SAS通道的带宽为3Gb:1 grep -i sashdislcOAvailableoo-OS-00车血条Disk Drivehd islc5000&-D0SAS RA1(? 0 SSD ArraypdiskoivAiiaUlt00500Physical 3AS丄丄d Stitt rrivt3B.3 0IvaiLHbleoo-aa-ooControl丄耳匸 SAS FrotacolAvailable00-0&-00SAS Enclosure Services Devi.cesfImoo-oa-oa-rrSAS Storage Franewcrlc ConmsissasdJtvailAbleOOI0PC7I-X266 Planar 3Gb SAS JLdaptera 对于3Gb的SAS通道,304.1M的磁盘吞吐量已经接近其I/O带宽的峰值了。需要指出的是,使用ddif测量磁盘的带宽是可行的,但是由此来确定业务I/O 的IOPS和吞吐量是不科学的。因为,ddif所发起的读写仅为顺序I/O读写, 在OLTP的业务中,这种读写是不常见的,而是随机小I/O比较多,因此,测 量业务的磁盘I/O性能,需要在运行业务的时候进行监控。nmon在系统中输入nmon,按d,可以得到如下界面:可以得到此时磁盘hdisk2吞吐量为318M。使用nmon收集一个时间段的数据,然后使用nmon analyzer进行分析,可以 得出更为直接的图表:X nmon -F OnlyFortest -s 5 -u 100将收集好的nmon文件使用nmon analyzer进行分析,得出如下报表:图2.nmon图表显示磁盘性能磁盘I/O性能调优确认磁盘I/O存在性能问题对于随机负载,当遇到余下情况时,我们那通常认为存在I/O性能问题:1. 平均读时间大于15ms2. 在具有写cache的条件下,平均写时间大于2.5ms对于顺序负载,当遇到余下情况时,我们那通常认为存在I/O性能问题:1. 在一个磁盘上有两个连续的I/O流2. 吞吐量不足(即远远小于磁盘I/O带宽)对于一块磁盘来讲,随着IOPS数量的增加,I/O service也会增加,并且会有 一个饱和点,即IOPS达到某个点以后,IOPS再增加将会引起I/O service time 的显著增加。图3.磁盘IOPS与IO service time关系图1OPSA5 lOriie rime - 15,000 RPl dik7-1 二 W ? 二二TOPS从经验上讲,我们在测试工作中,我们主要关注I0PS和吞吐量以及磁盘的 busy%这三个数值。如果I0PS和吞吐量均很低,磁盘的busy%也很低,我们 会认为磁盘压力过小,造成吞吐量和IOPS过低;只有在I0PS和吞吐量均很低, 磁盘的busy%很高(接近100%)的时候,我们才会从磁盘I/O方面分析I/O性 通过调整AIX参数改善磁盘I/O性能 在AIX系统中,有关磁盘I/O性能相关的参数我们主要调整的参数如下图:图4.AIX常见的磁盘I/O性能参数Fib日SAM 1山加殛dynlrkfc err recovFCSHDISKRMT:SMCnum cmd e!emsqueue depthalt pathingmax xfer sizemax transfer需要注意的是,下面几个参数的调整值,只是经验数值;对于不同的应用,不同 的场景,应具体情况具体分析。调整I/O队列长度 queue_depth是AIX 次可以传送到磁盘设备的命令的数量,把命令放在队列 中再传送给磁盘可以提高I/O性能。AIX中定义的每个磁盘在ODM库中都有 queue_depth属性。这个属性限制了 AIX可以传送到设备的最大命令的数量。queue_depth默认数值为4queue_depth 4 raid level0将hdisk2的队列长度从16调整为64:ro口匕凰上3:丄注匕匸工-El hdis)c2 |-i queue匕no已 ue_depxih64T-ci-kRaLwz+wmax_transfer 参数这个参数的含义是,存储driver可以向存储发的最大的I/O。通过增加 max_transfer的数值,我们可以允许VG的LTG的数值更大。这个参数我们可以从64M调整到128M。raot:at3ni3:/-1 hdisk2 -a iraxttansfern0x080000 -PbidiakE changed匸 ddtg曰j 1薛attr -Cl hdizkE |-ir ansi ernm_CCHnsiet I DxCi調QD口 I血耳unupi TRAJSSrER SizeTtueItaoi曲t苦nl聖门光纤卡num_cmd_elems参数如果是通过光纤卡连接的外置存储,可以考虑调整num_cmd_elems,这个参数的 作用是:controls maximum number of in-flight Ios这个参数的默认值为500,我们将其修改为1000:L/ trhdfV -I ftsO -ft. uutn ctod c lemd 100D -PfcsO ch&UQtdJroot&Atana:/_13attr -1igrep -i nuftctudcittusnu&_rf_eLcmXakimwof &讯皿孙 to quw to theTrue 光纤卡 max_xfer_size 参数 :attribute also controls a DMA memory area used to hold data for transfer, and at the default is 16 MB. 这个参数 是控制DMA区域的,用于保持传输的数据的的区域,它的默认值是16MB,可以 把这个数值调整成128MB,这样光纤卡的带宽会高一些rootSatsnis: 7 chdev -1 icsO -a aak zfer a izt-Ox 800000 -Pfcao changedEl色卩-1 TEAK XfCtmx xitrr siiti 0x800000 1 Tranujier SueTrueFSCSI设备对于FSCSI设备而言,我们可以通过设置参数:dyntrk和fc_err_recov来达 到路径快速切换的目的:This sets the adapters to fast fail over and reduces the amount of time required to select a new data path.# chdev -I f4C310 -a dyntrk=ye5 fc err recov-tast fail修改完毕以后,荣如下命令进行确认:# lsattr -El scsiOHour chi adapter is CONNECTED Dymutaic Track 1 nj of TC DevicesFalseTruept cat li dyntrkyesc err recovwrf ast_al(FC Fabcic Event Error RECOVERYPolicyTtuelsw e classI _Adapter SCSI IDFC Clasfs for F abr ic-fal3t Ttu亡总结 在AIX下调整磁盘I/O性能是一个相对复杂的工作,参数的数值往往是根据环 境的变化而不通。这就要求我们在熟悉磁盘I/O性能架构的基础上,灵活调整。
展开阅读全文