Назад | Перейти на главную страницу

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

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