Вимкнути дефрагментацію 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?

редагувати: змінено заголовок ... Мені потрібно відключити THG та THP defrag


Заради інтересів, я можу запитати, чому ви хочете відключити THP?
Камерон Керр


Після перезавантаження ваша інстанція не працюватиме, якщо ви "додаєте transparent_hugepage = ніколи до рядка ядра /etc/grub.conf" і вам потрібно буде видалити цей рядок із файлу grub. Для цього ми можемо приєднати існуючий екземпляр до нового і змонтувати розділ у папці
Артем Борисов

Відповіді:


14

Рішення налаштоване , як вказував @ michael-Hammpton. Складна частина полягає в тому, що плагін 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, вам також потрібно налаштувати налаштування. Але не використовуючи вказівок, до яких ви посилаєтесь, оскільки вони настільки повні помилок, це займе півдня, щоб лише їх пояснити.

Створіть спеціальний налаштований профіль (який я зателефоную 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 і взагалі використовувати налаштування?
vcarel

1
Тому що він увімкнено за замовчуванням у конфігурації ядра та за замовчуванням у налаштованій конфігурації. Вам потрібно змінити обидва, щоб воно було повністю ефективним.
Майкл Хемптон

1
Налаштування налаштованих здається достатньо ... Мені не довелося міняти конфігурацію grub. BTW, чи є інша налаштована установка для відключення дефрагментації 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 - додавання відключення-прозорості-величезні сторінки


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

EDIT: відповідь, наведена вище, помилкова , тому що прозорі величезні ручки сторінки на даний момент відсутні у sysctl. Вибачте за шум.


Ви можете ввести потрібні значення /etc/sysctl.conf.

З чоловічої сторінки sysctl.conf (5):

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

ІМ’Я
       sysctl.conf - файл завантаження / конфігурації sysctl

ОПИС
       sysctl.conf - простий файл, що містить значення sysctl, які слід читати та встановлювати sysctl. Синтаксис просто такий:

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

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

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

ПРИКЛАД
              # зразок sysctl.conf
              #
                kernel.domainname = example.com
              ; у цього є пробіл, який буде записаний у sysctl!
                kernel.modprobe = / sbin / mod зонд

1
Це неможливо налаштувати за допомогою sysctl.
Майкл Хемптон

Чому? Я часто налаштовую / sys / knowbs за допомогою sysctl.conf ... мені щось тут не вистачає? EDIT: неважливо, я знайшов це в документації RHEL. Дякую, що мені
вказали на
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.