Hugepages介绍和配置

本文是我对一篇讲hugepages的文章的一个总结提炼,原文写得很好,想细读的可以戳链接:http://www.tuicool.com/articles/vYZJ3i3

先介绍下SGA:系统全局区是Oracle Instance的基本组成部分,在实例启动时分配。用于存储数据库信息的的内存区,该信息为数据库进程共享。包含Oracle服务器的数据和控制信息。包括共享资源池和缓冲区。我觉得可以把它理解成数据库的缓冲区,下文会经常提到。

再讲linux内存分配机制: 早期因为程序内存很小,程序的内存地址是直接映射到物理地址上的。后来使用“段页式”来管理内存的寻址。就是引入了虚拟化。现代操作系统中使用受保护的虚拟地址模式(protected virtual address mode)来管理内存,linux下分为三类地址:逻辑地址、线性地址、物理地址。
简单讲就是逻辑地址通过分段机制映射转换为线性地址,线性地址通过分页机制映射转换为物理地址。地址映射过程很复杂,不细讲,感兴趣再查。线性地址映射为物理地址的过程中,需要从内存中多次读取页目录表和页表(page table)。X86架构中引入了TLB的硬件级缓存,保存了最近使用过的线性地址和物理地址的映射关系。
将线性地址映射为物理地址的过程如下:首先到TLB中去找,不存在则为TLB miss,然后使用页表寻址,最后更新TLB。优化措施:1.同时去TLB和页表中查询;2.使用多级TLB和软TLB;3.在cpu context switch的时候不flush整个TLB(系统会定时、定期、定量地将缓存刷到硬盘里,然后释放内存,这叫flush)。
在做大内存管理的时候,page table效率很低,于是引入了hugepages。
page table大小是固定的,跟架构有关,修改不了。一般都是4KB。
使用hugepages的好处:1.避免SGA交换出去。2.减轻TLB的压力。3.减少页表开销。4.减少页表开销。5.减少页表查询。
sar -B和vmstat -s 可以查看page in和page out
cat /proc/meminfo 里面可以看到page的使用量

在linux系统中,有两种方式可以用来使用hugepages。一种是2.6内核引入的hugetlbfs虚拟文件系统,另一种是从2.6.38引入的THP(transparent Hugepages). hugetblfs主要用于数据库,需要专门进行配置以及应用程序的代码支持,THP可用于更广泛的应用程序,一切交给操作系统完成。
创建hugetblfs文件系统,挂载到某一目录,echo 25000 > /proc/sys/vm/nr_hugepages
要重启生效的话需把vm.nr_hugepages=25000加到/etc/sysctl.conf内核配置文件里。
linux平台无法从操作系统层面得知数据库是不是真正使用的hugepages。我们可以通过strace跟踪数据库的启动过程,发现其调用了shmget,并且第三个参数为SHM_HUGETLB标志。因此确定数据库使用的hugepages。
在 /proc/meminfo中也可以看到
数据库实例设置的SGA大小如果比hugepages总的大小还要大,则SGA无法使用hugepages的内存。
还可以cat /proc/<pid>/smaps来查看是否使用了hugepages。

配置方法:
1.首先要配置memlock
在/etc/sycurity/limits.conf最后添加:
oracle hard memlock lock_value
oracle soft memlock lock_value
上述的lock_value使用比SGA值略大的一个值替代。
2.估算hugepages大小
#hugepages=(SGA(MB)+(20k * # of Oracle processes running)/1024) / hugepage_size (MB) 例如:如果sga的大小为64G,运行的oracle进程数为1000, 那么则大致需要32777个hugepages。
3.设置hugepages内核参数
运行hugepages_settings.sh(这个脚本也是用来估算hugepages的),得到一个值,写入/etc/sysctl.conf

更加详细的内容看这里 http://www.tuicool.com/articles/vYZJ3i3



  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值