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


9

Я хочу отключить 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 дефрагментации


Ради интереса, могу я спросить, почему вы хотите отключить THP?
Кэмерон Керр


После перезагрузки ваш инстанс не будет работать, если вы «добавляете transparent_hugepage = never в строку ядра /etc/grub.conf» и должны будете удалить эту строку из файла grub. Для этого мы можем прикрепить существующий экземпляр к новому и смонтировать раздел в папку
Артем. Борисов

Ответы:


14

Решение настроено , как указал @ 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]

Это сохранится после перезагрузки.


Мы обнаружили, что это работает на AWS Redhat 7.4 VM. Спасибо!
Джон Сампсон

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

Эти инструкции полны ошибок? Это займет полдня, чтобы объяснить? Вот что я пытаюсь понять.
vcarel

Кстати, я не понимаю ваш ответ. Почему я должен настроить Grub и использовать Tuned вообще?
vcarel

1
Потому что он включен по умолчанию в конфигурации ядра и включен по умолчанию в настроенной конфигурации. Вам нужно изменить оба, чтобы он был полностью эффективным.
Майкл Хэмптон

1
Конфигурирование настроено, кажется, достаточно ... Мне не пришлось менять конфиг grub. Кстати, есть еще одна настроенная настройка для отключения дефрагментации THP тоже?
vcarel

@vcarel Нет необходимости, потому что прозрачные огромные страницы уже отключены!
Майкл Хэмптон

1

Также попробуйте это

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 отключить-прозрачные-огромные страницы


0

Вы можете отредактировать файл /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.


-2

РЕДАКТИРОВАТЬ: ответ выше является неправильным , потому что прозрачные огромные ручки страницы отсутствуют в sysctl в данный момент. Извините за шум.


Вы можете поместить желаемые значения в /etc/sysctl.conf.

Из справочной страницы sysctl.conf (5):

SYSCTL.CONF (5) Форматы файлов SYSCTL.CONF (5)

ИМЯ
       sysctl.conf - файл предварительной загрузки / конфигурации sysctl

ОПИСАНИЕ
       sysctl.conf - это простой файл, содержащий значения sysctl для чтения и установки с помощью sysctl. Синтаксис выглядит следующим образом:

              # комментарий
              ; комментарий

              токен = значение

       Обратите внимание, что пустые строки игнорируются, а пробелы до и после токена или значения игнорируются, хотя значение может содержать пробелы внутри. Строки, начинающиеся с # или; считаются
       комментарии и игнорируются.

ПРИМЕР
              # sysctl.conf sample
              #
                kernel.domainname = example.com
              ; у этого есть пробел, который будет записан в sysctl!
                kernel.modprobe = / sbin / mod probe

1
Это не может быть настроено с помощью sysctl.
Майкл Хэмптон

Почему? Я часто настраиваю / sys / knowbs, используя sysctl.conf ... Я что-то здесь упускаю? РЕДАКТИРОВАТЬ: неважно, я нашел это в документации RHEL. Спасибо, что указали мне это;)
shodanshok
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.