mophis
作者mophis·2011-07-28 11:08
软件开发工程师·杭州

优化 AIX 7 内存性能: 第 1 部分,内存概述和内存参数的调优

字数 8935阅读 2590评论 3赞 0

简介

作为系统管理员,您应该已经对内存的基本知识非常熟悉了,如物理内存和虚拟内存之间的区别。您可能还不很清楚 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 中可以看到一个示例。


清单 1. 获取活动内存扩展统计数据
Command Invoked : amepat 1 1 Date/Time of invocation : Fri Aug 13 11:43:45 CDT 2010 Total Monitored time : 1 mins 5 secs Total Samples Collected : 1 System Configuration: --------------------- Partition Name : l488pp065_pub Processor Implementation Mode : POWER7 Number Of Logical CPUs : 4 Processor Entitled Capacity : 0.25 Processor Max. Capacity : 1.00 True Memory : 2.00 GB SMT Threads : 4 Shared Processor Mode : Enabled-Uncapped Active Memory Sharing : Disabled Active Memory Expansion : Disabled System 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 GB Achievable Compression ratio :2.10 Expansion 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 LPAR with a memory size of 1.75 GB and to configure a memory expansion factor of 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 for the LPAR is 0.04 physical processors. NOTE: amepat's recommendations are based on the workload's utilization level during the monitored period. If there is a change in the workload's utilization level or a change in workload itself, amepat should be run again.

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

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


清单 2. 使用 svmon 获取压缩统计数据
# svmon -G -O summary=longame,unit=MB Unit: MB Active Memory Expansion -------------------------------------------------------------------- Size Inuse Free DXMSz UCMInuse CMInuse TMSz TMFr 1024.00 607.91 142.82 274.96 388.56 219.35 512.00 17.4 CPSz CPFr txf cxf CR 106.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),这个区域用于缓存表数据和其他东西。

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


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

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

最重要的 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 7 文件缓存只会产生混乱,所以希望停止它。在这个场景中,如果降低 maxperm,那么会错误地停止正在运行的应用程序缓存程序。

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


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

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

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

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


清单 5. 手动设置 minfree 和 maxfree 参数
vmo -p -o minfree=960 vmo -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 页面。

结束语

如前所述,在对 AIX 7 进行优化或监视之前,必须建立一个基准。在进行调优之后,必须捕捉数据并分析更改的结果。如果没有这类信息,就无法真正了解调优工作的实际效果。在本系列的第 1 部分中,我们讨论了使用 VMM 提升系统内存容量的效果。还对一个 Oracle 系统进行了调优以优化内存子系统的使用。研究了一些重要的内核参数、它们的作用以及如何对它们进行调优,包括如何最适当地使用可变页面大小支持。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论3 条评论

aix_louxlaix_louxl工程师杭州
2011-12-27 14:45
牛!
gs1986gs1986工程师尖峰合讯
2011-09-19 15:42
hankexiahankexia数据库管理员rion
2011-08-18 08:16
很好很强大
Ctrl+Enter 发表

作者其他文章

X社区推广