ooi9ioo_使用ioo,filemon,fileplace,JFS和JFS2进行调整

关于本系列

关于AIX®磁盘和I / O子系统的这个由三部分组成的系列(请参阅参考资料 )重点关注优化磁盘I / O性能的挑战。 虽然磁盘调优可以说比CPU或内存调优不那么令人兴奋,但它是优化服务器性能的关键组成部分。 实际上,部分原因是磁盘I / O是您最弱的子系统链接,与其他子系统相比,您可以做更多的事情来提高磁盘I / O性能。

本系列的第一第二部分讨论了架构系统的重要性,对系统整体性能的影响,以及新的I / O调整工具lvmo,可用于调整逻辑卷。 在本期中,您将研究如何使用ioo命令调整系统,该命令将配置所有I / O调整参数的大部分,并显示所有I / O调整参数的当前或下一个引导值。 您还将学习如何以及何时使用filemon和fileplace工具。 使用增强的日志文件系统,AIX中的默认文件系统,提高整体文件系统性能,调整文件系统以及充分利用JFS2都是调整工具包的重要组成部分。 您甚至还会检查一些文件系统属性,例如顺序访问和随机访问,它们会影响性能。

文件系统概述

本节讨论JFS2,文件系统性能以及相对于JFS的特定性能改进。 如您所知,AIX中有两种类型的内核。 有一个32位内核和一个64位内核。 虽然它们都共享一些通用库以及大多数命令和实用程序,但是了解它们之间的差异以及内核与整体性能调整之间的关系非常重要。 JFS2已针对64位内核进行了优化,而JFS已针对32位内核进行了优化。 日志文件系统虽然安全得多,但从历史上看,它已经与性能开销相关联。 在Performance Rules商店中(以可用性为代价),您将禁用元数据日志记录以提高JFS的性能。 使用JFS2,还可以禁用日志记录(在AIX 6.1和更高版本中)以帮助提高性能。 您可以在挂载文件系统时禁用日志记录,这意味着您不必担心更改或重新配置文件系统。 您可以只修改安装选项。 例如,要禁用文件系统登录,可以使用以下命令: mount -i log=NULL /database

尽管已对JFS2进行了优化,以提高元数据操作(即通常由日志记录框架处理的性能)的性能,但对于文件更改和新建/删除文件比例很高的文件系统,关闭日志记录可以显着提高性能。 例如,开发文件系统上的文件系统可能会提高性能。 对于使用的文件是静态文件的数据库,性能提升可能不太明显。

但是,您应谨慎使用压缩。 尽管压缩可以节省磁盘空间(以及磁盘读写操作,因为从磁盘物理读取或写入的数据较少),但是CPU负载较重的系统的开销实际上会降低性能。

增强的JFS2在执行inode搜索时使用二叉树表示形式,这比JFS使用的线性方法好得多。 此外,在创建文件系统时,您不再需要分配inode,因为它们现在由JFS2动态分配(这意味着您将不会用完它们)。

虽然并发I / O在本系列的第一部分中进行了介绍,但这里还值得一提。 并发I / O的实现允许多个线程同时向同一文件读取和写入数据。 这是由于使用写专有的inode锁实现JFS2的方式。 这允许多个用户同时读取同一个文件,当多个用户从同一个数据文件读取时,可以显着提高性能。 要打开并发I / O,只需要使用适当的标志挂载f / s(请参见清单1 )。 我们建议您在使用Oracle等数据库时考虑使用并发I / O。

清单1.打开并发I / O
root@lpar29p682e_pub[/] mount -o cio /test root@lpar29p682e_pub[/] > df -k /test Filesystem 1024-blocks Free %Used Iused %Iused Mounted on /dev/fslv00 131072 130724 1% 4 1% /test

表1说明了JFS2的各种增强功能以​​及它们与系统性能的关系。 同样重要的是要了解,在调整I / O系统时,许多可调项本身(稍后会介绍)有所不同,具体取决于您使用的是JFS还是JFS2。

表1. JFS2的增强
功能 JFS JFS2
压缩 没有
配额
推迟更新 没有
直接I / O支持
优化 32位 64位
文件系统最大大小 1 TB 4 PB
档案大小上限 64千兆字节 4 PB
索引节点数 在创建f / s时修复 动态
大文件支持 作为安装选项 默认
在线碎片整理
名称
DMAPI 没有

