AIX 5L 内存性能优化[转]

twtiqfn 2011-09-04

       本系列的三篇文章深入研究内存优化中的参数优化,重点关注于内存性能优化方面的各种挑战和各种最佳实践,并且还介绍了 AIX? Version 5.3 中的一些改进。尽管与中央处理单元 (CPU) 优化相比,实现内存优化可能更加困难,但它同样是非常重要的。在 AIX 服务器中,与任何其他子系统相比,您可以对内存进行更多的优化工作。更改系统中的某些内存参数,可以极大地提高性能,特别是在尚未对这些参数进行优化的运行环境中。本系列文章的第 1 部分提供了 AIX 中内存的概述,包括对虚拟内存和虚拟内存管理器 (VMM) 的介绍。引言

      作为一名系统管理员,您应该已经对有关内存的基本知识非常熟悉,如物理和虚拟内存之间的区别。您可能还不是很清楚 AIX? 中的虚拟内存管理器 (VMM) 是如何工作的、以及它与性能优化之间的关系如何。而且,在最近几年中,有一些优化命令和参数发生了变化,如果您较长时间没有使用 AIX 了,那么您可能会发现,您从前所熟悉的一些命令,现在甚至根本无法继续使用了。本文详细地介绍了 AIX VMM,以及优化 VMM 所需使用的各种优化命令。我将介绍一些监视工具,您可以使用这些工具来优化您的系统,本文还对一些比较重要的 AIX Version 5.3 内存管理增强功能进行概述。实现这些增强功能,即将其应用到您的系统环境,可以在您的系统中优化内存性能。

     尽管您可能会发现,与其他的子系统相比,内存的优化更为困难一些,但是收到的效果往往更加显著。可能还有一些应该在您的系统中进行设置的特定的优化建议,这取决于您所运行的系统的类型。为了帮助证实这些内容,我使用了一个特定的示例,并介绍了进行这些参数设置的一些最佳实践。在某些情况下,动态地优化一个或两个参数,可能会使得您的系统的整体性能完全不同。

      无论您需要对哪个子系统进行优化,有一个方面是相同的,即优化系统—您始终应该将其看作一个正在进行的进程。开始对系统进行监视的最佳时间是当您首次将系统应用到产品环境中并且正常运行时,而不是等到用户抱怨系统的性能非常糟糕的时候。如果您不了解系统正常运行时的情况,并以此作为基准,那么您可能永远也无法真正地确定是否出现了问题。而且,一次只应该进行一项更改,并且在进行了更改之后,应该尽快地捕获相关的数据并对其进行分析,以确定这项更改究竟带来了什么不同(如果存在的话)。

内存概述

      这部分内容提供了与 AIX 有关的内存方面的概述。我将介绍 AIX 如何使用虚拟内存来寻址比系统中物理内存更大的内存。我还将说明 VMM 的工作方式以及它如何处理各种请求。

任何有关内存和 AIX 的介绍都必须以对 VMM 的描述作为开始。有时候,令 AIX 新手感到困惑的是,VMM 服务如何处理系统中所有的内存请求,而不仅仅是虚拟内存本身。在访问 RAM 时,VMM 需要分配空间,即使是在系统中有足够的物理内存的情况下。它实现了分页空间的预分配过程。使用这种方法,VMM 在帮助管理实际内存方面扮演了重要的角色,而不仅是在虚拟内存方面。下面来说明它的工作原理。在 AIX 中,将所有的虚拟内存段划分为若干个页面。在 AIX 中,每个页面的缺省大小为 4KB。所分配的页面可以位于 RAM 或者分页空间(虚拟内存存储于磁盘上)。VMM 还维护一个称为空闲列表 的对象,该对象定义为未分配的页帧。它们用于处理缺页的情况。通常存在少量未分配页面(您可以自行配置),VMM 可以使用这些页面来腾出空间并为其重新分配页帧。可以使用 VMM 的页面置换算法来选择要重新分配页帧的虚拟内存页面。这种分页算法可以确定对当前位于 RAM 中的哪些虚拟内存页面的页帧进行回收,并放回到空闲列表中。AIX 可以使用所有可用的内存,除了那些配置为未分配并用做空闲列表的内存之外。

         需要重申的是,VMM 的目的是管理 RAM 和虚拟页面的分配。由此可以看出,它的目标是帮助最大限度地缩短缺页响应时间,并在可能的情况下减少虚拟内存的使用。很显然,假设要在 RAM 和分页空间之间进行选择,在 RAM 可用的情况下,大多数人都更希望使用物理内存。另外,VMM 还将虚拟内存段划分为两种不同的类别。它们分别是,使用计算内存的工作段和使用文件内存的持久段。了解这两种类别之间的区别是非常重要的,因为这将帮助您实现系统的最优化。

计算内存

        当您的进程对计算信息进行处理时,将使用到计算内存。这些工作段是临时的(暂时的),并且当进程终止或者页面被替换时,这些工作段将不复存在。它们没有对应的持久磁盘存储位置。在许多情况下,当一个进程终止时,将释放其物理和分页空间。当可用页面出现较大的峰值时,您可以在监视系统的过程中发现这种情况。在 VMM 中,当空闲物理内存较少时,可以将最近没有使用的程序从 RAM 移出到分页空间,以帮助释放物理内存,从而完成更多的实际工作。

