免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: lmtwl

[存储备份] AIX 5L 网络性能&CPU&内存&磁盘优化(转IBM) [复制链接]

论坛徽章:
0
发表于 2008-06-13 12:04 |显示全部楼层

磁盘

AIX 5L 磁盘性能优化: 第 1 部分
引言
磁盘 I/O 优化的关键部分涉及到在构建您的系统之前实现相关的最佳实践。因为当您已经启动并处于运行状态时,很难再对数据进行移动,所以在规划您的磁盘和 I/O 子系统环境时,需要在第一次就正确地完成这项任务,这一点是非常重要的。这包括物理体系结构、逻辑磁盘排列,以及逻辑卷和文件系统配置。
当系统管理员听到可能出现了磁盘争用的问题时,他或她首先将会求助 iostat。iostat 等同于使用 vmstat 提供有关内存的报告,它是获得有关您的 I/O 子系统的当前运行情况概述的一种快速而原始的方法。尽管运行 iostat 并不是一种完全不合理的“膝跳反应”,但是很早就应该着手考虑磁盘 I/O 的问题,而不是等到必须进行优化工作的时候。如果从一开始就没有正确地为您的环境配置磁盘,那么任何优化工作都无法提供帮助。而且,有一点非常重要,需要了解磁盘 I/O 的详细信息,以及它与 AIX® 及您的 System p™ 硬件之间的关系。
就磁盘 I/O 优化而言,特定的 AIX 工具和实用工具比通用的 UNIX® 命令和工具能够提供更多的帮助,因为它们的任务就是帮助您优化本机 AIX 磁盘 I/O 子系统。本文定义和介绍了 AIX I/O 栈,并将其与磁盘性能的物理和逻辑方面关联起来。本文介绍了直接、并发和异步 I/O:它们是什么,如何启用它们,以及如何监视和优化它们。本文还介绍了一些长期监视工具,您应该使用它们来帮助优化您的系统。听到 iostat 并不是一种推荐的、帮助您长期收集统计数据的工具,您可能会感到奇怪。
最后,本文继续强调一点,无论您希望优化哪个子系统,始终应该将系统优化看作一个持续的过程。开始对系统进行监视的最佳时间是当您首次将系统应用到生产环境中并且正常运行时,而不是等到用户抱怨系统的性能非常糟糕的时候。您需要在系统正常运行的时候建立系统运行状态的基准,以便在可能不正常运行的情况下对数据进行分析。在对您的 I/O 子系统进行更改时,一次仅进行一项更改,以便能够准确地评估这项更改所带来的影响。为了评估其影响,您将使用本文中推荐的一种长期监视工具来捕获数据。
磁盘 I/O 概述
这个部分提供了磁盘 I/O 与 AIX 之间的关系的概述。本部分介绍了 I/O(设备驱动器和适配器)的物理方面、AIX I/O 栈,以及一些相关概念(如直接、并发和异步 I/O)。还介绍了 I/O 处理速率调整的概念,以及 iostat 的一些最新改进,以便帮助您监视 AIX 服务器。
您应该很清楚,对于运行任何程序来说,最慢的操作实际上是花费在检索磁盘中数据上的时间。这种情况主要是因为 I/O 的物理组件。实际的磁臂必须找到正确的柱面,控制部分需要访问正确的块,并且磁头必须等到这些块旋转到磁头下面。在对系统进行任何优化活动之前,首先应该了解您的 I/O 系统的物理体系结构,因为如果您所设计的 I/O 子系统非常糟糕,并且其中包含慢速磁盘,或者适配器的使用非常低效,那么任何优化工作都无法提供帮助。
图 1 清楚地阐释了物理 I/O 组件与逻辑磁盘及其应用程序 I/O 之间非常紧密地关联在一起。这正是通常将其称为 AIX I/O 栈的原因。

图 1. AIX I/O 栈