Filemon和Fileplace

本节介绍两个重要的I / O工具filemon和fileplace,并讨论如何在每天的系统管理期间使用它们。

Filemon使用跟踪工具报告物理和逻辑存储(包括实际文件)的I / O活动。 监视的I / O活动基于运行跟踪时指定的时间间隔。 它报告文件系统利用率的所有层,包括逻辑卷管理器(LVM),虚拟内存和物理磁盘层。 没有任何标志,它在运行和监视应用程序或系统命令时在后台运行。 跟踪自动开始,直到停止。 那时,该命令将生成I / O活动报告并退出。 它还可以处理由跟踪工具记录的跟踪文件。 然后可以从该文件生成报告。 因为生成到标准输出的报告通常会滚动到屏幕之外,所以建议您使用-o选项将输出写入文件(请参见清单2 )。

清单2.将filemon与-o选项一起使用
l488pp065_pub[/] > filemon -o dbmon.out -O all Run trcstop command to signal end of trace. Thu Aug 12 09:07:06 2010 System: AIX 7.1 Node: l488pp065_pub Machine: 00F604884C00 l488pp065_pub[/] > trcstop l488pp065_pub[/] > cat dbmon.out Thu Aug 12 09:10:09 2010 System: AIX 7.1 Node: l488pp065_pub Machine: 00F604884C00 Cpu utilization: 72.8% Cpu allocation: 100.0% 21947755 events were lost. Reported data may have inconsistencies or errors. Most Active Files ------------------------------------------------------------------------ #MBs #opns #rds #wrs file volume:inode ------------------------------------------------------------------------ 0.4 1 101 0 unix /dev/hd2:82241 0.0 9 10 0 vfs /dev/hd4:9641 0.0 4 6 1 db.sql 0.0 3 6 2 ksh.cat /dev/hd2:111192 0.0 1 2 0 cmdtrace.cat /dev/hd2:110757 0.0 45 1 0 null 0.0 1 1 0 dd.cat /dev/hd2:110827 0.0 9 2 0 SWservAt /dev/hd4:9156 0.0 1 0 3 db2.sql 0.0 9 2 0 SWservAt.vc /dev/hd4:9157 Most Active Segments ------------------------------------------------------------------------ #MBs #rpgs #wpgs segid segtype volume:inode ------------------------------------------------------------------------ 0.1 2 13 8359ba client Most Active Logical Volumes ------------------------------------------------------------------------ util #rblk #wblk KB/s volume description ------------------------------------------------------------------------ 0.04 0 32 0.3 /dev/hd9var /var 0.00 0 48 0.5 /dev/hd8 jfs2log 0.00 0 8 0.1 /dev/hd4 / Most Active Physical Volumes ------------------------------------------------------------------------ util #rblk #wblk KB/s volume description ------------------------------------------------------------------------ 0.00 0 72 0.7 /dev/hdisk0 N/A Most Active Files Process-Wise ------------------------------------------------------------------------ #MBs #opns #rds #wrs file PID(Process:TID) ------------------------------------------------------------------------ 0.0 3 6 0 db.sql 7667828(ksh:9437345) 0.0 1 2 0 ksh.cat 7667828(ksh:9437345) 0.0 1 0 3 db2.sql 7667828(ksh:9437345) 0.0 1 0 1 db.sql 7733344(ksh:7405633) 0.4 1 101 0 unix 7667830(ksh:9437347) 0.0 1 2 0 cmdtrace.cat 7667830(ksh:9437347) 0.0 1 2 0 ksh.cat 7667830(ksh:9437347) 0.0 9 2 0 SWservAt 7667830(ksh:9437347) 0.0 9 2 0 SWservAt.vc 7667830(ksh:9437347) 0.0 1 0 0 systrctl 7667830(ksh:9437347) 0.0 44 0 44 null 4325546(slp_srvreg:8585241) 0.0 1 2 2 ksh.cat 7667826(ksh:23527615) 0.0 1 1 0 dd.cat 7667826(ksh:23527615) 0.0 1 1 0 null 7667826(ksh:23527615) 0.0 1 0 0 test 7667826(ksh:23527615) 0.0 8 8 0 vfs 3473482(topasrec:13566119) 0.0 1 0 0 CuAt.vc 3473482(topasrec:13566119) 0.0 1 0 0 CuAt 3473482(topasrec:13566119) 0.0 1 2 0 vfs 2097252(syncd:2490503) 0.0 1 0 0 installable 4260046(java:15073489) Most Active Files Thread-Wise ------------------------------------------------------------------------ #MBs #opns #rds #wrs file TID(Process:PID) ------------------------------------------------------------------------ 0.0 3 6 0 db.sql 9437345(ksh:7667828) 0.0 1 2 0 ksh.cat 9437345(ksh:7667828) 0.0 1 0 3 db2.sql 9437345(ksh:7667828) 0.0 1 0 1 db.sql 7405633(ksh:7733344) 0.4 1 101 0 unix 9437347(ksh:7667830) 0.0 1 2 0 cmdtrace.cat 9437347(ksh:7667830) 0.0 1 2 0 ksh.cat 9437347(ksh:7667830) 0.0 9 2 0 SWservAt 9437347(ksh:7667830) 0.0 9 2 0 SWservAt.vc 9437347(ksh:7667830) 0.0 1 0 0 systrctl 9437347(ksh:7667830) 0.0 44 0 44 null 8585241(slp_srvreg:4325546) 0.0 1 2 2 ksh.cat 23527615(ksh:7667826) 0.0 1 1 0 dd.cat 23527615(ksh:7667826) 0.0 1 1 0 null 23527615(ksh:7667826) 0.0 1 0 0 test 23527615(ksh:7667826) 0.0 8 8 0 vfs 13566119(topasrec:3473482) 0.0 1 0 0 CuAt.vc 13566119(topasrec:3473482) 0.0 1 0 0 CuAt 13566119(topasrec:3473482) 0.0 1 2 0 vfs 2490503(syncd:2097252) 0.0 1 0 0 installable 15073489(java:4260046) dbmon.out: END

