设为首页 收藏本站
查看: 393|回复: 0

[经验分享] linux大内存页 HugePages on Linux

[复制链接]

尚未签到

发表于 2016-1-14 08:25:47 | 显示全部楼层 |阅读模式
HugePages on Linux
  HugePages是linux内核的一个特性,使用hugepage可以用更大的内存页来取代传统的4K页面。使用HugePage主要带来如下好处
  1,没有swap。Notswappable: HugePages are not swappable. Therefore there is no page-in/page-outmechanism overhead.HugePages are universally regarded as pinned.
  2,减轻快表压力。Reliefof TLB pressure:TLB表格的更小了,效率提高
  3,减轻换页表的负载。每个表单需64字节,如果管理50GB的物理内存,如果使用传统4K页面pagetable需要800M大小,而是用HugePages仅需要40M
  4,提高内存的性能,降低CPU负载,原理同上
  HugePages和oracle AMM(自动内存管理)是互斥的,所有使用HugePages必须设置内存参数MEMORY_TARGET / MEMORY_MAX_TARGET 为0
  

  配置HugePages的具体步骤
  1、修改内核参数memlock,单位是KB,如果内存是128G,memlock的大小要稍微小于物理内存。计划lock 100GB的内存大小。参数设置为大约SGA是没有坏处的。
  vi /etc/security/limits.conf
  *soft memlock 104857600
  *hard memlock 104857600
  2,使用数据库帐号验证大小
  [oracle@dtydb5 ~]$ ulimit -a|grep lock
  core file size (blocks, -c) 0
  file size (blocks, -f) unlimited
  max locked memory (kbytes, -l) 104857600
  file locks (-x) unlimited
  3,如果使用AMM内存管理,要取消改设置。MEMORY_TARGET和 MEMORY_MAX_TARGET参数设置为0
  SQL> alter system reset memory_targetscope=spfile ;
  SQL> alter system resetmemory_max_target scope=spfile;
  SQL> alter system set sga_target = 10Gscope=spfile;
  SQL> alter system setpga_aggregate_target = 4G scope = spfile;
  4,计算需要使用的hugepage页面的大小。hugepage目前只能用于共享内存段等少量内存类型,例如oracle SGA。PGA则不适用,这些内存一般不能用于其它用途,因此设置太小则不足够放下所有内存段,太大则空间浪费。
  简单的计算原理是total SGA_MAX_SIZE(多个instance的总和)/hugepagesize + N
  N为少量内存盈余,一般多出100就足够了。如果主机内存128GB,计划70GB用于SGA共享内存,则大内存页需70×1024/2=35840
  也可使用oracle提供的计算公式,基本原理是使用ipcs -m来计算共享内存段的大小。统计前注意关闭AMM;
  vi hugepages_settings.sh
  #!/bin/bash
  #
  # hugepages_settings.sh
  #
  # Linux bash script to compute values for the
  # recommended HugePages/HugeTLB configuration
  #
  # Note: This script does calculation for all shared memory
  # segments available when the script is run, no matter it
  # is an Oracle RDBMS shared memory segment or not.
  #
  # This script is provided by Doc ID 401749.1 from My Oracle Support
  # http://support.oracle.com
  
  # Welcome text
  echo "
  This script is provided by Doc ID 401749.1 from My Oracle Support
  (http://support.oracle.com) where it is intended to compute values for
  the recommended HugePages/HugeTLB configuration for the current shared
  memory segments. Before proceeding with the execution please make sure
  that:
  * Oracle Database instance(s) are up and running
  * Oracle Database 11g Automatic Memory Management (AMM) is not setup
  (See Doc ID 749851.1)
  * The shared memory segments can be listed by command:
  # ipcs -m
  
  Press Enter to proceed..."
  
  read
  
  # Check for the kernel version
  KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`
  
  # Find out the HugePage size
  HPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'`
  
  # Initialize the counter
  NUM_PG=0
  
  # Cumulative number of pages required to handle the running shared memory segments
  for SEG_BYTES in `ipcs -m | awk '{print $5}' | grep "[0-9][0-9]*"`
  do
  MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
  if [ $MIN_PG -gt 0 ]; then
  NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
  fi
  done
  
  RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`
  
  # An SGA less than 100MB does not make sense
  # Bail out if that is the case
  if [ $RES_BYTES -lt 100000000 ]; then
  echo "***********"
  echo "** ERROR **"
  echo "***********"
  echo "Sorry! There are not enough total of shared memory segments allocated for
  HugePages configuration. HugePages can only be used for shared memory segments
  that you can list by command:
  
  # ipcs -m
  
  of a size that can match an Oracle Database SGA. Please make sure that:
  * Oracle Database instance is up and running
  * Oracle Database 11g Automatic Memory Management (AMM) is not configured"
  exit 1
  fi
  
  # Finish with results
  case $KERN in
  '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
  echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;
  '2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
  *) echo "Unrecognized kernel version $KERN. Exiting." ;;
  esac
  
  # End
  5,修改vm.nr_hugepages参数,值为上步计算的数值
  vi /etc/sysctl.conf
  vm.nr_hugepages = 1496
  sysctl -p 命令使配置生效。
  6,关闭数据库,重启主机和数据库(理论上不需要重启主机,建议重启)
  7,验证是否设置正确
  grep HugePages /proc/meminfo
  HugePages_Free小于HugePages_Total的值则表示设置成功。如果HugePages_Rsvd应该保持少量保留内存。
  注意,HugePages如果配置不恰当会引起系统性能下降等风险,需要慎重。
  参考资料
  HugePages on Linux: What It Is... and WhatIt Is Not... [ID 361323.1]
  HugePages on Oracle Linux 64-bit [ID361468.1]

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-164101-1-1.html 上篇帖子: Linux下gcc与gdb简介 下篇帖子: Linux内核TCP/IP参数分析与调优
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表