在进行优化工作时,您需要了解所有的层次,因为它们分别以不同的方式对性能产生影响。在第一次设置您的系统时,对于磁盘的配置,可以从底层(物理层)开始,然后是设备层、逻辑卷、文件系统、文件和应用程序。规划您的物理存储环境是非常重要的,这一点无论怎样强调都不为过。这涉及到确定磁盘的数量、类型(速度)、大小和吞吐量。关于存储技术需要注意的一项重要挑战是,尽管磁盘存储功能得到了极大的改进,但是磁盘的旋转速度却没有太大的提高。您必须清楚这样的一个事实,RAM 访问仅需要 540 个 CPU 周期,而磁盘访问则需要花费 20,000,000 个 CPU 周期。很明显,系统中最薄弱的环节就是磁盘 I/O 存储系统,并且作为系统管理员,您的任务是确保它不会成为更严重的瓶颈。如前所述,与任何可调整的 I/O 参数相比,糟糕的数据布局将会给 I/O 性能带来更大的影响。查看 I/O 栈可以帮助您理解这一点,因为逻辑卷管理器(Logical Volume Manager,LVM)和磁盘布置要比优化参数(ioo 和 vmo)更接近于底层。
现在,让我们来介绍数据布局的一些最佳实践。一个重要的概念是,请确保您的数据均匀地分布在整个物理磁盘中。如果您的数据仅位于几个轴,那么使用多个逻辑单元号 (LUN) 或者物理磁盘又有什么实际意义呢?如果您使用了 SAN 或者其他类型的存储阵列,那么您应该尝试在创建阵列时使它们具有相同的大小和类型。您还应该在创建它们时,为每个阵列使用一个 LUN,然后将所有的逻辑卷分散到您的卷组中所有的物理卷。如前所述,应该在首次配置您的系统时完成这项工作,因为修复 I/O 问题要比内存或者 CPU 问题更加困难,特别是当它涉及到在生产环境中对数据进行移动时。您还应该确保镜像位于不同的磁盘和适配器。数据库提出了不同的、独特的要求,如果可能,您的索引和重做日志也应该位于不同的物理磁盘。对于经常用于执行排序操作的临时表空间,也应该这样。再回到物理设备方面。使用高速适配器连接磁盘驱动器,这一点是非常重要的,但是您必须确保该总线本身不会成为一个瓶颈。要防止这种情况发生,请确保将适配器分散到多个总线。同时,不要将过多的物理磁盘或者 LUN 连接到任何一个适配器,因为这样做也会对性能产生极大的影响。您配置的适配器越多越好,特别是在大量磁盘的利用率都很高的情况下。您还应该确保设备驱动程序支持多路径 I/O (MPIO),它支持 I/O 子系统的负载平衡和可用性。
直接 I/O
让我们回到前面提到的一些概念,如直接 I/O。那么,什么是直接 I/O?它在 AIX Version 4.3 中首次引入,这种 I/O 方法不经过虚拟内存管理器(Virtual Memory Manager,VMM),从用户缓冲区直接与磁盘进行数据传输。根据您的应用程序的类型,在实现这种技术时可以提高性能。例如,那些具有糟糕的缓存使用率的文件,是使用直接 I/O 的很好的候选对象。直接 I/O 还可以提高那些使用同步写入操作的应用程序的效率,因为这些写入操作的对象是磁盘。直接 I/O 降低了CPU 使用率,这是因为消除了双重数据副本。将磁盘的数据复制到缓冲区缓存,然后再复制文件数据时会出现多余的副本。直接 I/O 的一个主要性能开销是,尽管它可以降低 CPU 使用率,但是它可能导致进程长时间等待较小请求的完成。请注意,这种方式适用于在磁盘上具有持久存储位置的持久段文件。当使用 IBM Enhanced Journaled File System for AIX 5L™ (JFS2) 不通过直接 I/O 访问文件时,文件作为本地页面缓存,并且将数据复制到 RAM 中。直接 I/O 可以在许多方面为您提供与使用原始逻辑卷类似的性能,同时还保留了使用 JFS 文件系统的优点(例如,易于管理)。在使用直接 I/O 装入文件系统时,您应该避免使用支持大文件的 JFS 文件系统。
并发 I/O
并发 I/O 又如何呢?它在 AIX Version 5.2 中首次引入,这个特性调用了直接 I/O,所以它具有与直接 I/O 相关联的所有其他性能注意事项。使用标准的直接 I/O,会对索引节点(与文件相关联的数据结构)加锁,以防止出现多个线程试图同时更改一个文件的内容的情况。并发 I/O 绕过了索引节点锁,这样可以允许多个线程并发地读写相同文件的数据。这是因为 JFS2 在实现时使用了写独占 (write-exclusive) 索引节点锁,允许多个用户同时读取相同的文件。可以想象,直接 I/O 可能使得不断地从相同文件读取数据的数据库产生很大的问题。并发 I/O 则解决了这一问题,这正是该特性主要用于关系数据库的原因。与直接 I/O 类似,您可以通过 open 系统调用或者通过装入文件系统来实现这种方式,如下所示:
# mount -o cio /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(仅适用于 AIX Version 5.3)和 nmon 都可以监视异步 I/O 服务器的使用率。在 AIX Version 5.3 之前,确定该信息的唯一方法是使用 nmon 命令。确定您的系统中所配置的异步 I/O(遗留)服务器数量的标准命令是:
pstat -a | egrep ' aioserver' | wc -l

iostat -A 命令可以报告异步 I/O 统计数据(请参见清单 1)。

清单 1. iostat -A 命令
                # iostat -ASystem configuration: lcpu=2 drives=3 ent=0.60 paths=4 vdisks=4                                                                                                 aio: avgc avfc maxgc maxfc maxreqs avg-cpu: % user % sys % idle % iowait physc % entc       0   0    32    0      4096            6.4    8.0    85.4    0.2    0.1    16.0                                                                                Disks:         % tm_    act      Kbps      tps     Kb_read   Kb_wrtn                   hdisk0           0.5    2.0       0.5       0         4                   hdisk1           1.0    5.9       1.5       8         4                   hdisk2           0.0    0.0       0.0       0         0