寻找较长的查找时间,因为它们可能导致应用程序性能下降。 通过详细查看读写序列计数,可以进一步确定访问是顺序访问还是随机访问。 该在需要进行I / O调整时为您提供帮助。 此输出清楚地表明没有可见的I / O瓶颈。 Filemon提供了大量信息,而实际上,我们发现有时信息太多。 此外,使用filemon可能会降低性能,具体取决于filemon运行时有多少常规文件活动。 让我们看一下运行filemon时的topas结果(参见图1 )。

图1.运行filemon时的topas结果
运行filemon时的topaz结果

在上图中,filemon占用了近60%的CPU! 这实际上比以前的AIX版本要少,但是仍然对您的整体系统性能有重大影响。 我们通常不建议使用开销如此大的性能工具,因此我们重申,尽管filemon确实有其用途,但在使用它时需要非常小心。

那文件位置呢? Fileplace报告文件块在文件系统中的位置。 它通常用于检查和评估文件在磁盘上的放置效率。 您将其用于什么目的? 原因之一是可以帮助确定一些使用率很高的文件是否实质上是碎片化的。 它还可以帮助您确定利用率最高的物理卷,以及驱动器或I / O适配器是否引起了瓶颈。

让我们看一下清单3中一个经常访问的文件的示例。

清单3.经常访问的文件
fileplace -pv /tmp/logfile File: /tmp/logfile Size: 63801540 bytes Vol: /dev/hd3 Blk Size: 4096 Frag Size: 4096 Nfrags: 15604 Inode: 7 Mode: -rw-rw-rw- Owner: root Group: system Physical Addresses (mirror copy 1) Logical Extent ---------------------------------- ---------------- 02884352-02884511 hdisk0 160 frags 655360 Bytes, 1.0% 00000224-00000383 02884544-02899987 hdisk0 15444 frags 63258624 Bytes, 99.0% 00000416-00015859 unallocated -27 frags -110592 Bytes 0.0% 15604 frags over space of 15636 frags: space efficiency = 99.8% 2 extents out of 15604 possible: sequentiality = 100.0%

您应该在这里对空间效率和顺序感兴趣。 更高的空间效率意味着文件碎片更少,并提供了更好的顺序文件访问。 较高的顺序性告诉您文件分配得更连续,这对于顺序文件访问也将更好。 在这种情况下,顺序效率很高时,空间效率可能会更高。 如果空间和顺序太小,则可能要考虑文件系统重组。 您可以使用reorgvg命令执行此操作,该命令可以提高逻辑卷的利用率和效率。 您可能还需要考虑使用degrafs命令,该命令可以帮助确保文件系统上的可用空间是连续的,这将有助于以后的写入和文件创建。 使用系统时,可能会在后台进行碎片整理。

