优化 AIX 7 磁盘性能,第 1 部分: 磁盘 I/O 概述和长期监控工具(sar、nmon 和 topas)
简介: 根据之前的有关 AIX 5L 的文章,基于对 AIX 7 beta 的研究,了解如何配置和监控 AIX 7。本文讨论对直接 I/O、并发 I/O 和异步 I/O 的支持,以及每种 I/O 实现方法的最佳实践。本系列分为三部分,讨论 AIX? 磁盘和 I/O 子系统,重点关注在优化磁盘 I/O 性能时遇到的各种挑战。尽管磁盘调优很可能没有 CPU 或者内存优化那么激动人心,但它是优化服务器性能的关键方面。事实上,部分原因是因为磁盘 I/O 是最薄弱的子系统环节,与任何其他子系统相比,可以通过更多的措施提高磁盘 I/O 性能。 磁盘 I/O 优化的关键部分涉及到在构建系统之前实现最佳实践。因为当系统已经启动并处于运行状态时,很难再对数据进行移动,所以需要在规划磁盘和 I/O 子系统环境时正确地完成这项任务,这一点是非常重要的。这包括物理架构、逻辑磁盘排列以及逻辑卷和文件系统配置。 当系统管理员听到可能出现了磁盘争用问题时,他或她首先会求助于 iostat。iostat 等同于使用 vmstat 提供有关内存的报告,它是获得有关 I/O 子系统的当前运行概况的一种快速而原始的方法。尽管运行 iostat 并不是一种完全不合理的反应,但是很早就应该着手考虑磁盘 I/O 的问题,而不是等到必须进行调优的时候。如果没有从一开始就正确地为环境配置磁盘,那么任何调优工作都无法提供帮助。而且,有一点非常重要,需要了解磁盘 I/O 的具体情况,以及它与 AIX? 和 your System p? 硬件之间的关系。 对于磁盘 I/O 调优来说,AIX 特有的工具和实用工具比通用的 UNIX? 命令和工具能够提供更多的帮助,因为它们的任务就是帮助优化本机 AIX 磁盘 I/O 子系统。在本文中,我们要定义和介绍 AIX I/O 栈,并将其与磁盘性能的物理和逻辑方面关联起来。本文介绍直接、并发和异步 I/O:它们是什么,如何启用它们,以及如何监控和优化它们。本文还介绍一些长期监控工具,应该使用它们来帮助优化系统。听到 iostat 并不是我们推荐的帮助长期收集统计数据的工具,您可能会感到奇怪。 本文讨论 AIX 7 的 beta 版中的支持和变化,包括不同子系统的配置方式方面的变化。AIX 7 中的主要变化进一步简化了许多 I/O 子系统的操作和配置,这个改进过程从 AIX 6 就开始了。其结果是许多 I/O 子系统不再需要启用和配置了。现在,以预先配置好的状态提供它们,当应用程序请求相关功能时,自动地启用和启动它们。 本文还关注那些有助于识别和改进要调优的子系统的变化。开始对系统进行监控的最佳时间是在首次将系统应用到生产环境中并正常运行时(而不是等 到用户抱怨系统性能非常糟糕的时候)。需要在系统正常运行的时候建立系统运行状态的基准,以便在系统可能不正常时对数据进行分析。在对 I/O 子系统进行更改时,一次仅进行一项更改,以便能够准确地评估这项更改的影响。为了评估其影响,可以使用本文中推荐的长期监控工具之一捕捉数据。 您应该知道,对于运行任何程序来说,最慢的部分实际上是花费在从磁盘获取数据上的时间。这是由 I/O 的物理组件造成的。实际的磁盘必须找到正确的柱面,控件需要访问正确的块,并且磁头必须等到这些块旋转到磁头下面。在对系统进行任何优化活动之前,首先应 该了解 I/O 系统的物理架构,因为如果 I/O 子系统的设计非常糟糕,其中包含慢速磁盘或者适配器的使用非常低效,那么任何优化工作都无法提供帮助。 图 1 说明了物理 I/O 组件与逻辑磁盘及其应用程序 I/O 如何紧密地关联在一起。这正是通常将其称为 AIX I/O 栈的原因。 图 1. AIX I/O 栈
在进行调优工作时,需要了解所有层,因为它们分别以不同的方式对性能产生影响。在第一次设置系统时,对于磁盘的配置,可以从最底层(物理层) 开始,然后是设备层、逻辑卷、文件系统、文件和应用程序。规划物理存储环境是非常重要的,这一点无论怎样强调都不为过。这涉及到确定磁盘的数量、类型(速 度)、大小和吞吐量。关于存储技术需要注意的一个重要挑战是,尽管磁盘存储功能得到了极大的改进,但是磁盘的旋转速度却没有太大的提高。您必须清楚这样一 个事实:RAM 访问仅需要 540 个 CPU 周期,而磁盘访问需要用到 2 千万个 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?它是在 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 是在 AIX Version 5.2 中首次引入的,这个特性调用直接 I/O,所以它具有与直接 I/O
相关联的所有其他性能注意事项。在使用标准的直接 I/O
时,会对索引节点(与文件相关联的数据结构)加锁,以防止出现多个线程试图同时更改一个文件的内容的情况。并发 I/O
绕过了索引节点锁,这可以允许多个线程并发地读写相同文件的数据。这是因为 JFS2 在实现时使用了写独占 (write-exclusive)
索引节点锁,允许多个用户同时读取相同的文件。可以想象,直接 I/O 可能导致不断地从同一文件读取数据的数据库产生很大的问题。并发 I/O
解决了这一问题,这正是此特性主要应用于关系数据库的原因。与直接 I/O 类似,可以通过 open
系统调用或者通过挂载文件系统来实现这种方式,如下所示: 当使用这个命令挂载文件系统时,其中所有的文件都使用并发 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 服务器的使用情况呢?iostat 和 nmon 都可以监控异步 I/O 服务器的使用情况。只有在已经执行了需要异步 I/O 的应用程序的情况下,才能监控异步 I/O 和更改参数。AIX 内核启用异步 I/O 组件。这会让用户在尝试更改参数时产生困惑,因为只有在装载此模块之后,才能更改参数。 要想判断是否已经启用了异步 I/O,可以检查 清单 1. 检查 ioo 命令的输出
在这个清单中可以看到, 现在,aio 内核进程作为 清单 2. aio 内核进程作为 aioPpool 和 aioLpool 出现
其结果是 aio 系统占用的内存和进程空间更少。现在可以为每个 CPU 配置可调参数(例如 可能希望更改的其他参数包括最大异步 I/O 请求数量( 可以使用 ioo 或 smit 更改参数。可以在 Performance & Resource Scheduling、Tuning Kernel & Network Parameters 和 Tuning IO Parameters 中找到异步参数。在 smit 中,可以检查当前值和可能的最大值。 如果装载了内核模块,iostat 清单 3. iostat -A 命令
这些内容究竟表示什么呢?
与 AIX 6 一样,在 AIX 7 中,fsfastpath 和 fastpath 可调项不再是可更改的。它们现在属于受限制的可调项,默认设置为 1(启用)。因此,它们都可以把异步 I/O 请求直接发送到底层磁盘(而不通过相应的子系统和文件系统支持),这会产生更好的性能。 最后一个概念是 I/O 处理速率调整。这个 AIX 特性可以防止使用大量磁盘 I/O 的应用程序导致 CPU 和磁盘超载。适当地使用磁盘 I/O 处理速率调整,可以帮助防止生成大量输出的程序使系统的 I/O 饱和并导致系统性能降低。优化 maxpout 和 minpout 可以帮助防止对文件执行顺序写操作的线程占用过多的系统资源。 在挂载文件系统时,为 minput 和 maxpout 显式地指定零值,可以限制设置全局参数的效果: 从 AIX 6 开始,在 sys0 设备上默认启用 I/O 处理速率调整,还可以在其他设备上控制处理速率调整。 注意,还可以重新挂载现有的文件系统并设置 I/O 处理速率调整,这有助于调整已经在提供服务的磁盘的性能。 可以使用 AIX 特有的工具(sar、topas 和 nmon)监控磁盘 I/O 活动。这些工具有助于快速地解决性能问题,以及捕捉相关的数据以便进行历史趋势研究和分析。 别期望在本节中看到 iostat,因为 iostat 是一种用于快速确定在物理磁盘和适配器之间是否存在不平衡 I/O 负载的 UNIX 实用工具。除非决定使用 iostat 编写自己的脚本工具,否则它无法帮助分析长期的趋势和捕捉数据。 sar 是较早的通用 UNIX 工具之一,已经经过了多年的改进。尽管我通常喜欢使用 AIX 特有的工具,如 topas 或者 nmon,但是 sar 可以提供关于磁盘 I/O 的很多信息。我们来运行一个典型的 清单 4. 使用 sar
让我们来仔细看看清单 4 中的列标题。
需要谨防出现任何磁盘的使用率接近百分之百,或者大量的队列请求等待磁盘的情况。尽管 sar 的输出表明存在某些活动,但实际上并没有什么 I/O 问题,因为不存在等待 I/O 的情况。需要继续监控系统以确保也使用了 hdisk0 之外的其他磁盘。sar 不同于 iostat 的地方在于,它能够通过它的系统活动数据收集器(sadc)实用工具捕捉数据,以便进行长期的分析和趋势研究。这种实用工具允许捕捉数据进行历史趋势研究 和分析,通常在 cron 中没有开启它。 下面介绍一下它的工作方式。在 AIX 系统中,默认情况下通常有两个 Shell 脚本被注释掉了(/usr/lib/sa/sa1 和 /usr/lib/sa/sa2),它们提供有关系统活动的每日报告。 清单 5. cronjob 示例
有没有对用户来说更友好的工具呢?您说的是 topas 吧?topas 是一种非常优秀的性能监控工具,可以将其用于各种目的,包括(但是不限于)磁盘 I/O 子系统(见 图 2)。 图 2. topas
下面从磁盘的角度来研究 topas 的输出。这里并没有发生什么 I/O 活动。除了物理磁盘之外,请仔细观察 “Wait”(在 CPU 部分的上部),它也可以帮助确定系统是否有 I/O 瓶颈。如果在此处看到较高的数值,那么可以使用其他工具(如 filemon、fileplace、lsof 或 lslv)帮助确定究竟是哪个进程、适配器或者文件系统导致了瓶颈。如果希望获得比 iostat 更多的信息,那么可以使用 topas,它适合于对问题进行快速故障排除。从某种意义上说,topas 是 iostat 和 vmstat 的图形混合版,经过最近的改进,它现在支持捕捉数据以进行历史分析。 topas 的物理硬盘输出( 图 3. 磁盘统计数据输出示例
尤其是应该检查 ART/AWT 和 MRT/MWT,它们表示磁盘读写操作的平均和最大等待时间。比较高的值表明磁盘非常忙。AQW 表示对 I/O 设备的每个请求的平均等待队列数量。同样,比较高的值表明磁盘的速度无法跟上请求的速度。 nmon 是我最喜欢的 AIX 性能工具。尽管 nmon 提供类似于 topas 的前端,但是它更适合于长期趋势研究和分析。而且,它让系统管理员能够将数据输出到 Excel 电子表格中,然后可以转换为图表(适合向高管和职能团队展示),可以清楚地说明系统瓶颈所在。这些工作通过一个称为 nmon 分析程序的工具来完成,它提供到 nmon 的挂钩。关于磁盘 I/O,nmon 可以报告以下数据:磁盘 I/O 速度、数据传输、读/写比例以及磁盘适配器统计信息。 下面是一个小示例,在这里 nmon 确实发挥了它的作用。假设您希望了解哪些进程占用的磁盘 I/O
最多,并希望能够将其与实际磁盘关联起来,以便清楚地显示每个进程的 I/O。与任何其他工具相比,使用 nmon 能够提供更多帮助。要想使用
nmon 完成这项任务,可以使用 如何使用 nmon 捕捉数据并将其导入到分析程序中呢?使用 在完成了此任务之后,将这个 .csv 文件通过 ftp 传输到您的 PC 上,启动 nmon 分析程序电子表格(启用宏),单击 analyze nmon data。可以通过 “参考资料” 中的链接下载 nmon 分析程序。 图 4 为每个磁盘的读写提供磁盘汇总信息,单位是千字节每秒。 图 4. 每个磁盘的读写磁盘汇总信息,单位是千字节每秒
本文介绍了磁盘 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 部分主要关注使用各种工具(如 filemon 和 fileplace)跟踪 I/O 使用情况,以及如何提高文件系统的整体性能。 |
|
|