所有这些内容究竟表示什么呢?
  • avgc:它报告了在您所指定的时间间隔内平均每秒的全局异步 I/O 请求。
  • avfc:它报告了在您所指定的时间间隔内平均每秒的快速路径请求计数。
  • maxgc:它报告了从上次获取该值以来的最大全局异步 I/O 请求。
  • maxfc:它报告了从上次获取该值以来的最大快速路径请求计数。
  • maxreqs:这是所允许的最大异步 I/O 请求。
您究竟应该配置多大呢?根据经验,可以将服务器的最大数目设置为磁盘数量的十倍或者处理器数量的十倍。可以将 MinServers 设置为这个数量的一半。除了使得更多的、几乎不怎么使用的(使用少量的内核内存)内核进程挂起之外,将 MaxServers 设置得过大,实际上并没有什么风险,所以不用担心提高这个值。如何完成这项任务呢?您可以使用 chdev 命令或者 smit fastpath 命令:
# smit aio (or smit posixaio)

这也是您在系统中启用异步 I/O 的方法。
要从命令行将 maxservers 设置为 100,可以使用这个命令:
# chdev -l aio0 -a maxservers=100

请注意,在这项更改生效之前,您必须重新启动。有时候,我会被问及 aioposixaio 之间的区别。这两者之间的主要区别是传递不同的参数,所以您的确需要同时配置它们。
最后一个概念是 I/O 处理速率调整。这是一项 AIX 的特性,它可以防止使用大量磁盘 I/O 的应用程序使得 CPU 和磁盘超载。正确地使用磁盘 I/O 处理速率调整,可以帮助防止生成大量输出的程序使系统的 I/O 饱和,并导致系统性能降低。优化 maxpout 和 minpout 可以帮助防止对文件执行顺序写入操作的线程占用过多的系统资源。
通过显式地将 minput 和 maxpout 设置为 0 并装入文件系统,您还可以限制设置全局参数的效果:
# mount -o minpout=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 -d 1 2AIX newdev 3 5    06/04/07System Configuration: lcpu=4 disk=507:11:16     device    %busy    avque    r+w/s   blks/s   avwait   avserv07:11:17     hdisk1      0      0.0        0        0      0.0      0.0             hdisk0     29      0.0      129       85      0.0      0.0             hdisk3      0      0.0        0        0      0.0      0.0             hdisk2      0      0.0        0        0      0.0      0.0                cd0      0      0.0        0        0      0.0      0.007:11:18     hdisk1      0      0.0        0        0      0.0      0.0             hdisk0     35      0.0      216      130      0.0      0.0             hdisk3      0      0.0        0        0      0.0      0.0             hdisk2      0      0.0        0        0      0.0      0.0                cd0      0      0.0        0        0      0.0      0.0Average           hdisk1        0      0.0        0        0      0.0      0.0             hdisk0     32      0.0      177       94      0.0      0.0             hdisk3      0      0.0        0        0      0.0      0.0             hdisk2      0      0.0        0        0      0.0      0.0                cd0      0      0.0        0        0      0.0      0.0

让我们来仔细研究清单 2 中的列标题。
  • %busy:这个命令可以报告该设备忙于处理传输请求的时间比例。
  • avque:在 AIX Version 5.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 | grep sa10 8-17 * * 1-5 /usr/lib/sa/sa1 1200 3 &0 * * * 0,6 /usr/lib/sa/sa1 &0 18-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 的图形混合版,经过最近的改进,它现在支持捕获数据以进行历史分析。这些改进是在 AIX Version 5.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 秒钟进行一次快照:
# sudo nmon -f -t -r test1 -s 30 -c 180

然后,对所创建的输出文件进行排序:
# sort -A testsystem_yymmdd.nmon > testsystem_yymmdd.csv

在完成了该任务之后,将这个 .csv 文件通过 ftp 上传到您的 PC,启动 nmon 分析程序电子表格(启用宏),并且单击 analyze nmon data。您可以从这里下载 nmon 分析程序。
图 3 是从一个 AIX 5.3 系统中获取的屏幕截图,它为每个磁盘的读写提供了磁盘汇总信息,单位是千字节每秒。

图 3. 每个磁盘的读写磁盘汇总信息,单位是千字节每秒

nmon 还可以帮助跟踪异步 I/O 服务器的配置,如清单 4 中的输出所示。

清单 4. 使用 nmon 跟踪异步 I/O 服务器的配置
                lsattr -El aio0                                                                        lsattr -El aio0        autoconfig available STATE to be configured at system restart Truelsattr -El aio0        fastpath   enable    State of fast path                       Truelsattr -El aio0        kprocprio  39        Server PRIORITY                          Truelsattr -El aio0        maxreqs    16384     Maximum number of REQUESTS               Truelsattr -El aio0        maxservers 100       MAXIMUM number of servers per cpu        Truelsattr -El aio0        minservers 50        MINIMUM number of servers                True

