Я хочу отключить transparent_hugepage (THP) в экземпляре CentOS 7 EC2, который включен по умолчанию:
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
Этот параметр можно изменить вручную:
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
... но изменения теряются после перезагрузки.
Я пытался поставить echo never [...]
инструкция в мой rc.local
и cloud.cfg
файлы, но это не сработало.
Я также попытался добавить настройку transparent_hugepage=never
к строке ядра /etc/grub.conf
(как объяснено там), но лучше не вышло.
Итак ... как я могу отключить THP в CentOS 7, запущенном на экземпляре AWS EC2?
edit: изменен заголовок ... Мне нужно отключить THP и THP дефрагментация
Решение находится в настроен, как указывает @ michael-hampton. Сложность в том, что vm плагин может настраивать только /sys/kernel/mm/transparent_hugepage/enabled
настройка.
Чтобы отключить /sys/kernel/mm/transparent_hugepage/defrag
мне пришлось создать сценарий, который вызывается профилем при запуске.
В конце концов, полное решение:
шаг 1: Создайте каталог для хранения настраиваемого профиля:
mkdir /etc/tuned/custom
шаг 2: Создать профиль /etc/tuned/custom/tuned.conf
:
[main]
include=virtual-guest
[vm]
transparent_hugepages=never
[script]
script=script.sh
Обратите внимание, что этот профиль наследуется от виртуальный гость, который был моим активным профилем, действительно подходящим для виртуализированного сервера (EC2). Вы можете просмотреть свой активный профиль с помощью команды tuned-adm active
. Если вам интересно, вы можете проверить содержимое предопределенных профилей в /usr/lib/tuned/
шаг 3: Создать скрипт /etc/tuned/custom/script.sh
:
#!/bin/sh
. /usr/lib/tuned/functions
start() {
echo never > /sys/kernel/mm/transparent_hugepage/defrag
return 0
}
stop() {
return 0
}
process $@
Сделайте его исполняемым:
sudo chmod 755 /etc/tuned/custom/script.sh
шаг 4: Активировать новый профиль:
tuned-adm profile custom
Теперь у вас должно получиться:
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
Он будет сохраняться после перезагрузки.
Помимо настройки командной строки grub, вам также необходимо настроить файл tuned. Но не использовать инструкции, на которые вы ссылаетесь, поскольку они настолько полны ошибок, что на их объяснение уйдет полдня.
Создайте настраиваемый профиль (который я назову custom
), а затем установите профиль. Вы будете основывать его на существующем профиле, таком как virtual-guest
если вы работаете на виртуальной машине (EC2, конечно), или throughput-performance
если вы находитесь на физической машине.
Создайте каталог для хранения настраиваемого профиля:
mkdir /etc/tuned/custom
Создайте собственный профиль /etc/tuned/custom/tuned.conf
, например:
[main]
include=virtual-guest
[vm]
transparent_hugepages=never
Теперь установите профиль:
tuned-adm profile custom
Также попробуйте это
нано /etc/init.d/disable-transparent-hugepages
#!/bin/sh
### BEGIN INIT INFO
# Provides: disable-transparent-hugepages
# Required-Start: $local_fs
# Required-Stop:
# X-Start-Before: mongod mongodb-mms-automation-agent
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description: Disable Linux transparent huge pages, to improve
# database performance.
### END INIT INFO
case $1 in
start)
if [ -d /sys/kernel/mm/transparent_hugepage ]; then
thp_path=/sys/kernel/mm/transparent_hugepage
elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
thp_path=/sys/kernel/mm/redhat_transparent_hugepage
else
return 0
fi
echo 'never' > ${thp_path}/enabled
echo 'never' > ${thp_path}/defrag
unset thp_path
;;
esac
sudo chmod 755 /etc/init.d/disable-transparent-hugepages
sudo chkconfig --add disable-transparent-hugepages
Вы можете отредактировать файл /etc/rc.local и добавить в него следующую команду:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
и беги chmod +x /etc/rc.d/rc.local
чтобы сценарий был выполнен во время загрузки. протестировано на Amazon Linux 2.
РЕДАКТИРОВАТЬ: ответ выше неправильно, потому что прозрачные ручки огромных страниц отсутствуют в sysctl на данный момент. Извините за шум.
Вы можете ввести желаемые значения в /etc/sysctl.conf
.
Из справочной страницы sysctl.conf (5):
SYSCTL.CONF(5) File Formats SYSCTL.CONF(5) NAME sysctl.conf - sysctl preload/configuration file DESCRIPTION sysctl.conf is a simple file containing sysctl values to be read in and set by sysctl. The syntax is simply as follows: # comment ; comment token = value Note that blank lines are ignored, and whitespace before and after a token or value is ignored, although a value can contain whitespace within. Lines which begin with a # or ; are considered comments and ignored. EXAMPLE # sysctl.conf sample # kernel.domainname = example.com ; this one has a space which will be written to the sysctl! kernel.modprobe = /sbin/mod probe