Отключение THP и дефрагментации THP на экземпляре CentOS 7 EC2

Отключение THP и дефрагментации THP на экземпляре CentOS 7 EC2

Я хочу отключить 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 зонд

Связанный контент