在 AIX Version 5.3 之前,nmon 是唯一用于显示所配置的异步 I/O 服务器的数量,以及实际使用量的工具。正如前面的部分所述,最近对 iostat 进行了增强,使它也提供了这种功能。
结束语
本文介绍了磁盘 I/O 子系统的相对重要性。本文定义并介绍了 AIX I/O 栈,以及它与物理和逻辑磁盘 I/O 之间的关系。本文还介绍了在数据库环境中进行磁盘配置的一些最佳实践,研究了直接和并发 I/O 之间的区别,还介绍了异步 I/O 和 I/O 处理速率调整。您优化了异步 I/O 服务器,并配置了 I/O 处理速率调整。您从并发 I/O 模式的文件系统开始,研究了何时最适合实现并发 I/O。而且,您了解了关于 iostat,以及使用 sar、topas 和 nmonn 捕获数据的所有内容。您还研究了输出的不同类型,了解了许多在 sar 和 iostat 中使用的标志。本系列文章的第 2 部分将深入研究 AIX I/O 栈中的逻辑卷管理器层,并介绍一些快照类型的工具,它们可以帮助您快速地访问磁盘 I/O 子系统的状态。第 3 部分主要关注于使用各种工具跟踪 I/O 使用情况,如 filemon 和 fileplace,以及如何提高文件系统性能整体。

论坛徽章:
0
发表于 2008-06-13 12:05 |显示全部楼层
AIX 5L 磁盘性能优化: 第 2 部分
引言
与其他子系统的优化工作不同,实际上在构建系统的体系结构设计阶段就应该开始进行磁盘 I/O 优化。尽管存在一些 I/O 优化参数的虚拟内存等价项(ioolvmo),但是提高磁盘 I/O 性能的最佳方法是正确地配置您的系统,而不是优化相关的参数。与虚拟内存优化不同,在创建了逻辑卷并开始运行之后,要更改它们的组织结构会变得更加复杂,所以您通常只有一次机会正确地完成这项任务。本文讨论了配置逻辑卷的方式,以及相对于物理磁盘应该将它们布置于何处,本文还介绍了用于监视您的逻辑卷的工具。其中,大多数工具并不适合于长期趋势研究,并且是 AIX 特定的工具,它们可以提供相关信息以便了解如何配置逻辑卷,以及是否针对您的环境对它们进行了优化。
本系列文章的第 1 部分(请参见参考资料)介绍了 iostat,但其中仅介绍了使用该工具来查看异步 I/O 服务器。第 2 部分使用 iostat 来监视您的磁盘,并向您介绍了它能够完成哪些工作以帮助您快速地确定 I/O 瓶颈。尽管 iostat 是通用的 UNIX® 实用工具之一,并且它不是专门为 AIX 而开发的,但实际上,对于快速地确定系统的运行情况,它是非常有用的。更特定的 AIX 逻辑卷命令可以帮助您更深入地研究逻辑卷,以帮助您真正地分析实际问题(如果存在任何问题)。在使用这些工具之前,您必须清楚地了解您需要哪些信息,这一点是很重要的。本文描述了相关的工具,并向您介绍了如何分析它们的输出,这将帮助您分析磁盘 I/O 子系统。
逻辑卷和磁盘布置概述
这个部分定义了逻辑卷管理器(Logical Volume Manager,LVM),并介绍了它的一些特性。让我们深入地研究逻辑卷的概念,分析它们与提高磁盘 I/O 使用率之间的关系,并通过定义和讨论 intra-policy 和 inter-policy 磁盘实践,从物理磁盘的角度介绍有关逻辑卷的布置。
从概念上讲,逻辑卷层位于应用程序和物理层之间。在磁盘 I/O 的上下文中,应用程序层是文件系统或者原始逻辑卷。物理层由实际的磁盘组成。LVM 是一种 AIX 磁盘管理系统,它可以在逻辑和物理存储之间映射数据。这允许数据保存在多个物理盘片上,并使用专门的 LVM 命令对其进行管理和分析。实际上,LVM 控制系统中所有的物理磁盘资源,并帮助提供存储子系统的逻辑视图。了解它位于应用程序层和物理层之间,应该可以帮助您理解它为什么很可能是所有层中最重要的一层。甚至您的物理卷本身就是逻辑层的一部分,因为物理层仅包含实际的磁盘、设备驱动程序和任何您可能已经配置的阵列。图 1 阐释了这个概念,并显示了逻辑 I/O 组件与物理磁盘及其应用程序层非常紧密地结合在一起。

图 1. 逻辑卷图表

现在,让我们简要地、自底向上地介绍 LVM 中的各个元素。每个驱动器作为一个物理卷进行命名。多个物理卷组成一个卷组。在卷组中,定义了逻辑卷。LVM 允许数据位于多个物理驱动器,尽管可能将它们配置为属于单个卷组。这些逻辑卷可以是一个或者多个逻辑分区。每个逻辑分区具有一个与其相关联的物理分区。在其中,您可以拥有物理部分的多个副本,以用于各种目的,如磁盘镜像。
让我们简要地介绍一下逻辑卷的创建与物理卷之间的关系。图 2 描述了物理磁盘盘片上的实际存储位置。

图 2. 物理磁盘盘片上的实际存储位置

