Transparent HugePages(透明大頁)
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].