ARM环境关闭内存透明大页操作指南
操作背景
ARM架构操作系统,缺页分配的内存大小为512M,容易引起系统OOM问题,需要通过重新编译内核或者关闭透明大页功能去解决,本KB采用关闭透明大页功能方式去解决。
影响范围
所有存储版本。
X86架构无此问题,不需要关闭。
arm 环境部分操作系统有该问题,部分操作系统无该问题,已反馈在下面表格。
触发条件 频繁管理操作(如不断创建/删除ap,添加/移除网关,添加/移除映射),导致后续触发较多缺页,短时间内大量缺页分配 hugepage 内存导致内存被耗尽(OOM)产生crash并重启节点。 问题原因
arm架构下的操作系统透明大页分配尺寸为512MB,当触发较多缺页分配hugepage内存时,容易引起内存被耗尽产生crash。
操作风险
生产环境下,本操作严禁通过循环遍历,需要每一台手动操作;操作完一台,观察一分钟左右确认没有硬盘被隔离的情况下,才能操作下一台。
由于持久化生效需要对grub做更新,会引起系统os-prober程序探测所有挂载的硬盘分区,这会引起osd出现短暂的无法写入现象,如该osd正在承载数据写入的话,就会触发隔离机制;需要手动解除隔离,并等待集群恢复完毕。
解决方法
临时生效
修改 transparent_hugepage/enabled 为 never,默认是 always。
修改 transparent_hugepage/defrag 为 never,默认是 madvise。
注意:临时修改方法,重启节点后会失效。
# []中为生效值,查询默认值为 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
# 重启节点永久生效,重启后再做检查(生产环境下,配置完之后无需立即重启节点)
# reboot
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
后续影响
修改完成后,性能方面会有些许影响,已经过实测,下面为结论:
随机小块读、随机小块写,修改前后性能没有影响;
随机大块读、随机大块写,修改后带宽下降,随机大块读带宽下降约18%,随机大块写带宽约下降5%;
顺序小块读、顺序小块写,修改后性能下降,但下降幅度不大;
顺序大块读、顺序大块写,修改后带宽下降,顺序大块读带宽下降约21%,顺序大块写带宽下降约9%。