本文主要是介绍Redhat:HugePage,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、HugePage 介绍
在操作系统Linux环境中,内存是以页Page的方式进行分配,默认大小为4K。如果需要比较大的内存空间,则需要进行频繁的页分配和管理寻址动作。HugePage是传统4K Page的替代方案。顾名思义,是用HugePage可以让我们有更大的内存分页大小。无论是HugePage还是传统的正常Page,这个过程都涉及到OS内存寻址过程。
当一个进程访问内存的时候,并不是直接进行内存位置访问,是需要通过Page Table进行转移变换。在使用HugePage的情况下,PageTable具有了额外的属性,就是判断该页记录是HugePage还是Regular Page。
二、信息查看
- 系统
uname -r - 查看共享段
ipcs -m - 查看大页信息
grep Huge /proc/meminfo
三、配制大页
- 确定内存大小
free -g - 计算HugePages_Total:脚本见401749.1
执行脚本,注意这个过程中要求Oracle所有实例,包括数据库和ASM都启动、AMM关闭,以及SGA大小超过100M。 - 修改/etc/security/limits.conf参数文件,添加数据库实例用户的memlock限制。
这个过程中使用memlock标记,用于设置每个用户允许的最大内存使用情况。这个取值可以设置为数据库服务器物理内存大小。
注意:可用内存>value(锁定内存)>=HugePages_Total*Hugepagesize
HugePagesize:
vi /etc/security/limits.conf
# 添加 oracle soft memlock value oracle hard memlock value
- 验证limit
ulimit -l - 更改参数/etc/sysctl.conf
vm.nr_hugepages = HugePages_Total值(见第2步) - 重启系统及数据库
- 验证
grep Huge /proc/meminfo
四、关闭大页
- 方法一:优先方法是修改/boot/grub/grub.conf文件,在kernel行的后面加上"transparent_hugepage=never":
title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg_xty64-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_xty64/lv_root rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_NO_DM KEYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=vg_xty64/lv_swap transparent_hugepage=never initrd /initramfs-2.6.32-358.el6.x86_64.img
- 在/etc/rc.local中加入下面的代码行:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi
- 重启后校验:
cat /sys/kernel/mm/transparent_hugepage/defrag always [never] cat /sys/kernel/mm/transparent_hugepage/enabled always [never]
- 如果结果非预期,可能是由于Linux的ktune和tuned服务所导致。在此种情况下,建议关闭这两项服务:
service tuned stop chkconfig tuned off service ktune stop chkconfig ktune off或者: tuned-adm off
五、和 Oracle 的关系
- AMM简介:SGA 在 Linux中是通过系统共享内存实现,而PGA是通过进程私有空间实现。AMM实际上最大的功能是将SGA和PGA空间调节的通道打通,这必然带来对原有SGA共享内存方式架构的影响。在AMM时,ipcs –m显示的虚拟空共享段就是实际效果的一部分。
- AMM & HugePage
AMM是不支持HugePage的,如果强在AMM+HugePage模式下打开数据库,是会遇到失败信息。所有使用HugePages必须设置内存参数MEMORY_TARGET / MEMORY_MAX_TARGET 为 0
如果使用了大内存和SGA,那么HugePage对提高数据库性能就非常重要。如果数据库SGA脚本,比如超过8G(个人经验:建议SGA>32GB),就需要配置HugePages。配置HugePages 有如下好处:- 大页和普通页:传统页大小是4K而hugeLTB大小 2048k。这意味着系统需要处理512倍传统页面。
- 减少PageTable检索负载:更小的PageTable意味着更快的检索定位能力;
- 内存性能提升:Page数量减少、大小的增加,减少了管理过程的复杂性,进一步减少了瓶颈出现的概率;
- 非Swap内存:当开启HugePage的时候,HugePage是不会Swap的;
- 减少Page Table空间负载:在PageTable管理中,每条Page记录是要占据64byte的空间的。也就是说,如果一块50G的RAM,4k大小的PageTable要有80MB左右;
六、参考资料
- HugePage说明详见:HugePages on Oracle Linux 64-bit (文档 ID 361468.1)
- AMM & oracle兼容性详见:HugePages and Oracle Database 11g Automatic Memory Management (AMM) on Linux (文档 ID 749851.1)
- HugePage大小获取脚本:Oracle Linux: Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (文档 ID 401749.1)
- HugePageSize大小:HugePages on Linux: What It Is... and What It Is Not... (文档 ID 361323.1)
这篇关于Redhat:HugePage的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!