AIX 7 利用 POWER7 CPU 改进 LPAR 的内存使用情况。尽管内存调优可能比处理器或磁盘调优更难实现,但它同样是非常重要的。在 AIX 7 服务器中,与任何其他子系统相比,可以对内存进行更多的调优工作。更改系统中的某些内存参数可以极大地提高性能,特别是在这些参数尚未针对运行环境优化的情况下。这个分为三部分的内存调优系列深入讨论调优参数,主要关注优化内存性能的许多难题和各种最佳实践,还要讨论 AIX 6 和 AIX 7 中的一些改进。第 1 部分概述 AIX 中的内存,包括讨论虚拟内存和虚拟内存管理器(VMM)。

简介

作为系统管理员,您应该已经对内存的基本知识非常熟悉了,如物理内存和虚拟内存之间的区别。您可能还不很清楚 AIX 7 中的虚拟内存管理器(VMM)是如何工作的,以及它与性能调优之间的关系如何。在 AIX 7 中,还有必要考虑虚拟内存的影响以及在工作负载分区(WPAR)中如何使用和应用它。本文将介绍一些可以用来优化系统的监视工具,概述一些比较重要的 AIX 7 内存管理功能,包括虚拟内存管理器是如何工作的以及动态可变的页面大小的影响。通过将这些增强功能的实现应用于系统环境,可以在系统中优化内存性能。

尽管您可能会发现,与其他子系统相比,内存的调优更为困难,但是收到的效果往往更加显著。根据所运行的系统的类型,可能还有一些应该在系统中采用的特定的调优建议。为了帮助说明这些内容,我将使用一个特定的示例并讨论设置这些参数的一些最佳实践。在某些情况下,动态地调整一两个参数可能会使系统的总体性能产生显著的变化。

无论要对哪个子系统进行调优,有一个方面是相同的,即始终应该将系统调优看作一个正在进行的过程。开始对系统进行监视的最佳时间是在首次将系统应用到生产环境中并正常运行时(而不是等到用户抱怨系统性能非常糟糕的时候)。必须在系统正常运行的时候建立系统运行状态的基准,这样在系统可能不正常时才能确认是否真的有问题。另外,应该一次仅进行一项更改,应该在更改之后尽快捕捉并分析数据,以便判断更改的影响(如果有影响的话)。

内存概述

本节概述与 AIX 7 有关的内存知识。我们将介绍 AIX 7 如何使用虚拟内存来寻址比系统物理内存更大的内存。还将解释 VMM 的工作方式以及它如何处理各种请求。

任何有关内存和 AIX 7 的讨论都必须先介绍 VMM。有时候,令 AIX 新手感到吃惊的是 VMM 处理系统的所有内存请求,而不仅仅是虚拟内存本身。在访问 RAM 时,VMM 需要分配空间,即使是在系统中有足够的物理内存的情况下。它实现分页空间的预分配过程。通过使用这种方法,VMM 在帮助管理实际内存方面扮演了重要的角色,而不仅是在虚拟内存方面。

下面说明它的工作原理。在 AIX 7 中,将所有的虚拟内存段划分为若干个页面。在 AIX 7 中,每个页面的默认大小为 4KB,但是可以根据使用的处理器环境在不同的范围内调整。POWER5+ 或更高版本的处理器也可以使用 64KB、16MB 和 16GB 的页面大小。POWER4 架构也可以支持 16MB 的页面大小。16MB 的页面称为大页面,16GB 称为超大页面,它们用于内存需求非常大的应用程序。

在 POWER6 中,引入了可变页面大小支持(VPSS),这意味着当应用程序需要更大的内存块时,系统将使用更大的页面。可以在 OS 中同时使用不同的页面大小,不同的应用程序使用不同的页面大小。另外,可以动态地改变页面大小,这会收集 4KB 页面以形成 64KB 的页面。这让应用程序能够访问更大的内存块,而不是许多小内存块,从而提高性能。页面大小可以动态地从 4KB 改为 64KB。可以使用 vmo 调优工具管理 VPSS 的调优。

所分配的页面可以位于 RAM 或者分页空间(存储在磁盘上的虚拟内存)。VMM 还维护一个称为空闲列表 的对象,此对象定义为未分配的页帧。它们用于处理缺页的情况。通常存在非常少的未分配页面(可以自行配置),VMM 使用这些页面来腾出空间并为其重新分配页帧。使用 VMM 的页面置换算法来选择要重新分配页帧的虚拟内存页面。这种分页算法决定对当前位于 RAM 中的哪些虚拟内存页面的页帧进行回收,并放回到空闲列表中。AIX 7 使用所有可用的内存,除了那些配置为未分配并用作空闲列表的内存之外。

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

