1.虚拟内存管理器

AIX® 虚拟内存管理器 (AIX VMM) 是一种基于分页的虚拟内存管理器。一个分页就是一个固定大小的数据块。分页既可以位于内存中(也就是说,映射到物理内存中的某个位置)、也可以位于磁盘中(也就是说,从物理内存中替换到分页空间或者文件系统)。

AIX VMM 有一个非常独特的方面,即缓存的文件数据的管理。AIX VMM 将缓存的文件数据与对其它类型虚拟内存(例如,进程数据、进程堆栈等等)的管理集成到了一起。它将文件数据缓存为分页,就如同进程的虚拟内存一样。

2.分页的类型

本质上看,AIX 中一共有两种分页类型:

  • 工作存储分页(Working storage pages)
  • 永久存储分页(Permanent storage pages)

2.1工作存储分页区:

工作存储分页是一些包含易变 数据(换句话说,即重新启动后将不复存在的数据)的分页。

例:

  • 进程数据
  • 堆栈
  • 共享内存
  • 内核数据

被修改过的工作存储分页(其实就是这些易变数据被改过值)替换出(从内存移动到磁盘)时,它们将被写入到分页空间(swap空间)。不会将工作存储分页写入到文件系统。

注:为什么这些易变数据本不是保存在文件系统中。因为这些数据本身就不在文件中。如:有一个变量,a=0 变为了a=1。如果将其写到文件系统中,那就意味着系统直接更改了程序文件的变量初始值。那我下次在运行时a就不是0而是1。

没有修改过的工作存储分页则就直接释放

2.2永久存储

永久存储分页是一些包含永久数据(也就是说,重新启动后仍然存在的数据)的分页。这种永久数据就是文件数据。因此,永久存储分页就是缓存在内存中的部分文件。

被修改过的永久存储分页需要换出(从内存移动到磁盘)的时候,会将它写入到文件系统中。

如前所述,可以直接释放没有经过修改的永久存储分页,无需将其写入到文件系统中,因为文件系统包含该数据的原始副本。

2.2.1 永久存储划分

将永久存储分页划分为两种子类型:

  • 客户端分页(client)
  • 非客户端分页(non-client)

非客户端分页是一些包含缓存的日志文件系统 (JFS) 文件数据的分页。客户端分页是一些包含所有其他文件系统(例如,JFS2 和网络文件系统 (NFS))的缓存数据的分页。

3.分页的分类

为了帮助分页替换守护进程(lrud)更好地选择用来进行替换的分页,AIX 将分页分为下面两种类型:

  • 计算性分页(Computational)             即工作存储分页区
  • 非计算性分页(Non-computational)  即永久存储分页区

计算性分页是一些用于文本、数据、堆栈和进程的共享内存的分页。非计算性分页是一些包含正在进行读取和写入的文件的文件数据的分页。

4.分页的替换

由上面我们知道了分页就是一段内存区域。为了保证内存使用的充足。AIX会通过分页替换守护进程(lrud)一次次的扫描内存的分页,找出要回收的分页以释放内存。分页替换守护进程必须仔细地选择分页,以便将分页对系统的性能影响降到最低,并且分页替换守护进程将根据可调参数设置和系统情况来选择不同类型的分页。

4.1可调参数

4.1.1 minpermmaxperm

minpermmaxperm 是两个最基本的分页替换可调参数。这两个可调参数用于指出 AIX 内核应该使用多少内存来缓存非计算性的分页。

minperm 限制指出应该用于非计算性分页的最低内存量。

maxperm 可调参数指出应该用于缓存非计算性分页的最大内存量。注:maxperm 是一个“非严格的”限制,这意味着在某些情况下可以超出这个限制。将 maxperm 设定为非严格的限制,这允许在具有可用空闲内存的时候,可以在内存中缓存更多的非计算性文件。通过将 strict_maxperm 可调参数设置为 1,就可以使 maxperm 限制成为“严格”的限制。当 maxperm 是严格限制的时候,即使有可供使用的空闲内存,内核也不允许非计算性分页的数目超出 maxperm 的限制。)

非计算性分页的当前数目称为 numpermvmstat –v 命令可以显示系统的 numperm 值所占系统实际内存的百分比。

下面的图 1 给出了有关这些可调参数在不同的系统条件下如何进行工作的概况:

          图 1. minpermmaxperm 限制

minperm 和 maxperm 限制

当非计算性分页的数目(numperm)>= maxperm 的时候,AIX 分页替换守护进程严格地选择非计算性分页(例如,缓存的非可执行文件)进行操作。

当非计算性分页的数目(numperm)<= minperm 的时候,AIX 分页替换守护进程将选择计算性分页和非计算性分页进行操作。在这种情况下,AIX 将扫描两类分页,并且回收近来较少使用的分页。

那么:

当非计算性分页的数目(numperm)在 minpermmaxperm 之间的时候呢?

