Wyłącz defragmentację THP i THP w instancji CentOS 7 EC2

9

Chcę wyłączyć transparent_hugepage (THP) w instancji CentOS 7 EC2, która jest domyślnie włączona:

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

To ustawienie można zmienić ręcznie:

# 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]

... ale zmiany zostaną utracone po ponownym uruchomieniu.

Próbowałem umieścić echo never [...]instrukcję w moich rc.locali cloud.cfgplikach, ale to nie zadziałało.

Próbowałem również dołączyć ustawienie transparent_hugepage=neverdo linii jądra /etc/grub.conf(jak tam wyjaśniono ), ale nie działało to lepiej.

Więc ... jak mogę wyłączyć THP na CentOS 7 działającym na instancji AWS EC2?

edytuj: zmieniono tytuł ... Muszę wyłączyć THP i defrag THP

Vcarel
źródło
Ze względu na zainteresowanie mogę zapytać, dlaczego chcesz wyłączyć THP?
Cameron Kerr
Po ponownym uruchomieniu instancja nie będzie działać, jeśli „dołączasz transparent_hugepage = nigdy do linii jądra /etc/grub.conf” i będziesz musiał usunąć tę linię z pliku grub. W tym celu możemy dołączyć istniejącą instancję do nowej i zamontować partycję do folderu
Artem.Borysov

Odpowiedzi:

14

Rozwiązanie jest dostrojone , jak wskazał @ michael-hampton. Problem polega na tym, że wtyczka vm może jedynie skonfigurować /sys/kernel/mm/transparent_hugepage/enabledustawienie.

Aby również wyłączyć to /sys/kernel/mm/transparent_hugepage/defragustawienie, musiałem utworzyć skrypt, który będzie wywoływany przez profil przy starcie.

Na koniec kompletne rozwiązanie to:

krok 1 : Utwórz katalog do przechowywania profilu niestandardowego:

mkdir /etc/tuned/custom

krok 2 : Utwórz profil /etc/tuned/custom/tuned.conf:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

[script]
script=script.sh

Zauważ, że ten profil dziedziczy od virtual-guest , który był moim aktywnym profilem, faktycznie wyglądającym odpowiednim dla zwirtualizowanego serwera (EC2). Możesz wyświetlić swój aktywny profil za pomocą polecenia tuned-adm active. Jeśli jesteś ciekawy, możesz sprawdzić zawartość predefiniowanych profili w/usr/lib/tuned/

krok 3 : Utwórz skrypt /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 $@

Spraw, by był wykonywalny:

sudo chmod 755 /etc/tuned/custom/script.sh

krok 4 : Aktywuj nowy profil:

tuned-adm profile custom

Teraz powinieneś otrzymać:

# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

Będzie się utrzymywał po ponownym uruchomieniu.

Vcarel
źródło
Odkryliśmy, że działało to na maszynie wirtualnej AWS Redhat 7.4. Dzięki!
Jon Sampson
2

Oprócz ustawienia wiersza polecenia grub, musisz również skonfigurować dostrojony. Ale nie korzystając z instrukcji, które podałeś, ponieważ są one tak pełne błędów, że wyjaśnienie ich wszystkich zajęłoby pół dnia.

Utwórz niestandardowy dostrojony profil (do którego zadzwonię custom), a następnie ustaw profil. Będziesz opierać go na istniejącym profilu, na przykład virtual-guestjeśli pracujesz na maszynie wirtualnej (oczywiście EC2) lub throughput-performancena komputerze fizycznym.

Utwórz katalog do przechowywania profilu niestandardowego:

mkdir /etc/tuned/custom

Utwórz profil niestandardowy /etc/tuned/custom/tuned.conf, na przykład:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

Teraz ustaw profil:

tuned-adm profile custom
Michael Hampton
źródło
Te instrukcje pełne błędów? Wyjaśnienie zajęłoby pół dnia? Właśnie to próbuję zrozumieć.
vcarel
Nawiasem mówiąc, nie rozumiem twojej odpowiedzi. Dlaczego muszę skonfigurować GRUB i korzystać z tuningu?
vcarel
1
Ponieważ jest domyślnie włączony w konfiguracji jądra i domyślnie w konfiguracji dostrojonej. Musisz zmienić oba, aby było całkowicie skuteczne.
Michael Hampton
1
Konfiguracja dostrojona wydaje się wystarczająca ... Nie musiałem zmieniać grub config. BTW, czy jest jeszcze inne dostrojone ustawienie, aby wyłączyć defragmentację THP?
vcarel
@vcarel Nie jest to konieczne, ponieważ przezroczyste strony próbne są już wyłączone!
Michael Hampton
1

Spróbuj również 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

Artem.Borysow
źródło
0

Możesz edytować plik /etc/rc.local i dodać do tego pliku następujące polecenie:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

i uruchom, chmod +x /etc/rc.d/rc.localaby upewnić się, że skrypt zostanie wykonany podczas rozruchu. testowany na Amazon Linux 2.

Yuda Prawira
źródło
-2

EDYCJA: powyższa odpowiedź jest niepoprawna , ponieważ w tym momencie brakuje sysctl przezroczystych, dużych pokręteł strony. Przepraszam za hałas.


Możesz wprowadzić żądane wartości /etc/sysctl.conf.

Ze strony podręcznika sysctl.conf (5):

SYSCTL.CONF (5) Formaty plików SYSCTL.CONF (5)

IMIĘ
       sysctl.conf - plik wstępnego ładowania / konfiguracji sysctl

OPIS
       sysctl.conf to prosty plik zawierający wartości sysctl do odczytu i ustawienia przez sysctl. Składnia jest następująca:

              # komentarz
              ; komentarz

              token = wartość

       Zauważ, że puste linie są ignorowane, a białe znaki przed i po tokenach lub wartościach są ignorowane, chociaż wartość może zawierać białe spacje. Linie zaczynające się od # lub; są rozważane
       komentarze i ignorowane.

PRZYKŁAD
              # sysctl.conf sample
              #
                kernel.domainname = example.com
              ; ten ma miejsce, które zostanie zapisane w sysctl!
                sonda kernel.modprobe = / sbin / mod
Shodanshok
źródło
1
Nie można tego skonfigurować za pomocą sysctl.
Michael Hampton
Dlaczego? Często poprawiam / sys / knowbs za pomocą sysctl.conf ... brakuje mi czegoś tutaj? EDYCJA: nieważne, znalazłem to w dokumentacji RHEL. Dziękuję, że mi to
wskazałeś