用ioo调优

本节讨论ioo命令的用法,该命令实际上用于所有与I / O相关的调整参数。

vmo一样,更改ioo参数时也需要格外小心,因为动态更改参数会导致严重的性能下降。 表2详细列出了您经常用于JFS文件系统的特定调整参数。 如您所见,大多数I / O调整命令都使用了ioo实用程序。

表2.特定的调整参数
功能 JFS调整参数 增强的JFS调整参数
设置用于缓存文件的最大内存量 vmo -o maxperm=value vmo -o maxclient=value (<或= maxperm)
设置用于缓存的最小内存量 vmo -o minperm=value 不适用
设置用于缓存的内存限制(硬) vmo -o strict_maxperm vmo -o maxclient (硬限制)
设置用于顺序预读的最大页面数 ioo -o maxpgahead=value ioo -o j2_maxPageReadAhead=value
设置用于顺序预读的最小页面 ioo -o minpgahead ioo -o j2_minPageReadAhead=value
设置文件的挂起写I / O的最大数量 chhdev -l sys0 -a maxpout maxpout chdev -l sys0 -a maxpout maxpout
设置文件的挂起写入I / O的最小数量,该文件可能会被maxpout阻止 chdev -l sys0 -a minpout minpout chdev -l sys0 -a minpout minpout
设置随机写入文件的修改后的数据缓存量 ioo -o maxrandwrt=value ioo -o j2_maxRandomWrite ioo -o j2_nRandomCluster
控制I / O的收集以进行顺序写回 ioo -o numclust=value ioo -o j2_nPagesPerWriteBehindCluster=value
设置f / s bufstruct的数量 ioo -o numfsbufs=value ioo -o j2_nBufferPerPagerDevice=value

让我们在下面进一步讨论一些更重要的参数,因为我们已经讨论了内存调整系列中的所有vmo调整参数(请参阅参考资料 )。

有几种方法可以确定系统上现有的ioo值。 ioo的长显示清单显然为您提供了最多的信息(请参见清单4 )。 它列出了ioo管理的所有可调参数的当前值,重新引导值,范围,单位,类型和依赖性。

清单4. ioo的显示
root@lpar29p682e_pub[/] > ioo -L NAME CUR DEF BOOT MIN MAX UNIT TYPE DEPENDENCIES j2_atimeUpdateSymlink 0 0 0 0 1 boolean D j2_dynamicBufferPreallo 16 16 16 0 256 16K slabs D j2_inodeCacheSize 400 400 400 1 1000 D j2_maxPageReadAhead 128 128 128 0 64K 4KB pages D j2_maxRandomWrite 0 0 0 0 64K 4KB pages D j2_maxUsableMaxTransfer 512 512 512 1 4K pages M j2_metadataCacheSize 400 400 400 1 1000 D j2_minPageReadAhead 2 2 2 0 64K 4KB pages D j2_nBufferPerPagerDevice 512 512 512 512 256K M j2_nPagesPerWriteBehindC 32 32 32 0 64K D j2_nRandomCluster 0 0 0 0 64K 16KB clusters D j2_nonFatalCrashesSystem 0 0 0 0 1 boolean D j2_syncModifiedMapped 1 1 1 0 1 boolean D j2_syncdLogSyncInterval 1 1 1 0 4K iterations D jfs_clread_enabled 0 0 0 0 1 boolean D jfs_use_read_lock 1 1 1 0 1 boolean D lvm_bufcnt 9 9 9 1 64 128KB/buffer D maxpgahead minpgahead 8 8 8 0 4K 4KB pages D maxrandwrt 0 0 0 0 512K 4KB pages D memory_frames 512K 512K 4KB pages S Minpgahead maxpgahead 2 2 2 0 4K 4KB pages D numclust 1 1 1 0 2G-1 16KB/cluster D numfsbufs 196 196 196 1 2G-1 M pd_npages 64K 64K 64K 1 512K 4KB pages D pgahd_scale_thresh 0 0 0 0 419430 4KB pages D pv_min_pbuf 512 512 512 512 2G-1 D sync_release_ilock 0 0 0 0 1 boolean D n/a means parameter not supported by the current platform or kernel Parameter types: S = Static: cannot be changed D = Dynamic: can be freely changed B = Bosboot: can only be changed using bosboot and reboot R = Reboot: can only be changed during reboot C = Connect: changes are only effective for future socket connections M = Mount: changes are only effective for future mountings I = Incremental: can only be incremented d = deprecated: deprecated and cannot be changed

