Linux的透明大页如何启用禁用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux的透明大页如何启用禁用相关的知识,希望对你有一定的参考价值。

参考技术A

  Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。这片文章介绍了Linux的Transparent HugePages,一是介绍了查看是否启用透明大页,二是如何启用、禁用透明大页,需要的朋友可以参考下

  禁用、启用透明大页功能

  方法1:设置/etc/grub.conf文件,在系统启动是禁用。

  [root@getlnx06 ~]# vi /etc/grub.conf

  # grub.conf generated by anaconda

  #

  # Note that you do not have to rerun grub after making changes to this file

  # NOTICE: You have a /boot partition. This means that

  # all kernel and initrd paths are relative to /boot/, eg.

  # root (hd0,0)

  # kernel /vmlinuz-version ro root=/dev/mapper/VolGroup--LogVol0-LogVol01

  # initrd /initrd-[generic-]version.img

  #boot=/dev/sda

  default=0

  timeout=5

  splashimage=(hd0,0)/grub/splash.xpm.gz

  hiddenmenu

  title Red Hat Enterprise Linux 6 (2.6.32-504.el6.x86_64)

  root (hd0,0)

  kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/VolGroup--LogVol0-LogVol01 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup-LogVol0/LogVol01 rd_LVM_LV=VolGroup-LogVol0/LogVol00 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

  initrd /initramfs-2.6.32-504.el6.x86_64.img

  transparent_hugepage=never

  方法2:设置/etc/rc.local文件

  [root@getlnx06 ~]# vi /etc/rc.local

  #!/bin/sh

  #

  # This script will be executed *after* all the other init scripts.

  # You can put your own initialization stuff in here if you don't

  # want to do the full Sys V style init stuff.

  touch /var/lock/subsys/local

  if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then

  echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

  fi

  使用上面的配置后必须重启操作系统才能生效,你也可以运行下面命令不用重启操作系统。

  You must reboot your system for the setting to take effect, or run the following two echo lines to proceed with the install without rebooting:

  [root@getlnx06 ~]# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

  [root@getlnx06 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

  always madvise [never]

  [root@getlnx06 ~]#

  补充:Linux基本命令

  1.ls命令:

  格式::ls [选项] [目录或文件]

  功能:对于目录,列出该目录下的所有子目录与文件;对于文件,列出文件名以及其他信息。

  常用选项:

  -a :列出目录下的所有文件,包括以 . 开头的隐含文件。

  -d :将目录像文件一样显示,而不是显示其他文件。

  -i :输出文件的i节点的索引信息。

  -k :以k字节的形式表示文件的大小。

  -l :列出文件的详细信息。

  -n :用数字的UID,GID代替名称。

  -F : 在每个文件名后面附上一个字符以说明该文件的类型,“*”表示可执行的普通文 件;“/”表示目录;“@”表示符号链接;“l”表示FIFOS;“=”表示套接字。

  2.cd命令

  格式:cd [目录名称]

  常用选项:

  cd .. 返回上一级目录。

  cd ../.. 将当前目录向上移动两级。

  cd - 返回最近访问目录。

  3.pwd命令

  格式: pwd

  功能:显示出当前工作目录的绝对路径。

  相关阅读:Linux主要特性

  完全兼容POSIX1.0标准

  这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。

  多用户、多任务

  Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。

  良好的界面

  Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。

  支持多种平台

Transparent Huge Pages

在RHEL6中,透明大页功能是默认开启的。

开启该选项后,内核会尽可能地尝试分配大页,如果mmap区域是2mb,那么每个linux进程都会分配到2mb大小的页。如果大页不够用了(比如物理内存不够了),内核会重新分配4KB大小的页。透明大页是可以交换的(swappable),通过将大页转换成小的4KB的页。

为了有效的使用大页,内核必须找到连续可用的物理内存来进行分配。为此增加了一个内核线程。透明大页和大页类似:但是透明大页是运行时由内核线程khugepaged自动创建的;大页必须在启动前预先分配。

ORACLE建议关闭透明大页的功能:透明大页会导致节点不可预料的重启,以及RAC的性能问题;透明大页也会导致单节点数据库环境发生不可预料的性能问题或延迟。

比如RAC节点发生重启后,可能会在ocssd.log中发现以下日志信息:

2013-05-01 14:30:45.255: [    CSSD][224204544]clssscMonitorThreads clssnmvKillBlockThread not scheduled for 7500 msecs
2013-05-01 14:30:46.945: [    CSSD][224204544]clssscMonitorThreads clssnmvWorkerThread not scheduled for 8030 msecs 

 

Mongodb环境也建议关闭透明大页功能。

 

检查是否开启了透明大页功能:

RHEL系统:

# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
[always] never

其他系统:(如果是UEK2内核,2.6.39-400.116.0没有将透明大页编译进去,这个文件就不存在)

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] never

[always]表示启用
[never]表示禁用

 

因为内核只是对匿名内存块,比如stack、heap使用透明大页,/proc/meminfo中的AnonHugePages也表示内核使用了多少透明大页内存:

# grep AnonHugePages /proc/meminfo 
AnonHugePages:  20142080 kB

 

禁用透明大页的方法:
1.修改文件/etc/grub.conf,添加一行:

transparent_hugepage=never

2.修改文件/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

 

以上是关于Linux的透明大页如何启用禁用的主要内容,如果未能解决你的问题,请参考以下文章

CENTOS 7(LINUX 7) 关于禁用透明大页的实验#干货盘点#

Linux 关闭透明大页(transparent_hugepage)和 NUMA

Linux 关闭透明大页(transparent_hugepage)和 NUMA

Linux下大页HugePages与透明大页Transparent HugePages

Linux下大页HugePages与透明大页Transparent HugePages

Linux下大页HugePages与透明大页Transparent HugePages