欢迎光临散文网 会员登陆 & 注册

ARM环境关闭内存透明大页操作指南

2023-10-25 11:35 作者:Logic01314  | 我要投稿

操作背景

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%。

ARM环境关闭内存透明大页操作指南的评论 (共 条)

分享到微博请遵守国家法律