Linux

禁用透明大頁面

  • July 30, 2019

我們在RAID機器上安裝 SAP HANA。作為安裝步驟的一部分,有人提到,

To disable the usage of transparent hugepages set the kernel settings 
at runtime with echo never > /sys/kernel/mm/transparent_hugepage/enabled 

因此,如果我想讓它成為永久更改,而不是執行時,我應該在/proc/vmstat文件中添加上面的行嗎?

要使諸如此類的選項永久存在,您通常會將它們添加到文件/etc/sysctl.conf中。您可以使用此命令查看可用選項的完整列表:

$ sysctl -a

例子

$ sudo sysctl -a | head -5
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 6000000
kernel.sched_latency_ns = 18000000
kernel.sched_wakeup_granularity_ns = 3000000
kernel.sched_shares_ratelimit = 750000

您可以hugepage像這樣在輸出中查找:

$ sudo sysctl -a | grep hugepage
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.hugepages_treat_as_movable = 0
vm.nr_overcommit_hugepages = 0

它不在那裡嗎?

但是查看輸出我沒有看到transparent_hugepage。Google搜尋了一下,我確實遇到了這個討論這個主題的 Oracle 頁面。該頁面的標題為:在 Linux (x86-64) 上為 Oracle 配置 HugePages

特別是在該頁面上,他們提到瞭如何禁用大頁面功能

摘抄

禁用透明 HugePages 的首選方法是將“transparent_hugepage=never”添加到“/etc/grub.conf”文件中的核心引導行。

   title Oracle Linux Server (2.6.39-400.24.1.el6uek.x86_64)
            root (hd0,0)
            kernel /vmlinuz-2.6.39-400.24.1.el6uek.x86_64 ro root=/dev/mapper/vg_ol6112-lv_root rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=uk
    LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  rd_NO_DM rd_LVM_LV=vg_ol6112/lv_swap rd_LVM_LV=vg_ol6112/lv_root rhgb quiet numa=off
    transparent_hugepage=never
            initrd /initramfs-2.6.39-400.24.1.el6uek.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/enabled
always madvise [never]

引用自:https://unix.stackexchange.com/questions/99154