作为一般规则,靠近中央的数据要比靠近外边缘的数据具有更快的寻道时间。这与数据的密度有关。因为越靠近中央,密度越大,实际上磁头只需移动更短的距离。内部边缘(inner edge)通常具有最短的寻道时间。作为最佳实践,应用程序使用 I/O 越多,就应该使其位于越靠近物理卷中央的位置。请注意,对于这个最佳实践,有一些例外的情况。磁盘边缘的每个磁道比靠近中央的磁道能够保存更多的数据。虽然这样说,但是实际上应该顺序地访问位于边缘的逻辑卷,以获得更高的性能。对于开启了镜像写一致性检查(Mirror Write Consistency Check,MWCC)的逻辑卷来说也一样。这是因为,MWCC 扇区位于磁盘边缘而不是中央,这与逻辑卷的 intra-disk 策略有关。
让我们来讨论另一个重要的、称为逻辑卷 inter-disk 策略的概念。inter-disk 策略定义了一个逻辑卷的物理分区实际驻留的磁盘的数目。一般规则是,最小的 (minimum) 策略可以提供最大的可靠性和可用性,而最大的 (maximum) 策略可以提高性能。简单地说,数据所分散到的驱动器越多,性能就越好。一些其他的最佳实践包括:分配密集的逻辑卷以分隔物理卷,定义所需的逻辑卷的最大大小,并将经常使用的逻辑卷布置在一起。这正是为什么在配置系统之前您必须了解具体的数据,以便您从一开始就可以创建有意义的策略的原因。
在创建逻辑卷时,您可以使用下面命令或者 smit 快速路径定义自己的策略:# mklv# smitty mklv
监视逻辑卷并分析结果
这个部分提供了有关如何监视您的逻辑卷并分析结果的介绍。介绍了各种各样的命令以及它们的用途,并且您还将检查输出内容。
刚刚接到了有关某个数据库服务器性能迟缓的报告。您怀疑可能出现了 I/O 问题,所以您使用 iostat 开始进行分析。如果您还记得,在本系列文章的第 1 部分中曾介绍过这个命令(请参见参考资料),尽管只是用作查看异步 I/O 服务器的目的。现在,让我们仔细地研究 iostatiostat,相当于用于虚拟内存的 vmstat,很可能是概略了解 I/O 子系统运行情况的最有效方式。

清单 1. 使用 iostat
                # iostat 1System configuration: lcpu=4 disk=4tty:      tin         tout   avg-cpu:  % user    % sys     % idle    % iowait          0.0        392.0               5.2      5.5       88.3       1.1Disks:        % tm_act     Kbps      tps    Kb_read   Kb_wrtnhdisk1           0.5      19.5       1.4   53437739  21482563hdisk0           0.7      29.7       3.0   93086751  21482563hdisk4           1.7     278.2       6.2   238584732  832883320hdisk3           2.1     294.3       8.0   300653060  832883320

这个示例中显示了哪些内容,而所有这些内容又是什么含义呢?
  • % tm_act:报告物理磁盘处于活动状态,或者磁盘请求的总时间的时间百分比。
  • Kbps:报告传输到驱动器的数据量(单位为千字节)。
  • tps:报告每秒钟发送到物理磁盘的传输量。
  • Kb_read:报告在测量间隔中从物理卷读取的总数据量(单位为千字节)。
  • Kb_wrtn:报告在测量间隔中向物理卷写入的数据量(单位为千字节)。
您需要非常小心地监视 % tm_act,因为当它的使用率超过大概百分之六十到七十时,这通常表示进程开始等待 I/O。这可能是即将发生的 I/O 问题的第一个征兆。将数据移动到更空闲的驱动器可以显著地帮助缓解这个负担。通常来说,您的数据位于越多的驱动器,性能就越好。与其他的事物一样,物极必反,因为您必须确保不会有太多的驱动器连接到任何一个适配器。有一种方法可以确定一个适配器是否满负荷,将连接到该适配器的所有磁盘的 Kbps 量累加起来。其总数应该小于磁盘适配器吞吐量速率,通常小于百分之七十。
使用 -a 标志(请参见清单 2)可以帮助您更深入地检查适配器的使用率。

清单 2. 使用带 -a 标志的 iostat
                # iostat -aAdapter:                   Kbps      tps    Kb_read   Kb_wrtnscsi0                      0.0       0.0          0         0Paths/Disk:       % tm_act     Kbps      tps            Kb_read   Kb_wrtnhdisk1_Path0           37.0       89.0     0.0          0         0hdisk0_Path0           67.0       47.0     0.0          0         0hdisk4_Path0           0.0        0.0      0.0          0         0hdisk3_Path0           0.0        0.0      0.0          0         0Adapter:                   Kbps      tps    Kb_read   Kb_wrtnide0                       0.0       0.0          0         0Paths/Disk:       % tm_act     Kbps      tps    Kb_read   Kb_wrtncd0                    0.0       0.0       0.0          0         0

显然,其中不存在任何瓶颈。使用 -d 标志允许您深入地研究一个特定的磁盘(请参见清单 3)。

清单 3. 使用带 -d 标志的 iostat
                # iostat -d hdisk1 1System configuration: lcpu=4 disk=5Disks:        % tm_act     Kbps      tps    Kb_read   Kb_wrtnhdisk1           0.5      19.4       1.4   53437743  21490480hdisk1           5.0      78.0       23.6         3633      3564hdisk1           0.0       0.0       0.0          0         0hdisk1           0.0       0.0       0.0          0         0hdisk1           0.0       0.0       0.0          0         0hdisk1           0.0       0.0       0.0          0         0

