Linux的Transparent Hugepage與關閉方法


Transparent HugePages是在運行時動態分配內存的,而標准的HugePages是在系統啟動時預先分配內存,並在系統運行時不再改變。
因為Transparent HugePages是在運行時動態分配內存的,所以會帶來在運行時內存分配延誤。所以ORACLE是建議不使用Transparent HugePages功能的,如果需要大頁內存管理功能來加強性能,建議使用標准的大頁內存管理。
MYSQL的TOKUDB強制必須關閉Transparent HugePages功能,否則啟動不了數據庫。
 
下面是ORACLE官方的文檔:
下面有關於Transparent HugePages查看和關閉的方式
https://docs.oracle.com/cd/E11882_01/install.112/e41961/memry.htm#CWLIN385
 

1.什么是Transparent HugePages?
Transparent HugePages是RHEL6的新特性。
為了提升性能,Kernel會將程序緩存在內存中,每頁內存以2M為單位。
想要有效的使用THP,kernel要在內存中找到一系列連續的物理內存來滿足需求,也可能會對齊。
為了達到這個效果,系統新加了一個khugepaged進程,這個進程會偶爾嘗試把正在使用的較小頁面換到hugepage中。這樣就能使hugepage使用達到最大化。


2.如何關閉THP
盡管THP的本意是為提升性能,但某些數據庫廠商還是建議直接關閉THP(比如說Oracle、MongoDB等),否則可能導致性能下降,內存鎖,甚至系統重啟等問題。
比較流行的關閉方法有兩種
第一種:在/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
第二種:
1 .編輯 /etc/default/grub,在GRUB_CMDLINE_LINUX加入選項 transparent_hugepage=never
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/swap rd.lvm.lv=fedora/root rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
2.重新生成grub配置文件
On BIOS-based machines, issue the following command as root:
# grub2-mkconfig -o /boot/grub2/grub.cfg
On UEFI-based machines, issue the following command as root:
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
step3 重啟你的系統
驗證結果
重啟前
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
#
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
#
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
#
重啟后
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM