Red Hat Enterprise Linux 6 で THP (transparent hugepages) を無効にしても反映されない

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux (RHEL) 6
  • transparent hugepages (THP)
  • tuned
  • ktune

Issue

  • /boot/grub/grub.conf ファイルのカーネルコマンドラインに "transparent_hugepage=never" を追加しても、transparent hugepages (THP) を無効にすることができません。

たとえば、以下のようになります。

# grep -i never /boot/grub/grub.conf 
    kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=a216d1e5-884f-4e5c-859a-6e2e2530d486 rhgb quiet transparent_hugepage=never

# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
[always] never

# grep -i AnonHugePages /proc/meminfo 
AnonHugePages:    206848 kB

Resolution

THP を無効にしたカスタマイズの tuned プロファイルを作成する

ここでは、現在実行中のプロファイルをカスタマイズしたバージョンを作成します。カスタマイズしたバージョンは THP を無効にします。

どのプロファイルがアクティブかを特定し、コピーを作成します。以下の例では、throughput-performance プロファイルが使用されています。

$ tuned-adm  active
Current active profile: throughput-performance
Service tuned: enabled, running
Service ktune: enabled, running
$ cd /etc/tune-profiles/
$ cp -r throughput-performance throughput-performance-no-thp

新しいプロファイルで THP を無効にし、新しいプロファイルをアクティベートします。

$ sed -ie 's,set_transparent_hugepages always,set_transparent_hugepages never,' \
      /etc/tune-profiles/throughput-performance-no-thp/ktune.sh
$ grep set_transparent_hugepages /etc/tune-profiles/throughput-performance-no-thp/ktune.sh
        set_transparent_hugepages never
$ tuned-adm profile throughput-performance-no-thp
$ cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always [never]

また、transparent_hugepage=never パラメーターを /etc/grub.conf ファイルのカーネル行に追加して、システムを起動したときにアプリケーションが THP を要求しないことを確認する必要があります。

kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=a216d1e5-884f-4e5c-859a-6e2e2530d486 rhgb quiet transparent_hugepage=never

システムを再起動してください。

その他の解決方法: tuned および ktune サービスを無効にする

これにより、tuned または ktune サービスが無効になります。

たとえば、以下のようになります。

# service tuned stop
# chkconfig tuned off
# service ktune stop
# chkconfig ktune off

または、

# tuned-adm off

注意: tuned-adm コマンドを実行すると、すべての設定を tuned を開始する前の状態に戻し、ブート時にチューニングサービスを無効にします。

  • /boot/grub/grub.conf ファイルのカーネルコマンドラインに "transparent_hugepage=never" を追加します。

たとえば、以下のようになります。

kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=a216d1e5-884f-4e5c-859a-6e2e2530d486 rhgb quiet transparent_hugepage=never
  • サーバーを再起動して、変更を反映させます。

たとえば、以下のようになります。

# reboot

Root Cause

  • ktune サービスは、デフォルトで、すべてのプロファイルの transparent hugepages (THP) を有効にします。
# cat /etc/tune-profiles/enterprise-storage/ktune.sh 
#!/bin/sh

./etc/tune-profiles/functions

start() {
    set_cpu_governor performance
    set_transparent_hugepages always  <<<----
    disable_disk_barriers
    multiply_disk_readahead 4

    return 0
}

stop() {
    restore_cpu_governor
    restore_transparent_hugepages
    enable_disk_barriers
    restore_disk_readahead

    return 0
}

process $@
  • tuned プロファイルが有効な場合は、起動時に init.d サービスから、 またはコマンドラインで手動で、transparent hugepages (THP) を再度有効にできます。

Diagnostic Steps

  • ktune および tuned サービスを確認します。
# chkconfig --list |egrep -i "ktune|tuned"
ktune           0:off   1:off   2:off   3:on    4:on    5:on    6:off
tuned           0:off   1:off   2:on    3:on    4:on    5:on    6:off
  • transparent_hugepage=never/boot/grub/grub.conf に追加してシステムを再起動した際、/sys/kernel/mm/transparent_hugepage/defrag オプションが有効のままになっている可能性があります (つまり、always に設定) が、この場合、THP が無効であるため安全に無視できます。THP defrag は有効にはなりません。
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always [never]

cat /sys/kernel/mm/transparent_hugepage/defrag
[always] never

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.