让我们来研究一些特定的 AIX LVM 命令。您已经了解了有关磁盘布置的内容,以及从一开始就正确地设计系统体系结构的重要性。不幸的是,您并不总是能够使用这种方法。作为系统管理员,您有时可能会接手一些必须进行修复的系统。让我们研究一下磁盘上逻辑卷的布局,以确定您是否需要更改定义或者重新组织您的数据。
让我们首先了解一下卷组,并查找作为其中的一部分的逻辑卷。lsvg 命令可以提供卷组信息(请参见清单 4)。

清单 4. 使用 lsvg
                # lsvg -l data2vgData2vg:LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINTdata2lv             jfs        128   256   2    open/syncd    /data2loglv00             jfslog     1     2     2    open/syncd    N/Aappdatalv                jfs        128   256   2    open/syncd    /appdata

现在,让我们使用 lslv,它可以提供关于逻辑卷的特定数据(请参见清单 5)。

清单 5. 使用 lslv
                # lslv data2lvLOGICAL VOLUME:     data2lv                VOLUME GROUP:   data2vgLV IDENTIFIER:      0003a0ec00004c00000000fb076f3f41.1 PERMISSION:     read/writeVG STATE:           active/complete        LV STATE:       opened/syncdTYPE:               jfs                    WRITE VERIFY:   offMAX LPs:            512                    PP SIZE:        64 megabyte(s)COPIES:             2                      SCHED POLICY:   parallelLPs:                128                    PPs:            256STALE PPs:          0                      BB POLICY:      relocatableINTER-POLICY:       minimum                RELOCATABLE:    yesINTRA-POLICY:       center                 UPPER BOUND:    32MOUNT POINT:        /data                  LABEL:          /dataMIRROR WRITE CONSISTENCY: on/ACTIVEEACH LP COPY ON A SEPARATE PV ?: yesSerialize IO ?:     NO

这个视图为您的逻辑卷属性提供了详细的描述。这些数据表示了什么含义呢?intra-policy 是 center,它通常是面向使用大量 I/O 的逻辑卷的最佳策略。正如前面的讨论中所介绍的,对于这个规则,有一些例外的情况。不幸的是,您碰到了这些情况之一。因为已经开启了镜像写一致性检查 (MWC),所以如果卷位于边缘,那么应该能够更好地为其提供服务。让我们来研究一下 inter-policy。inter-policy 是 minimum,它通常是面向可用性高于性能的情况的最佳策略。而且,其中逻辑分区的数目是物理分区的两倍,这表示您正在对系统进行镜像。在这个示例中,对于您来说,原始性能是最重要的目标,所以逻辑卷的配置没有采用与如何使用卷的实际情况相关的方式。而且,如果您正在对系统进行镜像,并且使用了外部存储阵列,这种情况可能变得更糟,因为您已经在硬件层提供了镜像,而实际上,这比使用 AIX 镜像的效率更高。
让我们更深入地研究清单 6 中的内容。

清单 6. 带 -l 标志的 lslv
                # lslv -l data2lvdata2lv:/data2PV                COPIES        IN BAND       DISTRIBUTIONhdisk2            128:000:000   100%          000:108:020:000:000hdisk3            128:000:000   100%          000:108:020:000:000

lslv-l 标志列举了与逻辑卷和每个逻辑卷的分布(distribution)相关的所有物理卷。然后,您可以确定已经将磁盘上百分之百的物理分区都分配给了这个逻辑卷。其中的分布(distribution)部分显示了每个物理卷中的实际物理分区数目。从中,您可以详细地了解其 intra-disk 策略。这些字段的顺序如下所示:
  • 边缘 (Edge)
  • 中间 (Middle)
  • 中央 (Center)
  • 内部中间 (Inner-middle)
  • 内部边缘 (Inner-edge)

该报告显示了,大多数数据位于中间,有些数据位于中央。
让我们继续研究,并找出与一个物理卷相关联的逻辑卷。可以使用 lspv 命令来完成这项任务(请参见清单 7)。

清单 7. 使用 lspv 命令
                # lspv -l hdisk2hdisk2:LV NAME               LPs   PPs     DISTRIBUTION          MOUNT POINTloglv01               1     1       01..00..00..00..00    N/Adata2lv               128   128     00..108..20..00..00   /data2appdatalv                  128   128     00..00..88..40..00    /appdata

现在,您可以实际地确定这个磁盘上的哪些逻辑卷实现了最大的性能。
您可以进行更深入地研究,以获取更具体的信息(请参见清单 8)。

清单 8. 带 -p 标志的 lspv
                # lspv -p hdisk2hdisk2 RANGE  STATE   REGION        LV ID               TYPE       MOUNT POINT  1-108   free    outer edge109-109   used    outer edge    loglv00             jfslog     N/A110-217   used    outer middle  data2lv             jfs         /data2218-237   used    center        appdatalv             jfs        /appdata238-325   used    center        testdatalv          jfs          /testdata326-365   used    inner middle  stagingdatalv        jfs        /staging366-433   free    inner middle434-542   free    inner edge