AIX 分页替换守护进程替换的分页类型将由lru_file_repage 可调参数控制(请参见图 2

4.1.2 lru_file_repage

    图 2. lru_file_repage 可调参数

lru_file_repage 可调参数

numpermminpermmaxperm 之间的时候,

如果 lru_file_repage 可调参数设置为 1,那么 AIX 分页替换守护进程将自己根据谁对系统性能影响最好,就分谁。(随机)

如果lru_file_repage 可调参数设置为 0。在这种情况下,当 numpermminpermmaxperm 之间的时候,AIX 内核始终选择非计算性的分页进行操作。

4.1.3 maxclient

除了 minpermmaxperm 可调参数之外,还有一个 maxclient 可调参数。maxclient 可调参数指定应该用于缓存非计算性客户端分页的最大内存量的限制。因为所有非计算性客户端分页是非计算性永久存储分页总数的子集,所以 maxclient 限制必须始终小于或者等于 maxperm 限制。

非计算性客户端分页的当前数目称为 numclientvmstat –v 命令可以显示系统的 numclient 值占系统实际内存的百分比。

在缺省情况下,maxclient 限制是严格的限制。这意味着,AIX 内核不允许非计算性的客户端文件缓存(numclient)超出 maxclient 限制的范围。当 numclient 达到 maxclient 限制时,AIX 内核将采用特殊的、仅客户端的模式开始分页替换。在这种仅客户端的模式中,AIX 分页替换守护进程将严格地选择客户端分页进行操作。(说明:numclient达到一定值后,分页守护进程也只会从客户端分页区(client)中下手去需求空闲内存,而不会从别的地方下手)。

5.监视内存使用情况

5.1 topas

MEMORY

 real,MB —指计算机实际拥有的内存大小

% comp —指计算性分页区占据比例(工作存储区占的内存大小)

%noncomp—非计算分页区占据比例(包括非客户端和客户端)

% client—客户端分页区占据比例(永久存储区中的client区占据比例 。例如:nfs)

PAGING SPACE

Size,MB— swap空间的大小

%used— swap空间当前使用率

5.2 vmstat 命令

vmstat 命令可以报告关于系统的内存使用信息,以及诸如分页替换这样的 VMM 操作的统计信息。

使用带 -v 选项的 vmstat 命令可以显示不同分页类型所使用的实际内存百分比(请参见清单 1):

清单 1. vmstat -v 命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# vmstat -v
       4980736 memory pages
        739175 lruable pages
        432957 free pages
             1 memory pools
         84650 pinned pages
          80.0 maxpin percentage
          20.0 minperm percentage  <<- system’s minperm% setting
          80.0 maxperm percentage  <<- system’s maxperm%
setting
           2.2 numperm percentage  << % of memory containing
non-comp. pages
         16529 file pages          <<- # of non-comp. pages
           0.0 compressed percentage
             0 compressed pages
           2.2 numclient percentage <<- % of memory containing
non-comp. client pages
          80.0 maxclient percentage <<- system’s maxclient%
setting
         16503 client pages         <<- # of client pages
             0 remote pageouts scheduled
             0 pending disk I/Os blocked with no pbuf
             0 paging space I/Os blocked with no psbuf
          2484 filesystem I/Os blocked with no fsbuf
             0 client filesystem I/Os blocked with no fsbuf
             0 external pager filesystem I/Os blocked with no fsbuf
             0 Virtualized Partition Memory Page Faults
          0.00 Time resolving virtualized partition memory page faults

因此,在上面的示例中,一共有 16529 个非计算性的文件分页被映射到了内存中。这些非计算性的分页使用了 2.2% 的内存。在这 16529 个非计算性的文件分页中,有 16503 个是客户端分页。

vmstat 输出没有提供关于计算性文件分页的信息。关于计算性文件分页的信息,可以使用 svmon 命令搜集得到。

5.3 svmon 命令

还有另一个命令可用于显示关于系统内存使用的信息,即 svmon 命令。svmon 命令支持大量不同的选项,这些选项用于提供有关系统内存使用的详细信息。

svmon 命令的 -G 选项可以显示不同类型分页所使用的内存量的信息(请参见清单 2):

清单 2. svmon 命令的 -G 选项
1
2
3
4
5
6
7
8
9
10
11
12
# svmon -G
               size      inuse       free        pin    virtual
memory       786432     209710     576722     133537     188426
pg space     131072       1121
 
               work       pers       clnt
pin          133537          0          0
in use       188426          0      21284
 
PageSize   PoolSize      inuse       pgsp        pin    virtual
s    4 KB         -     103966       1121      68929      82682
m   64 KB         -       6609          0       4038       6609

要了解系统实际内存的使用情况,svmon 显示了下面三列:

  • work——工作存储
  • pers——持久性存储(持久性存储分页都是非客户端分页,即 JFS 分页。)
  • clnt——客户端存储

对于每种分页类型,svmon 将显示下面两行:

  • inuse——映射到内存中的 4K 分页的数目
  • pin ——映射到内存中的、且固定的 4K 分页的数目(pin 是 inuse 的子集)

因此,在上面的示例中,一共有 188426 个工作存储分页映射到内存中。在这 188426 个工作存储分页中,有 133537 个是固定的(也就是说,不能换出的)。

示例中显示没有持久的存储分页(因为系统中没有使用 JFS 文件系统)。一共有 21284 个客户端存储分页,它们中没有一个是固定的。

 

posted on   进_进  阅读(1999)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示