故障排除

如果透明大页面 (THP) 仍未禁用,请继续并使用以下选项之一。

1.禁用tuned/ktune服务

  1. 如果使用以下任一命令重新启用 THP,请禁用调整后的服务。
# service tuned stop
# chkconfig tuned off
# service ktune stop
# chkconfig ktune off

或者

# tuned-adm off

注意:tuned-adm 命令会将所有设置恢复到调整启动之前的设置,并禁止在启动时运行调整服务。

  1. 验证 ktune 和tuned 服务被禁用以在启动时启动:
# chkconfig --list |egrep -i "ktune|tuned"
ktune           0:off   1:off   2:off   3:off    4:off    5:off    6:off
tuned           0:off   1:off   2:off    3:off    4:off    5:off    6:off

2. 创建一个禁用 THP 的自定义调整配置文件

  1. 我们将为当前运行的配置文件创建一个定制版本。
    定制版本将禁用 THP。
    找出哪个配置文件处于活动状态,创建一个副本。
    在以下示例中,我们目前使用吞吐量性能配置文件:
# tuned-adm  active
Current active profile: throughput-performance
Service tuned: enabled, running
Service ktune: enabled, running
  1. 从现有配置文件创建重复配置文件。
    我们将使用新配置文件禁用 THP。
    为此,将当前配置文件目录中的所有内容复制到新创建的配置文件目录中。
# cd /etc/tune-profiles/
# cp -r /etc/tune-profiles/throughput-performance /etc/tune-profiles/nothp_profile
  1. 我们现在将在新配置文件中禁用 THP 并激活新配置文件。
    更改如下所示的行:

# vi /etc/tune-profiles/nothp_profile/ktune.sh
set_transparent_hugepages always

修改成:

# vi /etc/tune-profiles/nothp_profile/ktune.sh
set_transparent_hugepages never
  1. 激活新配置文件以使更改生效。
# tuned-adm profile nothp_profile
# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always [never]

2.在运行时禁用THP

运行以下命令以禁用 THP,而无需重新启动系统。

# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
# echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag

注意:运行上述命令将仅停止新 THP 的创建和使用。
在运行上述命令时创建和使用的 THP 不会被分解为常规内存页。
要完全摆脱 THP,系统应该在启动时禁用 THP 的情况下重新启动。

显式大页面( Explicit Huge Pages) VS 透明大页面 (Transparent Huge Pages)

系统中可以有两种类型的 HugePages:通过 vm.nr_hugepages sysctl 参数显式分配的显式巨型页面和由内核自动分配的透明巨型页面。

www. On IT Road .com

1.在启动时禁用THP

  1. 将参数 transparent_hugepage=never 添加到 /etc/grub.conf 中的内核命令行:
# vim /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux 6 (2.6.32-504.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg_os-lv_os rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_os/lv_os  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet transparent_hugepage=never
        initrd /initramfs-2.6.32-504.el6.x86_64.img
  1. 将下面给出的小脚本添加到文件 /etc/rc.d/rc.local 中。
# vi /etc/rc.d/rc.local
....
if test −f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test −f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
  1. 重新启动系统以使更改生效。
# shutdown -r now
CentOS/RHEL 6:如何禁用透明大页面 (THP)

在 RHEL 6 中,所有应用程序默认启用透明大页面 (THP)。
内核将始终尝试使用大页来满足内存分配。
如果没有可用的大页面(例如由于物理连续内存不可用),内核将回退到常规的 4KB 页面。

验证是否启用了 THP

CentOS/RHEL 7 上的“tuned.service”默认将 transparent_hugepage 设置为 always。
即使在 grub 内核命令行中禁用它,调整后的服务也会在启动期间将其设置为“始终”。
文件 /sys/kernel/mm/redhat_transparent_hugepage/enabled 给出了 THP 的当前状态(启用/禁用)。
/sys/kernel/mm/redhat_transparent_hugepage/enabled 的值可以是以下之一:

always   -  always use THP
never    -  disable THP

下面的命令输出确认系统上已启用或者禁用 THP。

启用 THP 时的输出

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

THP 禁用时的输出

# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
日期:2020-09-17 00:11:57 来源:oir作者:oir