计算内存

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

文件内存

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

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

活动内存扩展

除了核心内存设置和环境之外,AIX 7 还可以利用 POWER7 CPU 提供活动内存扩展(AME)。

AME 压缩内存中的数据,这样就可以在内存中保存更多的数据,还可以减少在装载数据时换出到磁盘的页面数量。AME 的配置针对各个 LPAR,因此可以为数据库分区启用它,以便在内存中保存更多从磁盘读取的数据,同时对 web 服务器禁用它(对于 web 服务器,存储在内存中的信息经常要换出)。

为了避免压缩所有信息,内存划分为两个池,一个压缩的池和一个不压缩的池。AIX 7 会根据逻辑分区的工作负载和配置自动地调整这两个池的大小。用压缩率定义压缩量,例如如果分配给 LPAR 的内存量是 2048MB,可以指定压缩率为 2.0,那么有效的内存容量就是 4096MB。

因为不同的应用程序和环境能够采用不同的压缩率(例如,使用大量文本的应用程序可以受益于比较高的压缩率),可以使用 amepat 命令进行监视,判断对于给定的工作负载可能实现的压缩率。

在运行正常应用程序的同时,在后台以一定的时间间隔(以分钟为单位)运行 amepat 一定的次数。这会提供在 LPAR 中使用的压缩率的建议。在 中可以看到一个示例。

清单 1. 获取活动内存扩展统计数据
Command Invoked                : amepat 1 1 Date/Time of invocation        : Fri Aug 13 11:43:45 CDT 2010Total Monitored time           : 1 mins 5 secsTotal Samples Collected        : 1System Configuration:---------------------Partition Name                 : l488pp065_pubProcessor Implementation Mode  : POWER7Number Of Logical CPUs         : 4Processor Entitled Capacity    : 0.25Processor Max. Capacity        : 1.00True Memory                    : 2.00 GBSMT Threads                    : 4Shared Processor Mode          : Enabled-UncappedActive Memory Sharing          : DisabledActive Memory Expansion        : DisabledSystem Resource Statistics:               Current---------------------------          ----------------CPU Util (Phys. Processors)               0.04 [  4%]Virtual Memory Size (MB)                  1628 [ 79%]True Memory In-Use (MB)                   1895 [ 93%]Pinned Memory (MB)                        1285 [ 63%]File Cache Size (MB)                       243 [ 12%]Available Memory (MB)                      337 [ 16%]Active Memory Expansion Modeled Statistics         :-------------------------------------------Modeled Expanded Memory Size :   2.00 GBAchievable Compression ratio   :2.10Expansion    Modeled True      Modeled              CPU Usage  Factor       Memory Size       Memory Gain          Estimate     ---------    -------------     ------------------   -----------          1.00          2.00 GB         0.00 KB [  0%]   0.00 [  0%]     1.14          1.75 GB       256.00 MB [ 14%]   0.00 [  0%]Active Memory Expansion Recommendation:---------------------------------------The recommended AME configuration for this workload is to configure the LPARwith a memory size of 1.75 GB and to configure a memory expansion factorof 1.14.  This will result in a memory gain of 14%. With this configuration, the estimated CPU usage due to AME is approximately 0.00 physical processors, and the estimated overall peak CPU resource required forthe LPAR is 0.04 physical processors.NOTE: amepat's recommendations are based on the workload's utilization levelduring the monitored period. If there is a change in the workload's utilizationlevel or a change in workload itself, amepat should be run again.

amepat 报告的活动内存扩展 CPU 使用量只是估计值。根据工作负载不同,AME 实际的 CPU 使用量可能更低或更高。

可以使用 svmon 工具监视 LPAR 中当前的压缩情况,见 。

清单 2. 使用 svmon 获取压缩统计数据
# svmon -G -O summary=longame,unit=MBUnit: MBActive Memory Expansion--------------------------------------------------------------------Size     Inuse   Free  DXMSz UCMInuse CMInuse TMSz    TMFr1024.00 607.91 142.82 274.96 388.56   219.35   512.00 17.4CPSz CPFr txf cxf CR106.07 18.7 2.00 1.46 2.50

在这里,DXMSz 栏非常重要,它表示扩展内存的赤字。当无法达到指定的压缩率,系统开始使用无法通过压缩节省出的内存时,就会出现赤字。因此,应该注意不要指定过高的压缩率。

