WEB开发网
开发学院操作系统Linux/Unix AIX 5L 磁盘性能优化: 第 3 部分 阅读

AIX 5L 磁盘性能优化: 第 3 部分

 2008-09-06 08:21:04 来源:WEB开发网   
核心提示:关于本系列本系列共有三篇文章(请参见参考资料),介绍了 AIX® 磁盘和 I/O 子系统,AIX 5L 磁盘性能优化: 第 3 部分,重点关注于在优化磁盘 I/O 性能时的各种挑战,尽管磁盘优化很可能没有 CPU 或者内存优化那么激动人心,但也说明了 VMM 与 I/O 性能紧密相连,并且必须对其进行相应的优化

关于本系列

本系列共有三篇文章(请参见参考资料),介绍了 AIX® 磁盘和 I/O 子系统,重点关注于在优化磁盘 I/O 性能时的各种挑战。尽管磁盘优化很可能没有 CPU 或者内存优化那么激动人心,但它是优化服务器性能的关键部分。事实上,其中部分原因是因为磁盘 I/O 是最薄弱的子系统环节,与任何其他子系统相比,您可以执行更多的操作以提高磁盘 I/O 性能。

引言

本系列文章的第 1 部分和第 2 部分讨论了设计系统体系结构的重要性,它对整体系统性能所产生的影响,以及一个新的 I/O 优化工具 lvmo,您可以使用该工具对逻辑卷进行优化。在这个部分中,将研究如何使用 ioo 命令优化您的系统,该命令可以对大多数 I/O 优化参数进行配置,并显示所有 I/O 优化参数当前或者下一次的启动值。同时,还将介绍如何以及何时使用 filemon 和 fileplace 工具(这些特定的 AIX 工具应该是您的技能库中重要的部分)、如何提高您的整体文件系统性能、如何优化您的文件系统,以及增强的日志记录文件系统 (JFS2) 与日志记录文件系统 (JFS) 相比有什么不同。您甚至还将研究一些文件系统属性,如顺序访问和随机访问,它们都可能对性能产生影响。

文件系统概述

这个部分将讨论 JFS2、文件系统性能,以及对 JFS 所做的特定性能改进。正如您所知道的,在 AIX 中有两种类型的内核。它们分别是 32 位内核和 64 位内核。尽管它们之间共享了一些常用的库、大多数的命令及实用工具,但了解它们之间的区别以及内核与整体性能优化之间的关系,这一点是非常重要的。JFS2 为 64 位内核进行了优化,而 JFS 则为 32 位内核进行了优化。日记记录的文件系统可以提供更高的安全性,但在以前,往往会带来性能方面的开销。在选择相关的性能规则(以牺牲可用性为代价)时,为了使 JFS 提高性能,您可能会禁用元数据日志记录功能。就 JFS2 而言,这种情况不再可能发生,甚至不再需要,因为已经对它进行了优化,以便更加高效地处理元数据密集型的应用程序。更重要的一点是,JFS2 的关键优势在于其扩展能力。使用 JFS,单个文件最大不能超过 64GB。而使用 JFS2,您可以拥有一个 16TB 的文件。另一个重大变化是目录组织方式的更改。增强的 JFS2 在执行索引节点搜索的时候使用二叉树的表示形式,与 JFS 使用的线性方法相比,这种方法要好得多。而且,在创建文件系统的时候您不再需要分配索引节点,因为现在它们是由 JFS2 动态分配的,这意味着将不会耗尽索引节点。尽管在本系列文章的第 1 部分中已经介绍了并发 I/O(请参见参考资料),但在这里有必要再次提及这个内容。并发 I/O 的实现允许多个线程并发地对同一个文件进行读写数据的操作。这是由于在实现 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 的增强功能

功能JFSJFS2
压缩
配额
延迟的更新
直接 I/O 支持
优化32 位64 位
最大文件系统大小1 TB4 PB
最大文件大小64 GB4 PB
索引节点的数目在创建 f/s 时确定动态的
大文件支持作为装入选项缺省
联机碎片整理
Namefs
DMAPI

filemon 和 fileplace

这个部分将介绍两个重要的 I/O 工具,filemon 和 fileplace,并讨论如何在日常系统管理工作中使用它们。

filemon 使用了一种跟踪工具来报告物理和逻辑存储(包括您的实际文件)的 I/O 活动。根据在运行跟踪工具时指定的时间间隔,对 I/O 活动进行监视。它将报告所有文件系统层次的使用率,包括逻辑卷管理器 (LVM)、虚拟内存和物理磁盘层。如果不使用任何标志,那么当要进行监视的应用程序或者系统命令运行时,它将在后台运行。跟踪工作将自动启动,直到停止该命令为止。此时,命令将生成 I/O 活动报告,然后退出。它还可以处理由跟踪工具所记录的跟踪文件。然后,可以由该文件生成报告。因为对标准输出生成的报告通常会在您的屏幕中一滚而过,所以我们建议您使用 -o 选项,以便将该输出写入到一个文件(请参见清单 2)。

