永久禁用透明的大页面CentOS RHEL 8

时间:2020-01-09 10:38:12  来源:igfitidea点击:

在本文中,我将分享在RHEL 8 Linux中使用grub2-editenv来检查透明大页面和禁用透明HugePages的步骤和说明。
要永久禁用透明大页面,必须使用transparent_hugepage = never更新GRUB2,然后重新启动以激活更改。

与RHEL/CentOS 7和更早版本相比,在RHEL/CentOS 8中更新GRUB2的步骤不同,因此请按照文章说明分步操作以禁用RHEL/CentOS 8中的透明大页面

HugePages概述

Hugepages是一项功能,它允许Linux内核利用现代硬件体系结构的多个页面大小功能。

CPU具有内置的内存管理单元,其中包含这些页面的列表,并且每个页面都通过页面表条目进行引用。

有两种方法可以使系统管理大量内存:

  • 增加硬件内存管理单元中页表条目的数量

  • 增加页面大小

第一种方法很昂贵,因为现代处理器中的硬件内存管理单元仅支持数百或者数千页表项。

  • x86系统中的典型页面大小为4KB,其他更大的页面大小也可用。

  • 页面大小越大,意味着总的页面越少,因此会增加可将其虚拟地址到物理地址转换存储在TLB中的系统内存量,从而降低TLB丢失的可能性,从而提高性能。

  • 对于较大的页面大小,由于进程必须在页面中分配内存,因此浪费内存的可能性增加,但是并非所有内存都可能需要。

  • 结果,选择页面大小是在通过使用较大的页面来提供更快的访问时间与通过使用较小的页面来确保最大的内存利用之间的权衡。

  • 在Linux中,我们为此目的使用大页面,其中大页面是具有2MB和1GB大小的内存块。

2MB页面使用的页面表适合于管理多个GB的内存,而1GB页面的页面表最适合于扩展到TB的内存

关于类似主题的更多文章:

教程:Linux内存管理初学者指南如何使用hugeadm(RHEL/CentOS 7)配置HugePage如何检查CPU是否支持HugePages并更改RHEL 7中的默认巨大页面大小如何使用例子

检查透明大页面(禁用前)

在启用或者禁用透明大页面之前,重要的是要知道Linux服务器上当前是否正在运行或者禁用THP。
要检查透明大页面状态,请注意以下文件:

[root@rhel-8 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

因此,当前在我们的RHEL/CentOS 8服务器上启用了"透明大页面"。

永久禁用TransParent HugePages GRUB2 RHEL/CentOS 8

要永久禁用Transparent HugePages,需要GRUB2更新。
如果我们使用的是" RHEL/CentOS 7和更早版本",则应检查:在RHEL/CentOS 7上禁用透明大页面的步骤。

与RHEL/CentOS 8一样,我们使用grub2-editenv和grubby工具更新GRUB2.

因此,在本文中永久禁用透明大页面GRUB2更新将使用grub2-env完成。

虽然我们也可以使用传统的grub2-mkconfig来重建GRUB2配置。

获取GRUB2内核参数列表

使用grub2-editenv获取GRUB2中添加的当前内核命令行参数。

[root@rhel-8 ~]# grub2-editenv - list | grep kernelopts
kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet

更新GRUB2以禁用透明HugePages(THP)

其中我们必须在" kernelopts"末尾添加" transparent_hugepage = never",以禁用透明的大页面。
这将修改/boot/grub2/grubenv文件中的kernelopts内容。

[root@rhel-8 ~]# grub2-editenv - set "$(grub2-editenv - list | grep kernelopts) transparent_hugepage=never"

或者或者,我们也可以给出整个kernelopts部分,然后仅添加transparent_hugepage = never,如下所示:(如果我们已执行以上命令,则忽略此命令)

[root@rhel-8 ~]# grub2-editenv - set "kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet transparent_hugepage=never"

添加后,使用grub2-editenv验证现有的内核选项。

[root@rhel-8 ~]# grub2-editenv - list | grep kernelopts
kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet transparent_hugepage=never

接下来的"重新引导"节点将永久禁用透明大页面

[root@rhel-8 ~]# reboot

检查透明大页面状态(禁用后)

重新启动后检查透明大页面状态((AnonHugePages)`,以确保禁用了THP

[root@rhel-8 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

因此,此文件现在指向" [never]",这意味着THP已禁用。

我们还可以检查以下文件,以检查透明大页面(THP)是否已禁用。

[root@rhel-8 ~]# grep AnonHugePages: /proc/meminfo
AnonHugePages:         0 kB
[root@rhel-8 ~]# grep nr_anon_transparent_hugepages /proc/vmstat
nr_anon_transparent_hugepages 0