Я хочу отключить 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
Решение находится в настроенном , как указал @ 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
РЕДАКТИРОВАТЬ: ответ выше неверен , потому что прозрачные ручки огромных страниц отсутствуют в 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
Spróbuj także tego
nano / 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.