文件内存

         与计算内存不同,文件内存使用了持久段,并在磁盘上具有持久存储位置。数据文件或者可执行程序通常都映射为持久段,而不是工作段。数据文件可能与文件系统相关,如 JFS、JFS2 或 NFS。它们一直都位于内存中,直到文件被卸载、页面被替换、或者取消了到文件的链接。在将数据文件复制到 RAM 中之后,VMM 控制何时对这些页面进行覆盖或者将其用于存储其他数据。在可以选择的情况下,大多数人更希望将文件内存调出到磁盘,而不是计算内存。

          当进程引用磁盘上的某个页面时,必须将其调入,而这可能会导致再次将其他的页面调出。VMM 常驻内存并在后台运行,尝试替换最近没有使用的页帧,其中使用到前面介绍的页面置换算法。它还可以帮助检测系统颠簸,当可用内存量很低并且不断地调入和调出页面以支持任务的处理时,可能会出现系统颠簸。实际上,VMM 中提供了一种内存负载控制算法,它可以检测系统是否出现颠簸,并尝试去解决这种情况。如果不加以处理,系统颠簸可能会导致系统停滞,因为内核此刻过分地关注于为页面腾出空间,而不是完成任何有实际意义的工作。

优化

            让我们研究一些相关的工具,它们允许您对 VMM 进行优化,从而实现系统性能的优化。我提供了一个环境示例,其中使用了某种方法对相关的参数进行优化。我还介绍了一些需要注意的关键参数。

              在 AIX 5L? 之前,您可能曾经使用过 vmtune 命令对您的 VMM 系统进行优化。尽管在 AIX Version 5.2 中提供了 vmo 命令,但 vmtune 命令也可以使用,直到 AIX Version 5.3。在 AIX Version 5.3 中,您不能够再使用 vmtune 这一命令了。尽管有一些根本的变化您需要了解,但是大多数实际参数都是相同的。

            让我们来介绍一下 AIX 5L 中页帧方面一项重要的变化。从 POWER4 处理器开始,AIX 可以支持最大 16MB 的页面大小。实际上,POWER5 芯片支持四种虚拟内存页面的大小:4KB、64KB、16MB 和 16GB。通过下面一项简单的 vmo 更改,您就可以对系统进行优化以提供大型的页面,从而对于消耗大量内存的应用程序极大地提高系统性能。性能之所以得到了改进,是因为提高了 Translation Lookaside Buffer (TLB) 的命中率,这是因为 TLB 可以映射到更大的虚拟内存范围。例如 Oracle 数据库,无论是联机事务处理 (OLTP) 或者数据仓库应用程序,都可以从大型页面的使用中获益。这是因为 Oracle 使用了大量的虚拟内存,特别是对于其系统全局区 (SGA)。这里使用的示例是一个运行 AIX Version 5.3 的 p550 LPAR 上的 Oracle 数据库服务器。该系统可用于 OLTP 和数据仓库。

清单 1 中的命令分配了 16777216 字节以提供 128 个大型页面。

清单1.分配字节

#vmo-r-olgpg_size=16777216lgpg_regions=128

                        

最重要的 vmo 设置是 minperm 和 maxperm。将这些参数设置为适合您的系统的值,以确保对计算内存或者文件内存进行优化。在大多数情况下,您并不希望调出工作段,因为这样做会导致系统进行没有必要的页面调出,并且会降低性能。以前,它的工作方式非常简单:如果您的文件页面 (numperm%) 大于 maxperm%,那么页面置换算法将仅替换文件页面。当它小于 minperm 时,可以替换文件页面和计算页面。如果它的值位于两者之间,那么将仅替换文件页面,除非重分页的文件页面的数目大于计算页面。还有另一种方法,如果您的 numperm 大于 maxperm,您可以开始替换持久的存储。基于这种方法学,早期的方法是调整您的 minperm 和 maxperm 参数,将 maxperm 设置得比较低(例如,<20),而将 minperm 设置为 <=10。您可以使用这种方法来优化您的数据库服务器。

所有的这些方法都发生了变化。新的方法将 maxperm 设置为一个比较高的值(例如,>80),并且确保将 lru_file_repage 参数设置为 0。lru_file_repage 是在带 ML4 的 AIX Version 5.2 和 AIX Version 5.3 的 ML1 中首次引入的。这个参数说明了是否应该考虑 VMM 重分页计数,以及它应该替换何种类型的内存。其缺省设置为 1,所以您需要对它进行更改。当您将这个参数设置为 0 时,它将告诉 VMM,您希望它仅替换文件页面,而不是计算页面。如果您的 numperm 小于 minperm 或者大于 maxperm,这种情况会发生变化,这正是您希望将 maxperm 设置得较高而将 minperm 设置得较低的原因。我们不应该忘记一个事实,对这个值进行优化的主要原因是因为您希望保护计算内存。回到前面的示例,Oracle 使用它自己的缓存,同时使用 AIX 文件缓存,但是却产生了混淆,所以您希望停止它。在这个场景中,如果您打算降低 maxperm,那么您将会停止正在运行的应用程序缓存程序。