清单 2. 使用带 -o 选项的 filemon

root@lpar29p682e_pub[/] > filemon -o dbmon.out -O all
Run trcstop command to signal end of trace.
Sun Aug 19 17:47:34 2007
System: AIX 5.3 Node: lpar29p682e_pub Machine: 00CED82E4C00
root@lpar29p682e_pub[/] > trcstop
[filemon: Reporting started]
root@lpar29p682e_pub[/] > [filemon: Reporting completed]
[filemon: 73.906 secs in measured interval]
root@lpar29p682e_pub[/] >
When we look at our file, here is what we see:
Sun Aug 19 17:50:45 2007
System: AIX 5.3 Node: lpar29p682e_pub Machine: 00CED82E4C00
Cpu utilization: 68.2%
Cpu allocation:  77.1%
130582780 events were lost. Reported data may have inconsistencies or errors.
Most Active Files
------------------------------------------------------------------------
 #MBs #opns  #rds  #wrs file           volume:inode
------------------------------------------------------------------------
  0.3   1   70   0 unix           /dev/hd2:38608
  0.0   9   11   0 vfs           /dev/hd4:949
  0.0   2   4   0 ksh.cat         /dev/hd2:58491
  Most Active Segments
------------------------------------------------------------------------
 #MBs #rpgs #wpgs segid segtype         volume:inode
------------------------------------------------------------------------
  0.6   0  162  223b9 client
 
Most Active Logical Volumes
------------------------------------------------------------------------
 util #rblk #wblk  KB/s volume          description
------------------------------------------------------------------------
 0.25   0  120  0.2 /dev/hd8         jfs2log
 0.00   0  1304  2.7 /dev/hd4         /
 
------------------------------------------------------------------------
Detailed File Stats
------------------------------------------------------------------------
FILE: /unix volume: /dev/hd2 inode: 38608
opens:         1
total bytes xfrd:    286720
reads:         70   (0 errs)
 read sizes (bytes):  avg 4096.0 min  4096 max  4096 sdev   0.0
 read times (msec):  avg  0.003 min  0.002 max  0.005 sdev  0.001
lseeks:         130
------------------------------------------------------------------------
Detailed VM Segment Stats  (4096 byte pages)
------------------------------------------------------------------------
SEGMENT: 223b9 segtype: client
segment flags:     clnt
writes:         162   (0 errs)
 write times (msec):  avg  1.317 min  0.369 max  1.488 sdev  0.219
 write sequences:   5
 write seq. lengths:  avg  32.4 min    1 max   64 sdev  20.8
------------------------------------------------------------------------
Detailed Logical Volume Stats  (512 byte blocks)
------------------------------------------------------------------------
VOLUME: /dev/hd8 description: jfs2log
writes:         15   (0 errs)
 write sizes (blks):  avg   8.0 min    8 max    8 sdev   0.0
 write times (msec):  avg  0.389 min  0.287 max  1.277 sdev  0.250
 write sequences:   11
 write seq. lengths:  avg  10.9 min    8 max   24 sdev   5.1
seeks:         11   (73.3%)
Detailed Physical Volume Stats  (512 byte blocks)
------------------------------------------------------------------------
VOLUME: /dev/hdisk0 description: Virtual SCSI Disk Drive
writes:         33   (0 errs)
 write sizes (blks):  avg  45.3 min    8 max   256 sdev  82.7
 write times (msec):  avg  0.544 min  0.267 max  1.378 sdev  0.370
 write sequences:   26
 write seq. lengths:  avg  57.5 min    8 max   512 sdev  122.6
seeks:         26   (78.8%)
 seek dist (blks):   init 17091584,
            avg 913560.3 min    8 max 3940256 sdev 1431025.7
 seek dist (%tot blks):init 40.74951,
            avg 2.17810 min 0.00002 max 9.39430 sdev 3.41183
time to next req(msec): avg 6369.624 min  0.051 max 120046.794 sdev 23589.450
throughput:       3.1 KB/sec
utilization:      0.00

您可以在输出结果中查找较长的寻道时间,因为它们可能会导致应用程序性能降低。通过仔细地观察读写序列的计数,您可以更深入地确定该访问是顺序访问还是随机访问。当进行 I/O 优化的时候,该信息可以为您提供帮助。该输出清楚地说明了这里不存在任何 I/O 瓶颈。filemon 可以提供大量的信息,事实上,我常常发现它所提供的信息太多了。而且,在使用 filemon 时可能带来很大的性能损失。让我们来看一下,在运行 filemon(请参见图 1)时,topaz 的结果。

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

AIX 5L 磁盘性能优化: 第 3 部分

在这个示例中,filemon 几乎占据了 96% 的 CPU!通常,我不推荐使用带来如此巨大开销的性能工具,所以我要重申一下,尽管 filemon 的确有其用武之处,但您在使用它的时候仍需非常小心。