下面的清单5显示了如何更改可调参数。

清单5.更改可调参数
root@lpar29p682e_pub[/] > ioo -o maxpgahead=32 Setting maxpgahead to 32 root@lpar29p682e_pub[/] >

此参数仅用于JFS。 对于JSF2,还有其他文件系统性能增强,包括顺序页面预读和顺序和随机写回。 AIX的虚拟内存管理器(VMM)预期用于观察所访问文件模式的页面要求。 当程序访问文件的两个页面时,VMM假定该程序继续尝试以顺序方法访问文件。 可以使用VMM阈值配置要预读的页数。 使用JFS2,请注意以下两个重要参数:

  • J2_minPageReadAhead :确定VMM最初检测到顺序模式时前面的页面数。
  • J2_maxPageReadAhead :确定VMM在顺序文件中可以读取的最大页面数。

顺序和随机后写与达到一定阈值后将内存中的已修改页面写入磁盘有关。 这样,它无需等待syncd即可将页面刷新到磁盘。 这样做的原因是为了限制内存中的脏页数量,这进一步减少了I / O开销和磁盘碎片。 后面写的两种类型是顺序写和随机写。 后面进行顺序写操作时,页面不会保留在内存中,直到syncd守护程序运行为止,这可能会导致真正的瓶颈。 进行随机写后,内存中的页面数超过了指定数量,并且所有后续页面均被写入磁盘。

对于顺序写入,您应指定要计划写入的页面数; j2_nPagesPerWriterBehindCluster参数指定此参数。 默认情况下,该值为32(即128KB),对于现代磁盘和高写入环境(例如数据库),您可能需要增加此参数,以便在需要将数据同步到时将更多数据写入单个块中。磁盘。

可以通过更改j2_nRandomClusterj2_maxRandomWrite的值来配置随机后写。 j2_maxRandomWrite参数指定允许保留在内存中的文件的页数。 默认值为0(表示信息尽快写出),用于确保数据完整性。 如果您愿意在系统发生故障时牺牲某些完整性,则可以提高这些值来获得更好的写入性能。 这会将它们保留在缓存中,因此系统故障可能无法将数据正确写入磁盘。 j2_nRandomCluster定义了两次写入之间的簇数,必须将其视为随机数。 如果同时修改大量文件,则增加此值可以降低写入频率。

另一个值得一提的重要领域是大型顺序I / O处理。 当文件系统的同步I / O过多时,I / O可能会在f / s级别上成为瓶颈。 在这种情况下,应增加j2_nBufferPerPagerDevice参数(带JFS的numfsbus)。 如果使用原始I / O而不是文件系统,则LVM可能会出现这种类型的瓶颈。 在这里您可能要调整lvm_bufcnt参数。

摘要

本文重点介绍文件系统性能。 您检查了JFS2中的增强功能以​​及为什么它将成为首选的文件系统。 此外,您还使用了诸如filemon和fileplace之类的工具来收集有关实际文件结构以及它们与I / O性能的关系的更多详细信息。 最后,您使用ioo命令调整了I / O子系统。 您了解了J2_minPageReadAheadJ2_maxPageReadAhead参数,以便在遇到顺序I / O时提高性能。

在这个由三部分组成的有关I / O的系列文章中,您了解到,也许比其他任何子系统都更重要,您的调优必须在对系统进行压力测试之前开始。 与调整I / O参数可以做的一切一样,正确地设计系统可以提高性能。 这包括战略性的磁盘放置,并确保您有足够的适配器来处理磁盘的吞吐量。 此外,尽管本系列文章主要介绍I / O,但要了解VMM也与I / O性能紧密相关,并且还必须进行调整以使其获得最佳I / O性能。


翻译自: https://www.ibm.com/developerworks/aix/library/au-aix7optimize3/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值