Transparent HugePages(透明大頁)
1. 介紹
從RedHat6, RedHat7, OL6, OL7 SLES11 and UEK2 kernels開始,透明大頁默認是被開啟的以便去改善操作系統的內存管理。透明大頁與之前版本的傳統意義上的HugePages是類似的,最主要的區別在於透明大頁是可以在操作系統運行過程中動態設置的然而傳統的hugepages是需要重啟操作系統才能生效。
RAC環境下透明大頁可能會造成不可預知的節點重啟和各種性能問題,另外在單實例的環境下透明大頁也會造成不可預知的性能問題。所以oracle強烈建議在所有運行oracle數據庫的服務器上關閉透明大頁。
相關文檔:ALERT: Disable Transparent HugePages on SLES11, RHEL6, RHEL7, OL6, OL7 and UEK2 Kernels (文檔 ID 1557478.1)
HugePages on Oracle Linux 64-bit (文檔 ID 361468.1)
Oracle Linux: Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (文檔 ID 401749.1)
2. 查看透明大頁設置
用如下方式檢查透明大頁是否啟用
1.默認是啟用狀態的,設置是[always]:
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] never
Note 1:紅帽內核,查看的路徑與上面不同:
# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
[always] never
Note 2:對於UEK2內核,像2.6.39-400.116.0版本的透明大頁已經重內核中移除了,如果該參數沒有被編譯進內存那么/sys/kernel/mm/transparent_hugepage是不存在的。
2.未啟用的設置是[never]:
# cat /sys/kernel/mm/transparent_hugepage/enabled
always [never]
如果"enabled"沒有設置成"[never]",那么說明透明大頁是啟用狀態的。
也可以用下面方式進行查看:
grep AnonHugePages /proc/meminfo
如果輸出包含一列類似"AnonHugepages: xxxx kB"值大於0kB,那么說明內核正在使用透明大頁因為內核正在使用的透明大頁僅僅是像堆棧和堆的匿名內存塊,AnonHugepages在/proc/meminfo中顯示的值是當前內核是用的透明大頁值。
3. 禁用透明大頁的兩種方式
1.在/etc/grub.conf(/boot/grub/grub.conf)中添加如下行信息然后重啟服務(這是首選方法):
transparent_hugepage=never
一旦修改了我們就可以看到如下類似內容:
title Oracle Linux Server (2.6.32-300.25.1.el6uek.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABEL=/ transparent_hugepage=never
initrd /initramfs-2.6.32-300.25.1.el6uek.x86_64.img
2.在/etc/rc.local中添加如下內容然后重啟服務(在紅帽7版本中雖然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
在紅帽內核文件路徑為/sys/kernel/mm/redhat_transparent_hugepage/ accordingly。
注:
在SLES11 SP3操作系統環境下transparent_hugepage=never參數必須設置在YAST-bootloader- Edit settings - in line: optional kernel parameter [before showopts].