38.6. 管理透明巨页
在 Red Hat Enterprise Linux 9 中透明巨页(THP)默认被启用。但是,您可以使用运行时配置、TuneD 配置文件、内核命令行参数或 systemd 单元文件启用、禁用或将透明巨页设置为 madvise
。
38.6.1. 使用运行时配置管理透明巨页
可在运行时管理透明巨页(THP),来优化内存使用率。系统重启后,运行时配置不是持久的。
流程
检查 THP 的状态:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
配置 THP.
启用 THP:
$ echo always > /sys/kernel/mm/transparent_hugepage/enabled
禁用 THP:
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled
将 THP 设置为
madvise
:$ echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
要防止应用程序分配比必需的多的内存资源,请禁用系统范围的透明巨页,并仅对通过
madvise
系统调用明确请求它的应用程序启用它们。注意有时,为短期分配提供低延迟的优先级比立即实现长时间分配的性能要高。在这种情况下,您可以在启用 THP 时禁用直接压缩。
直接压缩是在巨页分配过程中同步的内存压缩。禁用直接压缩功能无法保证保存内存,但可能会降低频繁页面错误期间延迟更高的风险。另外,禁用直接压缩只允许异步压缩
madvise
中突出显示的虚拟内存区域(VMAs)。请注意,如果工作负载从 THP 有很大的好处,则性能会降低。禁用直接压缩:$ echo never > /sys/kernel/mm/transparent_hugepage/defrag
其他资源
-
您系统上的
madvise (2)
手册页。
38.6.2. 使用 TuneD 配置文件管理透明巨页
您可以使用 TuneD 配置文件管理透明巨页(THP)。tuned.conf
文件提供 TuneD 配置文件的配置。这个配置在系统重启后是持久的。
先决条件
-
tuned
软件包已安装。 -
tuned
服务已启用。
流程
将活跃的配置文件复制到同一目录中:
$ sudo cp -R /usr/lib/tuned/my_profile /usr/lib/tuned/my_copied_profile
编辑
tune.conf
文件:$ sudo vi /usr/lib/tuned/my_copied_profile/tuned.conf
要启用 THP,请添加行:
[bootloader] cmdline = transparent_hugepage=always
要禁用 THP,请添加行:
[bootloader] cmdline = transparent_hugepage=never
要将 THP 设置为
madvise
,请添加行:[bootloader] cmdline = transparent_hugepage=madvise
重启
TuneD
服务:$ sudo systemctl restart tuned
激活新的配置文件:
$ sudo tuned-adm profile my_copied_profile
验证
验证新配置文件是否处于活跃状态:
$ sudo tuned-adm active
验证是否设置了所需的 THP 模式:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
38.6.3. 使用内核命令行参数管理透明巨页
您可以通过修改内核参数,来在引导时管理透明巨页(THP)。这个配置在系统重启后是持久的。
前提条件
- 您在系统上具有 root 权限。
流程
获取当前的内核命令行参数:
# grubby --info=$(grubby --default-kernel) kernel="/boot/vmlinuz-5.14.0-284.11.1.el9_2.x86_64" args="ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX console=tty0 console=ttyS0" root="UUID=XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" initrd="/boot/initramfs-5.14.0-284.11.1.el9_2.x86_64.img" title="Red Hat Enterprise Linux (5.14.0-284.11.1.el9_2.x86_64) 9.2 (Plow)" id="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-5.14.0-284.11.1.el9_2.x86_64"
通过添加内核参数来配置 THP。
要启用 THP:
# grubby --args="transparent_hugepage=always" --update-kernel=DEFAULT
要禁用 THP:
# grubby --args="transparent_hugepage=never" --update-kernel=DEFAULT
要将 THP 设置为
madvise
:# grubby --args="transparent_hugepage=madvise" --update-kernel=DEFAULT
重启系统以使更改生效:
# reboot
验证
要验证 THP 的状态,请查看以下文件:
# cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never]
# grep AnonHugePages: /proc/meminfo AnonHugePages: 0 kB
# grep nr_anon_transparent_hugepages /proc/vmstat nr_anon_transparent_hugepages 0
38.6.4. 使用 systemd 单元文件管理透明巨页
您可以使用 systemd 单元文件来在系统启动时管理透明巨页(THP)。通过创建 systemd 服务,您可以在系统重启后获得一致的 THP 配置。
前提条件
- 您在系统上具有 root 权限。
流程
-
创建新的 systemd 服务文件来启用、禁用,并将 THP 设置为
madvise
。例如:/etc/systemd/system/disable-thp.service
。 通过向新的 systemd 服务文件添加以下内容来配置 THP。
要启用 THP,请在
<new_thp_file>.service
文件中添加以下内容:[Unit] Description=Enable Transparent Hugepages After=local-fs.target Before=sysinit.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/sh -c 'echo always > /sys/kernel/mm/transparent_hugepage/enabled [Install] WantedBy=multi-user.target
要禁用 THP,请在
<new_thp_file>.service
文件中添加以下内容:[Unit] Description=Disable Transparent Hugepages After=local-fs.target Before=sysinit.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled [Install] WantedBy=multi-user.target
要将 THP 设置为
madvise
,请在<new_thp_file>.service
文件中添加以下内容:[Unit] Description=Madvise Transparent Hugepages After=local-fs.target Before=sysinit.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/sh -c 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled [Install] WantedBy=multi-user.target
启用并启动服务:
# systemctl enable <new_thp_file>.service
# systemctl start <new_thp_file>.service
验证
要验证 THP 的状态,请查看以下文件:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
38.6.5. 其他资源
- 您还可以通过设置 TuneD 配置文件或使用预定义的 TuneD 配置文件来禁用透明巨页(THP)。请参阅 随 RHEL 一起分发的 TuneD 配置文件 和 可用的 TuneD 插件。