清单 2 设置了这些关键的优化参数。

清单2.设置优化参数

vmo-p-ominperm%=5

vmo-p-omaxperm%=90

vmo-p-omaxclient%=90

                        

           尽管您已经习惯于对这些参数进行更改,但是现在,您只需保持 strict_maxperm 和 strict_maxclient 的缺省数值即可。如果将 strict_maxperm 更改为 1,那么它将会对可用于持久文件缓存的内存量设置一个硬限制。通过将 maxperm 值作为缓存的上限,可以实现这一点。现在,没有必要这样做,因为更改 lru_file_repage 参数是一种更加有效的优化方法,而您并不希望使用 AIX 文件缓存。

           还有两个其他的重要参数需要说明,它们是 minfree 和 maxfree。如果空闲列表中的页面数降低到低于 minfree 参数,那么 VMM 开始替换页面(只需添加到空闲列表),这样做并不是很合适。它将继续进行这项操作,直到空闲列表至少包含 maxfree 参数中指定的页面数。

           在较早版本的 AIX 中,当缺省 minfree 设置为 120 时,通常您将会看到空闲列表为 120 或者更低,而这将导致进行没有必要的分页,更糟糕的是,会阻塞那些需要空闲帧的线程,因为这个值设置得过低。要解决这个问题,在 AIX Version 5.3 中,将 minfree 和 maxfree 的缺省值分别提高到 960 和 1088。如果您正在运行 AIX Version 5.2 或者更早的版本,我建议进行下面的设置,您可以使用清单 3 中的命令,手动地进行更改。

清单3.手动地设置minfree和maxfree参数

vmo-p-ominfree=960

vmo-p-omaxfree=1088

                        

AIX Version 5.3 内存方面的变化和改进

              让我们先研究一下 AIX Version 5.3 中与内存有关的一些最新的变化。适当地使用 AIX Version 5.3 中的内存管理增强功能,可以帮助您高效地对系统进行优化。有关其他的方面,让我们介绍一下页面空间清理、动态的 xmalloc、内存关联和 Watson malloc。

页面空间清理:在某些情况下,这种特性允许系统释放分页空间磁盘块,这样一来,您就不需要为给定的工作负载配置相应的分页空间。仅在使用延迟页面空间分配策略时,才能使用这种特性。

动态的xmalloc调试(xmdbg):这种特性通过改进内存分配的整体诊断功能,提高了系统的可靠性。。它允许客户改变收集的诊断内存量,而无需重新启动。

Watsonmalloc:与内存碎片的缺省实现相比,这种新的malloc子系统能够快速处理一些小的请求。与缺省实现Yorktown相比,它所消耗的内存非常少。为了方便调试,还添加了一些新的特性,以帮助您修复各种内存分配问题。

改进的多种页面大小支持:正如前面在优化部分中所介绍的,现在有四种不同的页面大小可供使用。这些大小分别为:

4KB

64KB

16MB

16GB

VMM监视工具:一些监视工具,如vmstat和svmon,都经过了优化,以便支持POWER5体系结构的虚拟化功能。现在,它们还支持这部分内容中所介绍的一些改进功能。在本系列文章的第2部分中,我将会详细地介绍这些变化,使您能够深入地了解AIX的各种内存监视工具,以确定瓶颈、以及分析历史趋势和数据。

内存关联:对于AIXVersion5.3,您无法禁用内存关联,在AIXVersion5.2中也同样如此。这样做的目的是,在内存模块中为处理器上产生缺页的进程提供内存分配的功能。在完成了内存分配之后,处理器可以首先访问附加到其自身模块的内存,然后查找其他的模块,这样可以提高性能。要禁用AIXVersion5.2上的内存关联支持,您可以使用下面的vmo命令:vmo-omemory_affinity=0

              您还应该注意,不再需要在 rc.tune 中保存任何可调整的设置。现在,新的方法使用 /etc/tunables,这无疑是一项改进。尽管这个特性是在 AIX Version 5.2 而不是 Version 5.3 中引入的,但是仍然值得在这里进行说明。

总结

           如前所述,在您对 AIX 进行优化或监视之前,您必须设置一个基准。在进行优化之后,您必须捕获数据并分析更改所带来的结果。如果没有这类信息,您将无法了解优化工作的实际效果。在本系列文章的第 1 部分中,您了解了所有关于 AIX 的 VMM 的内容及其工作方式。您还对一个 Oracle 系统进行了调整,以优化内存子系统的使用。您研究了一些重要的内核参数、它们的用途以及如何对它们进行优化。在学习的过程中,您研究了近年来 AIX Version 5.3 中与内存有关的一些根本变化,包括某些参数和改进。

第 2 部分重点关注于系统监视的细节,以确定内存瓶颈,分析趋势和结果。第 3 部分重点关注于交换空间和对 VMM 进行优化以实现性能最大化的其他方法。 

相关推荐