这个视图告诉您,该物理卷中哪些是空闲的、哪些已经被使用,以及在什么地方使用了哪些分区。这是一个非常好的视图。
最好的工具之一是,使用 lvmstat 查看 LVM 的使用情况(请参见清单 9)。

清单 9. 使用 lvmstat
                # lvmstat -v data2vg0516-1309 lvmstat: Statistics collection is not enabled for this logical device.        Use -e option to enable.

正如您可以从这个示例的输出中看到的,缺省情况下并没有启用它,所以在使用这个工具之前使用 # lvmstat -v data2vg -e 来启动这个功能。下面的命令可以在 10 个时间间隔内,每秒钟对 LVM 信息进行一次快照:
# lvmstat -v data2vg 1 10

这个视图显示了从启动该数据收集工具以来,您的系统中利用率最高的逻辑卷。在优化系统时需要深入地研究逻辑卷层,这时候该视图是非常有价值的(请参见清单 10)。

清单 10. 带 -v 标志的 lvmstat
                # lvmstat -v data2vgLogical Volume       iocnt     Kb_read              Kb_wrtn      Kbps  appdatalv           306653    47493022            383822      103.2  loglv00                 34        0                3340       2.8  data2lv                453      234543            234343       89.3         

您需要在其中查找什么信息呢?
  • % iocnt:报告读写请求的数目。
  • Kb_read:报告在测量间隔中读取的总数据量(单位为千字节)。
  • Kb_wrtn:报告在测量间隔中写入的数据量(单位为千字节)。
  • Kbps:报告已传输的数据量(单位为千字节)。
在您将其添加到您的指令库中之前,请查看所有这些命令的 man 页面。
使用 lvmo 进行优化
这个部分介绍了使用特定的逻辑卷优化命令。lvmo 用于设置和显示您的 pbuf 优化参数。它还可以用于阻塞 I/O 统计信息。
lvmo 是在 AIX Version 5.3 中首次引入的新的命令之一。请务必注意,使用 lvmo 命令只允许更改那些专门用于特定卷组的 LVM pbuf 可调参数。ioo 实用工具仍然是在系统范围内管理 pbufs 的唯一方法。这是因为,在 AIX Version 5.3 之前,pbuf 池参数是一种系统范围的资源。随着 AIX Version 5.3 的出现,LVM 可以为每个卷组管理一个 pbuf 池。什么是 pbuf?最准确地说,pbuf 是一个固定的内存缓冲区。LVM 使用这些 pbuf 来控制挂起的磁盘 I/O 操作。
让我们显示一下 data2vg 卷组的 lvmo 可调参数(请参见清单 11)。

清单 11. 显示 lvmo 可调参数
                # lvmo -v data2vg -avgname = data2vgpv_pbuf_count  = 1024total_vg_pbubs = 1024mag_vg_pbuf_count = 8192perv_blocked_io_count = 7455global_pbuf_count = 1024global_blocked_io_count = 7455

其中哪些是可调参数?
  • pv_pbuf_count:报告在将一个物理卷添加到该卷组时所添加的 pbuf 数目。
  • Max_vg_pbuf_count:报告可以为一个卷组分配的最大 pbuf 量。
  • Global_pbuf_count:报告在将一个物理卷添加到任何卷组时所添加的 pbuf 数目。
让我们为这个卷组增加 pbuf 计数:
# lvmo -v redvg -o pv_pbuf_count=2048

老实说,我通常并不使用 lvmo,而是使用 ioo。我更习惯优化全局参数。请务必注意,如果您将这个 pbuf 值设置得太大,将会导致性能降低。
结束语
本文重点关注于逻辑卷以及它们与磁盘 I/O 子系统的关系。本文概略地定义了逻辑卷,并说明了它与应用程序和物理层的关系。本文还定义和介绍了 inter-disk 和 intra-disk 策略的一些最佳实践,因为它们与创建和维护逻辑卷有关。您了解了为您的逻辑卷监视 I/O 使用情况的各种方法,并且分析了从用于帮助确定问题的各种命令所捕获的数据。最后,您通过确定和增加特定卷组所使用的 pbufs 量,对您的逻辑卷进行了优化。本系列文章的第 3 部分将在您继续研究文件系统的同时,重点关注于应用程序层,并使用各种命令以监视和优化您的文件系统和磁盘 I/O 子系统。

