38.6. 管理透明巨页


在 Red Hat Enterprise Linux 9 中透明巨页(THP)默认被启用。但是,您可以使用运行时配置、TuneD 配置文件、内核命令行参数或 systemd 单元文件启用、禁用或将透明巨页设置为 madvise

38.6.1. 使用运行时配置管理透明巨页

可在运行时管理透明巨页(THP),来优化内存使用率。系统重启后,运行时配置不是持久的。

流程

  1. 检查 THP 的状态:

    $ cat /sys/kernel/mm/transparent_hugepage/enabled
  2. 配置 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 服务已启用。

流程

  1. 将活跃的配置文件复制到同一目录中:

    $ sudo cp -R /usr/lib/tuned/my_profile /usr/lib/tuned/my_copied_profile
  2. 编辑 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
  3. 重启 TuneD 服务:

    $ sudo systemctl restart tuned
  4. 激活新的配置文件:

    $ sudo tuned-adm profile my_copied_profile

验证

  1. 验证新配置文件是否处于活跃状态:

    $ sudo tuned-adm active
  2. 验证是否设置了所需的 THP 模式:

    $ cat /sys/kernel/mm/transparent_hugepage/enabled

38.6.3. 使用内核命令行参数管理透明巨页

您可以通过修改内核参数,来在引导时管理透明巨页(THP)。这个配置在系统重启后是持久的。

前提条件

  • 您在系统上具有 root 权限。

流程

  1. 获取当前的内核命令行参数:

    # 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"
  2. 通过添加内核参数来配置 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
  3. 重启系统以使更改生效:

    # 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 权限。

流程

  1. 创建新的 systemd 服务文件来启用、禁用,并将 THP 设置为 madvise。例如:/etc/systemd/system/disable-thp.service
  2. 通过向新的 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
  3. 启用并启动服务:

    # systemctl enable <new_thp_file>.service
    # systemctl start <new_thp_file>.service

验证

  • 要验证 THP 的状态,请查看以下文件:

    $ cat /sys/kernel/mm/transparent_hugepage/enabled

38.6.5. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.