环境
- Red Hat Enterprise Linux (RHEL) 6
- transparent hugepages (THP)
- tuned
- ktune
问题
- Unable to disable transparent hugepages (THP) even after appending "transparent_hugepage=never" to kernel command line in /boot/grub/grub.conf file.
Eg:
Raw
# 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
决议
Create a customized tuned profile with disabled THP
With this resolution we will create a customized version of the currently running profile. The customized version will disable THP.
Find out which profile is active, create a copy. In the following example we currently use the throughput-performance
profile:
Raw
$ 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
We will now disable THP in the new profile and activate the new profile:
Raw
$ 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]
We will also have to add the transparent_hugepage=never
parameter to the kernel line /etc/grub.conf
to ensure that when the system is booted applications already do not request THP, for example:
Raw
kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=a216d1e5-884f-4e5c-859a-6e2e2530d486 rhgb quiet transparent_hugepage=never
The system should then be rebooted.
Alternative Resolution: Disable tuned
and ktune
services.
This resolution will disable the tuned/ktune services.
Eg:
Raw
# service tuned stop
# chkconfig tuned off
# service ktune stop
# chkconfig ktune off
OR
Raw
# tuned-adm off
Note: The tuned-adm
command will revert all your settings to what they were before tuned started and disable the tuning services from running at boot.
- Append "transparent_hugepage=never" to kernel command line in /boot/grub/grub.conf file.
Eg:
Raw
kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=a216d1e5-884f-4e5c-859a-6e2e2530d486 rhgb quiet transparent_hugepage=never
- Reboot the server for changes to take effect.
Eg:
Raw
# reboot
根源
- The
ktune
service enables transparent hugepages
(THP) by default for all profiles.
Raw
# 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 $@
- Any time a tuned profile is enabled, whether at bootup via an init.d service, or manually at the command line, transparent hugepages (THP) gets re-enabled.
诊断步骤
- Verify ktune and tuned services:
Raw
# 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
- When
transparent_hugepage=never
is appended to /boot/grub/grub.conf
and the system is rebooted, the /sys/kernel/mm/transparent_hugepage/defrag
option may still be enabled (ie: set to always
). This can safely be ignored as THP is disabled, and THP defrag will not come into effect:
Raw
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always [never]
cat /sys/kernel/mm/transparent_hugepage/defrag
[always] never