fileplace 又如何呢?fileplace 可以报告文件块在文件系统中的位置。它通常用于检查和评估文件在磁盘中的放置位置的效率。为什么要使用它呢?其中一个原因是,它可以帮助您确定对于一些经常使用的文件,是否存在大量的碎片。它还可以帮助您确定最高使用率的物理卷,确定驱动器或者 I/O 适配器是否导致了瓶颈的发生。

让我们来看看清单 3 中的示例,这是一个频繁访问的文件。

清单 3. 频繁访问的文件

root@lpar29p682e_pub[/] > fileplace -pv dbfile
File: dbfile Size: 5374622 bytes Vol: /dev/hd4
Blk Size: 4096 Frag Size: 4096 Nfrags: 1313
Inode: 21 Mode: -rw-r--r-- Owner: root Group: system
 Physical Addresses (mirror copy 1)                 Logical Extent
 ----------------------------------                 ----------------
 02134816-02134943 hdisk0   128 frags  524288 Bytes,  9.7%  00004352-00004479
 02135680-02136864 hdisk0   1185 frags  4853760 Bytes, 90.3%  00005216-00006400
 1313 frags over space of 2049 frags:  space efficiency = 64.1%
 2 extents out of 1313 possible:  sequentiality = 99.9%

此时,您应该关注空间效率 (space efficiency) 和顺序性 (sequentiality)。较高的空间效率意味着文件出现较少的碎片,并且提供更好的顺序文件访问。较高的顺序性意味着文件的分配具有更高的连续性,当然这对于顺序文件访问更加有利。在这个示例中,当顺序性很高的时候,空间效率将会更好。如果空间效率和顺序性都很低,那么您可能会希望重组该文件系统。您可以使用 reorgvg 命令来进行重组,该命令可以提高逻辑卷的使用率和效率。

使用 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。接下来的部分将适用于 JFS2。

一些重要的、JFS2 特定的文件系统的性能增强功能包括,提前顺序页面读取和延迟顺序、随机写入。通过观察文件的访问模式,AIX 的虚拟内存管理器(Virtual Memory Manager,VMM)可以预测页面需求。当程序访问一个文件的两个页面时,VMM 假定该程序将采用顺序的方法不断地尝试访问该文件。可以使用 VMM 阈值来配置将要提前读取的页面数目。对于 JFS2,记录下面这两个重要参数:

J2_minPageReadAhead:这个参数用于确定当 VMM 最初检测到顺序模式时提前读取的页面数目。

J2_maxPageReadAhead:这个参数用于确定 VMM 可以在一个顺序文件中读取页面的最大数量。

延迟的顺序和随机写操作,与将内存中经过修改的页面写入到磁盘的操作(达到某个阈值之后)相关。采用这种方式,它无需等待 syncd 将页面写入到磁盘。这是因为限制了内存中“脏”页面的数量,从而进一步地降低了 I/O 开销和磁盘碎片。延迟的写操作有两类,顺序写入和随机写入。使用延迟的顺序写操作,页面并不保存在内存中,直到 syncd 守护进程运行,这可能会导致实际的瓶颈。使用延迟的随机写操作,当内存中的页面数量超过指定的数量,则将所有后续的页面写入到磁盘。另一个值得一提的重要领域是大量的顺序 I/O 处理。当对您的文件系统同时进行大量 I/O 操作的时候,可能会在 f/s 级出现 I/O 瓶颈。在这种情况下,您应该增大 j2_nBufferPerPagerDevice 参数(如果是使用 JFS 的话,那就是 numfsbus 参数)。如果您使用的是原始 I/O 而不是文件系统,那么相同类型的瓶颈可能通过 LVM 出现。而这正是您可能希望优化 lvm_bufcnt 参数的地方。

总结

本文重点关注于文件系统的性能。您研究了 JFS2 中的各种增强功能,以及为什么将其作为首选的文件系统。而且,您使用了一些相关的工具,如 filemon 和 fileplace,以收集更多关于实际文件结构、它们与 I/O 性能之间关系的详细信息。最后,您使用 ioo 命令优化了您的 I/O 子系统。您了解了 J2_minPageReadAhead 和 J2_maxPageReadAhead 参数,它们可以在碰到顺序 I/O 的情况下用于提高性能。

本系列共有三篇关于 I/O 的文章,在您学习本系列期间,也许比在任何其他子系统中学习到了更多的内容,您必须在对系统进行压力测试之前开始进行优化。与使用优化 I/O 参数进行各种工作相比,正确地设计系统体系结构,可以更好地提高性能。这包括策略性磁盘位置,并确保您拥有足够多的适配器以处理磁盘的吞吐量。而且,尽管本系列文章重点关注于 I/O,但也说明了 VMM 与 I/O 性能紧密相连,并且必须对其进行相应的优化,以实现最佳的 I/O 性能。

Tags:AIX 磁盘 性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接