论坛徽章:
0
发表于 2008-06-13 12:06 |显示全部楼层
AIX 5L 磁盘性能优化: 第 3 部分引言
本系列文章的第 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 /testroot@lpar29p682e_pub[/] > df -k /testFilesystem    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 allRun trcstop command to signal end of trace.Sun Aug 19 17:47:34 2007System: AIX 5.3 Node: lpar29p682e_pub Machine: 00CED82E4C00root@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 2007System: AIX 5.3 Node: lpar29p682e_pub Machine: 00CED82E4C00Cpu 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: 38608opens:                  1total bytes xfrd:       286720reads:                  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.001lseeks:                 130------------------------------------------------------------------------Detailed VM Segment Stats   (4096 byte pages)------------------------------------------------------------------------SEGMENT: 223b9  segtype: clientsegment flags:          clntwrites:                 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: jfs2logwrites:                 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.1seeks:                  11      (73.3%)Detailed Physical Volume Stats   (512 byte blocks)------------------------------------------------------------------------VOLUME: /dev/hdisk0  description: Virtual SCSI Disk Drivewrites:                 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.6seeks:                  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.41183time to next req(msec): avg 6369.624 min   0.051 max 120046.794 sdev 23589.450throughput:             3.1 KB/secutilization:            0.00

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

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

在这个示例中,filemon 几乎占据了 96% 的 CPU!通常,我不推荐使用带来如此巨大开销的性能工具,所以我要重申一下,尽管 filemon 的确有其用武之处,但您在使用它的时候仍需非常小心。
fileplace 又如何呢?fileplace 可以报告文件块在文件系统中的位置。它通常用于检查和评估文件在磁盘中的放置位置的效率。为什么要使用它呢?其中一个原因是,它可以帮助您确定对于一些经常使用的文件,是否存在大量的碎片。它还可以帮助您确定最高使用率的物理卷,确定驱动器或者 I/O 适配器是否导致了瓶颈的发生。
让我们来看看清单 3 中的示例,这是一个频繁访问的文件。

清单 3. 频繁访问的文件
                root@lpar29p682e_pub[/] > fileplace -pv dbfileFile: dbfile  Size: 5374622 bytes  Vol: /dev/hd4Blk Size: 4096  Frag Size: 4096  Nfrags: 1313Inode: 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 -LNAME                      CUR    DEF    BOOT   MIN    MAX    UNIT           TYPE     DEPENDENCIESj2_atimeUpdateSymlink     0      0      0      0      1      boolean           Dj2_dynamicBufferPreallo   16     16     16     0      256    16K slabs         Dj2_inodeCacheSize         400    400    400    1      1000                     Dj2_maxPageReadAhead       128    128    128    0      64K    4KB pages         Dj2_maxRandomWrite         0      0      0      0      64K    4KB pages         Dj2_maxUsableMaxTransfer   512    512    512    1      4K     pages             Mj2_metadataCacheSize      400    400    400    1      1000                     Dj2_minPageReadAhead       2      2      2      0      64K    4KB pages         Dj2_nBufferPerPagerDevice  512    512    512    512    256K                     Mj2_nPagesPerWriteBehindC  32     32     32     0      64K                      Dj2_nRandomCluster         0      0      0      0      64K    16KB clusters     Dj2_nonFatalCrashesSystem  0      0      0      0      1      boolean           Dj2_syncModifiedMapped     1      1      1      0      1      boolean           Dj2_syncdLogSyncInterval   1      1      1      0      4K     iterations        Djfs_clread_enabled        0      0      0      0      1      boolean           Djfs_use_read_lock         1      1      1      0      1      boolean           Dlvm_bufcnt                9      9      9      1      64     128KB/buffer      Dmaxpgahead minpgahead     8      8      8      0      4K     4KB pages         Dmaxrandwrt                0      0      0      0      512K   4KB pages         Dmemory_frames             512K          512K                 4KB pages         SMinpgahead maxpgahead     2      2      2      0      4K     4KB pages         Dnumclust                  1      1      1      0      2G-1   16KB/cluster      Dnumfsbufs                 196    196    196    1      2G-1                     Mpd_npages                 64K    64K    64K    1      512K   4KB pages         Dpgahd_scale_thresh        0      0      0      0      419430 4KB pages         Dpv_min_pbuf               512    512    512    512    2G-1                     Dsync_release_ilock        0      0      0      0      1      boolean           Dn/a means parameter not supported by the current platform or kernelParameter 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=32Setting maxpgahead to 32root@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_minPageReadAheadJ2_maxPageReadAhead 参数,它们可以在碰到顺序 I/O 的情况下用于提高性能。
本系列共有三篇关于 I/O 的文章,在您学习本系列期间,也许比在任何其他子系统中学习到了更多的内容,您必须在对系统进行压力测试之前开始进行优化。与使用优化 I/O 参数进行各种工作相比,正确地设计系统体系结构,可以更好地提高性能。这包括策略性磁盘位置,并确保您拥有足够多的适配器以处理磁盘的吞吐量。而且,尽管本系列文章重点关注于 I/O,但也说明了 VMM 与 I/O 性能紧密相连,并且必须对其进行相应的优化,以实现最佳的 I/O 性能。

论坛徽章:
0
发表于 2008-06-14 20:00 |显示全部楼层
这篇文档很好,学到很多

论坛徽章:
0
发表于 2011-02-10 13:43 |显示全部楼层
hen全面啊

论坛徽章:
0
发表于 2011-02-14 16:03 |显示全部楼层
很好很全面

论坛徽章:
1
辰龙
日期:2015-03-23 10:24:00
发表于 2011-02-21 14:58 |显示全部楼层
很好很全面,确实~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP