1,概要 在IBM pSeries690系统中使用的POWER4TM处理器支持两种形式的内存页。除传统POWER架构的4K内存页外,同时支持新的16MB的大内存页。运行于POWER架构的AIX 5LTM版本5.1,需安装系统补丁02,才能支持16M大小的内存页。这篇文章主要介绍AIX操作系统对大内存页的支持,及客户如何配置、使用大内存页,应用程序如何申请大内存页。
2,基本知识介绍 大内存页的设计使用,起初是为了提高高性能计算应用程序的性能。对一些内存敏感型的应用,使用大内存页也可以提高性能。使用大内存页的性能提高,归功于TLB操作的失误率降低,提高了内存的预取能力。
POWER4大内存页架构要求,在同一个256M内存段中的所有虚拟内存页都是同样的大小。AIX 使用这种架构支持混合模式的进程模型,在一个进程中,有些内存段支持4KB的内存页,而另外一些内存段则支持16MB的内存页。应用可以请求其堆栈段支持大内存页,也可以请求共享内存段支持大内存页,在一个进程中的其他内存段支持4KB的内存页。
AIX大内存页支持32位和64位的应用程序,32位和64位的AIX核心都支持大内存页的使用。
AIX分别维护4KB和16MB大小的物理内存池,系统管理员可以通过vmtune命令指定16MB的内存池的物理内存大小,这些指定数量的物理内存将在系统启动时分配给16MB的内存池,剩余的物理内存将使用4KB的内存页。16MB的内存池的数量是固定的,并且只有在系统重新启动时才会改变。
AIX将大内存页视为固定内存(pinned memory),对大内存页AIX并不提供换页功能。大内存页支持的应用程序,其数据将保留在内存中直至程序运行结束。安全的控制策略将阻止未赋权的应用使用大内存页,这可以防止未赋权的应用使用大内存页的物理内存,同时也防止未赋权用户从他们的应用中使用大内存页。
3,使用大内存页的应用程序 应用程序可以通过两种方式使用大内存页: 1) 请求大内存页支持其数据段和堆栈段 2) 请求共享内存段支持大内存页
3.1 数据段和堆栈段使用大内存页 应用程序可以请求其初始化的程序数据、位初始化的程序数据(BSS)和堆栈段使用大内存页, 可以有两种方法请求大内存页支持应用程序的数据/堆栈段: 1) 标示可执行文件使用大内存页 2) 设置环境变量请求使用大内存页 应用程序大内存页的数据/堆栈段的使用是在程序运行时建立的,程序运行后不能在两种模式间切换,如果使用fork()创建进程,子进程可以继承大内存页的使用。
3.1.1 标示执行程序使用大内存页 在可执行程序的XCOFF结构中增加了一个新的标示表明程序将使用大内存页支持其数据/堆栈段。这个标示可以在程序链接时设置,相应的ld的对应参数为-blpdata,也可以直接使用命令ldedit在可执行程序中设置,如下: ldedit -blpdata executed_file_name 相反,如果我们不想使用大内存页,也可以使用ldedit命令清除此标示,如下: ldedit -bnolpdata executed_file_name
3.1.2 使用环境变量标示使用大内存页 系统提供了相应的环境变量,允许用户自主设置,标示相应应用的数据/堆栈段使用大内存页。 环境变量的优先级高于程序XCOFF结构中的标示,对应的环境变量为LDR_CNTRL。 LDR_CNTRL环境变量的设置如下: 1) LDR_CNTRL=LARGE_PAGE_DATA=Y 指定程序的数据/堆栈段使用大内存页,等同于-blpdata参数项
2) LDR_CNTRL=LARGE_PAGE_DATA=N 指定程序的数据/堆栈段不能使用大内存页,此项设置的优先级高于可执行程序XCOFF结构中的大内存页标示
3) LDR_CNTRL=LARGE_PAGE_DATA=M 指定程序的数据/堆栈段强制使用大内存页如果LDR_CNTRL环境变量使用多组值,使用@符号分割,例如: LDR_CNTRL=MAXDATA=0X80000000@LARGE_PAGE_DATA=Y 表示大内存页同maxdata项同时使用。 另外,应当注意,大内存页的使用可以提高应用的性能,但这并不一定是,对某些应用也可能会使得相反。性能测试表明,当大量的shell脚本,或者小,短运行应用被调用时,此环境变量的设置,将会应起显著的性能损失。测试表明当指定大内存页的环境变量时,脚本程序的执行次数增加超过10倍。 所以,建议用户在设定此环境变量时应针对指定的应用程序。
3.1.3 顾问(advisory)模式和强制(mandatory)模式 应用程序可以指明其数据/堆栈段使用大内存页,或者在顾问模式下,或者在强制模式下。在顾问模式下,只有以下条件都满足时,应用程序才可能使用大内存页方式: 1) 用户ID被赋权使用大内存页 2) 运行系统具有POWER4大内存页架构特点 3) 用户定义了大内存页的内存池 4) 使用大内存页的内存池有足够的内存页支持应用 如果以上的条件都满足,则应用程序将采用大内存页的方式,不然,应用程序的数据/ 堆栈段则采用传统的4KB大小页面。 在顾问模式下,应用程序可以使部分堆栈段使用大内存页,而另一些堆栈段使用4KB的内存页。当没有足够多大内存页的内存段支持时,4KB的内存页用于支持这些内存段。 在强制模式下,如果应用程序请求的堆栈段没有足够的大内存页支持,应用将终止。使用强制模式,用户必须监控大内存页内存池的使用,以保证有足够的内存使用。
3.1.4 大内存页数据/堆栈段的完全支持 POWER4的设计架构要求在同一个内存段的所有的内存页必须是通用的大小。当应用请求大内存页的堆栈段时,AIX支持整个内存段使用都是用大内存页,即使在新的内存段中只有几个字节的内存请求,整个的内存段也支持。当应用增加内存使用时,这样做可以保证应用不会被终止。
3.2 使用大内存页支持共享内存段 AIX使用POWER4大内存页的架构设计提供共享内存段的大内存页支持,应用程序可以通过shmget() 函数获得大内存页的支持,其调用标示为LHM_LGPAGE和LHM_PIN。 支持大内存页的共享内存和大内存页的数据/堆栈段的物理内存则来自于大内存页的物理内存池。 用户必须规划其大内存页的物理内存池,以保证有足够的大内存页供共享内存和数据/堆栈段的大内存页使用。
3.3 大内存页的安全策略 AIX提供一种安全机制控制非超级用户使用大内存页的物理内存。大内存页的物理内存池时固定大小的,为固定内存的系统资源(pinned memory)。这种安全机制阻止为赋权用户使用大内存页的内存池,同时也控制相应用户或者应用的内存使用。 非超级用户如果要使用大内存页内存,必须具有CAP_BYPASS_RAC_VMM属性,系统管理员可以改变用户的属性,增加或删除用户属性项,例如,以下命令将CAP_BYPASS_RAC_VMM属性赋给用户lpuserid chuser capabilities=CAP_BYPASS_RAC_VMM, CAP_PROPAGATE lpuserid
3.4 配置系统使用大内存页 要使用大内存页,用户必须配置系统相关的参数,用户必须指定支持大内存页的物理内存的大小,确省情况下,系统不支持大内存页的内存使用,如要配置使用大内存页,使用vmtune或vmo命令配置支持大内存页的物理内存池。举例如下,配置4GB的大内存页物理内存池,使用命令vmtune,如下: vmtune -g 16777216 -L 256 参数分析: -g指定大内存页的大小,单位为字节,允许的值为16777215(16MB)或者268435456(256MB) -L指定-g参数指定大小的内存块数 要是配置的参数起作用,用户必须重新创建引导介质,并且重新启动机器,新的配置才生效。 用户如果要共享内存页使用大内存页,在调用shmget()系统调用时必须使用SHM_PIN标示符。命令vmtune可以使SHM_PIN参数起作用,参数SHM_PIN在机器重新启动后将失效,如果要求此参数在启动后即生效,可以将如下命令添加到/etc/inittab文件中,如下: vmtune -S 1
4,决定大内存页的内存池的注意事项 1) 申请支持大内存页的物理内存池不再支持4KB的内存页,如果申请过多的物理内存为大内存页的空间,而没有足够的物理内存给4KB的内存页使用,将会造成系统性能降低。系统引导过程中,AIX为4KB大小的内存页保留足够的物理内存以保证系统可以正常启动,然而,如果没有足够的物理内存支持4KB的内存页,系统也可能会在启动后失败。 2) 使用大内存页的内存池是固定的,即使在启动后也保持不变,如果,修改了使用大内存页的内存池,则需重新启动机器 3) 大内存页只是提供明确请求使用的应用使用,如果应用没有请求大内存页支持,支持大内存页的内存池不是必需的 4) 顾问模式(advisory mode)下,如果大内存页的使用条件满足,则使用大内存页,反之则使用传统的4KB的内存页 5) 强制模式(mandatory mode)下,如果大内存页的条件不满足,则应用失败
5,大内存页的使用建议 对某些特殊应用,大内存页是系统性能提高的特殊方法,对普通的应用,并不推荐使用。大内存页的使用主要是针对这些大量使用内存的应用,有些应用使用大内存页反而会出现性能下降,对大量使用fork()的应用,如shell脚本,使用大内存页,会较明显的出现性能下降。 考虑到系统全面的性能,可以在系统中保留大内存页,对某些特殊的应用可以使用大内存页,但应当考虑到,由于大内存页的内存池的存在会降低4KB的内存页的使用空间,潜在的会影响到系统的性能。
备注 大内存页的两种使用模式,英文为advisory mode和mandatory mode在此权且译为顾问模式和强制模式,不当之处,敬请执教。 |