AME 的另一个重要问题是,vmstat 等大多数工具显示的内存大小通常是扩展内存的大小(即配置的内存乘以压缩率),而不是实际内存大小。要想查明在不压缩的情况下可用的实际内存,应该在不同工具的输出中寻找真实内存大小。

调优

我们来研究一些可以用来调优 VMM 以优化系统性能的工具。下面是一个环境示例,我们要在其中使用某种方法进行参数调优。我要介绍一些需要注意的关键参数。

在 AIX 7 中,由 vmo 工具负责 VMM 系统的可调参数的所有配置。它替代 AIX 5 中的 vmtune 工具。

更改页面大小可以最直接地提高性能,这是因为 Translation Lookaside Buffer (TLB) 现在可以映射到更大的虚拟内存范围,从而提高 TLB 的命中率。例如,对于高性能计算(HPC)或 Oracle 数据库,无论是在线事务处理(OLTP)还是数据仓库应用程序,都可以受益于大页面的使用。这是因为 Oracle 使用大量的虚拟内存,特别是对于其系统全局区域(SGA),这个区域用于缓存表数据和其他东西。

中的命令分配 16777216 字节以提供 128 个大页面。

清单 3. 分配字节
# vmo -r -o lgpg_size=16777216 lgpg_regions=128

如果希望与 HPC 和数据库应用程序中常用的共享内存结合使用大页面,还需要设置 v_pnshm 值:# vmo -p -o v_pinshm=1

最重要的 vmo 设置是 minpermmaxperm。将这些参数设置为适合自己系统的值,以确保针对计算内存或者文件内存进行优化。在大多数情况下,并不希望换出工作段,因为这样做会导致系统进行不必要的页面换出,会降低性能。以前,它的工作方式非常简单:如果文件页面数量(numperm%)大于 maxperm%,那么页面置换过程仅偷取文件页面。当它小于 minperm 时,可以偷取文件页面和计算页面。如果它的值介于两者之间,那么仅偷取文件页面,除非重新分页的文件页面的数量大于计算页面。还有另一种考虑方法,如果 numperm 大于 maxperm,就开始偷取持久的存储。基于这种原理,以前调整 minpermmaxperm 参数的方法是,将 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 7 文件缓存只会产生混乱,所以希望停止它。在这个场景中,如果降低 maxperm,那么会错误地停止正在运行的应用程序缓存程序。

设置这些关键的调优参数。

清单 4. 设置调优参数
vmo -p -o minperm%=5vmo -p -o maxperm%=90vmo -p -o maxclient%=90

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

还有两个重要的参数需要注意,它们是 minfreemaxfree。如果空闲列表中的页面数降低到低于 minfree 参数,那么 VMM 开始偷取页面(仅仅是为了把页面添加到空闲列表中),这样做并不好。它将继续进行这种操作,直到空闲列表至少包含 maxfree 参数中指定的页面数。

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

清单 5. 手动设置 minfreemaxfree 参数
vmo -p -o minfree=960vmo -p -o maxfree=1088

配置可变页面大小支持

VPSS 通过使用默认的 4KB 页面大小起作用。假设给应用程序分配了 16 个 4KB 的块,当前所有的块都在使用,那么它们被提升为一个 64KB 的块。重复执行这个过程,处理应用程序正在使用的连续 16 个 4KB 块的所有序列。

两个可配置参数控制 VPSS 的运行方式。第一个参数启用多种页面大小支持。通过 vmo 配置的 vmm_support 可调项设置 VPSS 的运行方式。0 值表示只支持 4KB 和 16MB 的页面大小。1 值允许 VMM 使用处理器支持的所有页面大小。2 值允许 VMM 对每个段使用多种页面大小,这是所有全新安装的默认设置。

在启用多种页面大小支持的情况下,vmm_default_pspa 参数控制提升为 64KB 页面需要多少个连续的 4KB 页面。一些应用程序(尤其是使用大量内存的应用程序)使用 64KB 页面大小可能性能更好,即使它们不使用完整的 64KB 页面。

在这种情况下,可以使用 vmm_default_pspa 参数指定提升需要的 4KB 页面数小于 16 个,表示为百分数形式。默认值 0 表示需要 16 个页面。50 表示只需要 8 个页面。0 值表示把所有 4KB 页面提升为 64KB 页面。

转载至https://www.ibm.com/developerworks/cn/aix/library/au-aix7memoryoptimize1/index.html