您的位置:首页 > 运维架构 > Linux

Linux HugePages

2010-07-21 09:09 323 查看
*你可能已经知道:

  - 大(通常取决于建筑200万)内存页大小
  - 进程共享页表项,那么内核页表的管理费用,减少tlb的怀念
  - 永远驻留内存
  - 论Oracle11g,可以启用只有AMM的被禁用(设置为0 memory_target)
  - 马鞍山注意到361323.1(在Linux HugePages:它是什么...和什么不是...), 744769.1,748637.1
  - 类似于Solaris的ISM指数(亲密共享内存)几乎在每一个方法

现在,你可能不知道(但可能并不关心其一):

* HugePages内存只显示为居住在红帽4,而不是5内存

(实际上,它是最有可能的Linux内核,而不是红帽的版本,依赖。)在RHEL 4服务器,时
HugePages使用,'顶'或`ps的'表明,Oracle进程的驻留内存只是稍微
小于虚拟内存。但在RHEL 5,居民内存是非常小。然而,这
不改变该HugePages内存是保证事实被锁定在RAM中。大卫吉布森,一
[RHEL 5的显示非居民HugePages]必须在更广泛的事情发生了转变毫米代码“。

* vm.nr_hugepages,memlock,和SGA的大小

进程的内存锁定的限制,在/ etc /安全/在KB limits.conf中memlock,可以设置为任何数字
大于vm.nr_hugepages(在/ etc / sysctl.conf中,由Hugepagesize乘以)。但最好
设置vm.nr_hugepages只略大于总的SGA的包装盒上的所有实例的。 (不要
如果忘记任何ASM实例。)在limits.conf中的memlock单独设置不会实际设置
除了记忆,它只是一个数学数限制的内存量锁定。因此,它的确定
它设置为一个非常大的数目。但实际上vm.nr_hugepages分配内存。它不能太
盒子里装的大型或将耗尽内存或无法启动。

如果在启动实例HugePages被发现有不使用,降低了很多,SGA的再次尝试。然后
逐渐增加的SGA回来。

*不要浪费内存

如果HugePages_Free不小比HugePages_Total在/ proc / meminfo,特别是在
Oracle实例已运行了一段时间,你浪费了太多的内存分配为HugePages
不被使用,因为只有类型的SysV共享内存,如Oracle SGA中,可以使用HugePages。你
Oracle SGA而言可以增加至接近HugePages_Total(注意它的单位是Hugepagesize),或
减少HugePages_Total,最好在编辑/ etc / sysctl.conf中和运行`sysctl的- p'表示。虽然
增加HugePages动态可能无法工作,因为系统可用内存可能已经
已经支离破碎,减少它始终作品。

*检查使用情况

`猫的/ proc / meminfo'。聚焦HugePages_ *和PageTables。此外,`使用strace -架F - é过程跟踪=
sqlplus中/以SYSDBA'和启动。看看第三精氨酸shmget()为SHM_HUGETLB。 Linux的shmat()
没有这一点以便后续跟踪监听到克隆的服务器旗选项
程序将无法工作。[注一]此外,Linux没有为有- s选项`pmap'作为在Solaris检查
页面大小为一个进程的内存空间内的个人映射。[注2]

memlock影响壳的`的ulimit - l'的设置。请确保您的shell有所需的设置之前
启动数据库实例。

你可以看看数字HugePages_Free和HugePages_Rsvd当您启动或改变
关闭一个实例,它使用HugePages(grep的格局需要调整):

而真正的,不要
 因为我在$(grep的^巨大的/ proc / meminfo |头-3 | awk的'(打印$ 2)');做
  回声- N的“$ i”的
 做
 回声“”
 睡眠5


输出为)如下所示(数字HugePages_Total,HugePages_Free,HugePages_Rsvd:

512 22
b04a
5 192
512 225 192
512 225 192
512 512 0 < - 实例下来。所有HugePages释放。 (这是数据库关闭的最后一刻。)
512 512 0
512 371 338 < - 启动。第338页自由,但保留(即371-338 = 33页“真正的”自由),512-371 = 141页中使用
512 329 296 < - 512-329 = 183网页上使用,增加了183-141 = 42,保留下来的42页,“真正的”自由不变
512 227 194 < - 512-227 = 285网页上使用,增加了285-183 = 102,保留下来的102也一样,“真正的”自由不变

它表明,当实例启动时,内存页HugePages立即保留。
这是一个快速的过程,因为那里没有写入页(记得保留只是一个特殊的
自由型,见http://linux-mm.org/DynamicHugetlbPool)。然后,当页面被写入,
他们起飞的预留名单和使用。此服务器有33个“真正的”浪费免费的网页。我
可以做的更好的注意,不给他们HugePages。

请注意,旧版本的HugePages代码保留不显示网页。在Red Hat Linux中,变化是
不同RHEL 4和5。

* 11g中的AMM

11g的自动内存管理包括为美国PGA自动管理。但美国PGA不能分配
从HugePages内存。[注3]:我会成立memory_target为0来禁用的AMM和配置HugePages作为
如常。 HugePages是一个比目前更有吸引力的AMM功能。如果我牺牲了二分之一,
我牺牲的AMM。其中SGA和PGA的使用是如此不同,他们无论如何应该分开来管理。
要命名与AMM的一个问题,它需要成百上千如果不是数千描述为* *服务器
进程打开的所有* *下的/ dev /的SHM,最有可能的4 MB的每个(SGA的颗粒大小,_ksmg_granule_size的文件)。
见http://download.oracle.com/docs/cd/B28359_01/install.111/b32002/pre_install.htm#sthref71

*在11g中,由于错误9251136“实例不会使用HUGEPAGE中频通过SRVCTL”开始。根本原因
是这一进程的ulimit设置,在/ etc / security / limits.conf中()不使用。为了确认,比较
`grep的“锁定内存”的/ proc / <任何实例的过程pid> /限制与您的设置'。您可以解决
通过设置在任一$ CRS_HOME / bin中的限制/ ohasd或/ etc / init.d /的ohasd,而不是/ etc / profile文件的错误
或/ etc / init.d /的init.ohasd:

#差异/ u01/app/11.2.0/grid/bin/ohasd / u01/app/11.2.0/grid/bin/ohasd.bak
5,7 D4类
<#二千〇十万〇三百一十九YongHuang:扩大进程,以便最大锁定内存为9251136问题解决办法HugePages
<的ulimit - 1 8590000
<

*深入阅读
http://linux-mm.org/HugePages
_____________
[注一在Solaris],您可以运行`桁架的F - P <listener PID>',并连接到数据库通过
Oracle网络。该跟踪将显示如
shmat(1979711503,0x40280000000,040000)= 0x40280000000
其中04.0万是根据SHM_SHARE_MMU到/ usr /包括/ / shm.h sys。

[注2]在此之前,至少不会在你的内核补丁:http://lkml.org/lkml/2008/10/3/250。那个补丁
可能是在内核2.6.29(http://www.kernel.org/pub/linux/kernel/v2.6/)。

[注3]目前至少。见凯文克洛森的博客的更多: http://kevinclosson.wordpress.com/2007/08/23/oracle11g-automatic-memory-management-and-linux-hugepages-support/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息