ARM環(huán)境關閉內(nèi)存透明大頁操作指南
操作背景
ARM架構操作系統(tǒng),缺頁分配的內(nèi)存大小為512M,容易引起系統(tǒng)OOM問題,需要通過重新編譯內(nèi)核或者關閉透明大頁功能去解決,本KB采用關閉透明大頁功能方式去解決。
影響范圍
所有存儲版本。
X86架構無此問題,不需要關閉。
arm 環(huán)境部分操作系統(tǒng)有該問題,部分操作系統(tǒng)無該問題,已反饋在下面表格。
觸發(fā)條件 頻繁管理操作(如不斷創(chuàng)建/刪除ap,添加/移除網(wǎng)關,添加/移除映射),導致后續(xù)觸發(fā)較多缺頁,短時間內(nèi)大量缺頁分配 hugepage 內(nèi)存導致內(nèi)存被耗盡(OOM)產(chǎn)生crash并重啟節(jié)點。 問題原因
arm架構下的操作系統(tǒng)透明大頁分配尺寸為512MB,當觸發(fā)較多缺頁分配hugepage內(nèi)存時,容易引起內(nèi)存被耗盡產(chǎn)生crash。
操作風險
生產(chǎn)環(huán)境下,本操作嚴禁通過循環(huán)遍歷,需要每一臺手動操作;操作完一臺,觀察一分鐘左右確認沒有硬盤被隔離的情況下,才能操作下一臺。
由于持久化生效需要對grub做更新,會引起系統(tǒng)os-prober程序探測所有掛載的硬盤分區(qū),這會引起osd出現(xiàn)短暫的無法寫入現(xiàn)象,如該osd正在承載數(shù)據(jù)寫入的話,就會觸發(fā)隔離機制;需要手動解除隔離,并等待集群恢復完畢。
解決方法
臨時生效
修改 transparent_hugepage/enabled 為 never,默認是 always。
修改 transparent_hugepage/defrag 為 never,默認是 madvise。
??注意:臨時修改方法,重啟節(jié)點后會失效。
# []中為生效值,查詢默認值為 always
# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never # cat /sys/kernel/mm/transparent_hugepage/defrag always defer defer+madvise [madvise] never # echo never > /sys/kernel/mm/transparent_hugepage/enabled # echo never > /sys/kernel/mm/transparent_hugepage/defrag # cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never] # cat /sys/kernel/mm/transparent_hugepage/defrag always defer defer+madvise madvise [never]
永久生效
修改 transparent_hugepage 為 never,默認是 always;
配置文件中增加 transparent_hugepage=never
# []中為生效值,查詢默認值為 always
# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
# 配置文件中增加 transparent_hugepage=never
# cat /etc/default/grub
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="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
# 使啟動配置生效
# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
# 查詢啟動是否有該配置
# cat /boot/efi/EFI/centos/grub.cfg |grep tran
linux /vmlinuz-4.14.0-115.el7a.0.1.aarch64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap
transparent_hugepage=never
linux /vmlinuz-4.14.0 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap
transparent_hugepage=never
linux /vmlinuz-4.14.0.old root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap
transparent_hugepage=never
linux /vmlinuz-0-rescue-c41b3533efa1469689607654c5f15bde root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap
transparent_hugepage=never
# 重啟節(jié)點永久生效,重啟后再做檢查(生產(chǎn)環(huán)境下,配置完之后無需立即重啟節(jié)點)
# reboot
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
后續(xù)影響
修改完成后,性能方面會有些許影響,已經(jīng)過實測,下面為結(jié)論:
隨機小塊讀、隨機小塊寫,修改前后性能沒有影響;
隨機大塊讀、隨機大塊寫,修改后帶寬下降,隨機大塊讀帶寬下降約18%,隨機大塊寫帶寬約下降5%;
順序小塊讀、順序小塊寫,修改后性能下降,但下降幅度不大;
順序大塊讀、順序大塊寫,修改后帶寬下降,順序大塊讀帶寬下降約21%,順序大塊寫帶寬下降約9%。