Я хочу отключить 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?
правка: изменен заголовок... Мне нужно отключить THPиДефрагментация THP
решение1
Решение в том,настроенный, как указал @michael-hampton. Сложность в том, чтовмплагин может только настраивать /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]
После перезагрузки он сохранится.
решение2
В дополнение к настройке командной строки 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
решение3
Попробуйте также это
нано /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 отключить-прозрачные-hugepages
решение4
РЕДАКТИРОВАТЬ:ответ вышенеправильный, потому что прозрачные огромные ручки страниц в данный момент отсутствуют в sysctl. Извините за шум.
Вы можете ввести желаемые значения /etc/sysctl.conf
.
Из страницы руководства sysctl.conf(5):
Форматы файлов SYSCTL.CONF(5) SYSCTL.CONF(5) ИМЯ sysctl.conf — файл предварительной загрузки/конфигурации sysctl ОПИСАНИЕ sysctl.conf — это простой файл, содержащий значения sysctl, которые должны быть прочитаны и установлены sysctl. Синтаксис простой: # комментарий ; комментарий токен = значение Обратите внимание, что пустые строки игнорируются, а также игнорируются пробелы до и после токена или значения, хотя значение может содержать пробелы внутри. Строки, начинающиеся с # или ; считаются комментарии и проигнорированы. ПРИМЕР # пример sysctl.conf # kernel.имя_домена = example.com ; здесь есть пробел, который будет записан в sysctl! kernel.modprobe = /sbin/mod зонд