Deaktivieren Sie die THP- und THP-Defragmentierung auf der CentOS 7 EC2-Instanz


9

Ich möchte transparent_hugepage (THP) auf einer CentOS 7 EC2-Instanz deaktivieren, die standardmäßig aktiviert ist:

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

Diese Einstellung kann manuell geändert werden:

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

... aber die Änderungen gehen nach dem Neustart verloren.

Ich habe versucht, die echo never [...]Anweisung in meine rc.localund cloud.cfgDateien zu schreiben, aber es hat nicht funktioniert.

Ich habe auch versucht die Einstellung anhängen transparent_hugepage=neveran die Kernel - Zeile von /etc/grub.conf(wie erklärt es ), aber es nicht besser funktionierte.

Also ... wie kann ich THP unter CentOS 7 deaktivieren, das auf einer AWS EC2-Instanz ausgeführt wird?

Bearbeiten: Titel geändert ... Ich muss THP deaktivieren und THP defragmentieren


Darf ich Sie fragen, warum Sie THP deaktivieren möchten?
Cameron Kerr


Nach dem Neustart funktioniert Ihre Instasnce nicht, wenn Sie "transparent_hugepage = nie an die Kernel-Zeile von /etc/grub.conf anhängen" und diese Zeile aus der Grub-Datei entfernen müssen. Zu diesem Zweck können wir eine vorhandene Instanz an eine neue anhängen und die Partition in den Ordner
einhängen

Antworten:


14

Die Lösung ist abgestimmt , wie @ michael-hampton hervorhebt. Der schwierige Teil ist, dass das VM- Plugin nur die /sys/kernel/mm/transparent_hugepage/enabledEinstellung konfigurieren kann .

Um die /sys/kernel/mm/transparent_hugepage/defragEinstellung ebenfalls zu deaktivieren , musste ich ein Skript erstellen, das beim Start vom Profil aufgerufen wird.

Am Ende lautet die Komplettlösung:

Schritt 1 : Erstellen Sie das Verzeichnis für das benutzerdefinierte Profil:

mkdir /etc/tuned/custom

Schritt 2 : Erstellen Sie das Profil /etc/tuned/custom/tuned.conf:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

[script]
script=script.sh

Beachten Sie, dass dieses Profil vom virtuellen Gast erbt , der mein aktives Profil war und tatsächlich für den virtualisierten Server (EC2) geeignet ist. Sie können Ihr aktives Profil mit dem Befehl anzeigen tuned-adm active. Wenn Sie neugierig sind, können Sie den Inhalt der vordefinierten Profile in überprüfen/usr/lib/tuned/

Schritt 3 : Erstellen Sie das Skript /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 $@

Machen Sie es ausführbar:

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

Schritt 4 : Aktivieren Sie das neue Profil:

tuned-adm profile custom

Jetzt solltest du bekommen:

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

Es bleibt nach dem Neustart bestehen.


Wir haben festgestellt, dass dies auf einer AWS Redhat 7.4-VM funktioniert. Vielen Dank!
Jon Sampson

2

Zusätzlich zum Festlegen der Grub-Befehlszeile müssen Sie auch die Einstellung konfigurieren. Verwenden Sie jedoch nicht die Anweisungen, auf die Sie verlinkt haben, da diese so fehlerhaft sind, dass es einen halben Tag dauern würde, sie alle zu erklären.

Erstellen Sie ein benutzerdefiniertes optimiertes Profil (das ich aufrufen werde custom) und legen Sie dann das Profil fest. virtual-guestSie basieren auf einem vorhandenen Profil, z. B. wenn Sie in einer virtuellen Maschine ausgeführt werden (EC2 natürlich) oder throughput-performancewenn Sie sich auf einer physischen Maschine befinden.

Erstellen Sie das Verzeichnis für das benutzerdefinierte Profil:

mkdir /etc/tuned/custom

Erstellen Sie das benutzerdefinierte Profil /etc/tuned/custom/tuned.conf, zum Beispiel:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

Stellen Sie nun das Profil ein:

tuned-adm profile custom

Diese Anweisungen voller Fehler? Es würde einen halben Tag dauern, um zu erklären? Das versuche ich zu verstehen.
Vcarel

Ich verstehe deine Antwort übrigens nicht. Warum muss ich grub konfigurieren und tuned insgesamt verwenden?
Vcarel

1
Denn es ist standardmäßig in der Kernel - Konfiguration auf und standardmäßig in der abgestimmten Konfiguration. Sie müssen beide ändern, damit es vollständig wirksam ist.
Michael Hampton

1
Das Konfigurieren von Tuning scheint genug zu sein ... Ich musste die Grub-Konfiguration nicht ändern. Übrigens, gibt es eine andere abgestimmte Einstellung, um die THP-Defragmentierung zu deaktivieren?
Vcarel

@vcarel Es ist nicht notwendig, da transparente riesige Seiten bereits deaktiviert sind!
Michael Hampton

1

Versuchen Sie auch dies

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-riesige Seiten


0

Sie können die Datei /etc/rc.local bearbeiten und den folgenden Befehl zu dieser Datei hinzufügen:

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

und ausführen, chmod +x /etc/rc.d/rc.localum sicherzustellen, dass das Skript während des Startvorgangs ausgeführt wird. getestet unter Amazon Linux 2.


-2

BEARBEITEN: Die obige Antwort ist falsch , da die transparenten riesigen Seitenknöpfe im Moment in sysctl fehlen. Entschuldigung für den Lärm.


Sie können die gewünschten Werte eingeben /etc/sysctl.conf.

Aus der Manpage sysctl.conf (5):

SYSCTL.CONF (5) Dateiformate SYSCTL.CONF (5)

NAME
       sysctl.conf - Vorlade- / Konfigurationsdatei von sysctl

BESCHREIBUNG
       sysctl.conf ist eine einfache Datei mit sysctl-Werten, die von sysctl eingelesen und festgelegt werden. Die Syntax lautet einfach wie folgt:

              # Kommentar
              ;; Kommentar

              Token = Wert

       Beachten Sie, dass Leerzeilen ignoriert werden und Leerzeichen vor und nach einem Token oder Wert ignoriert werden, obwohl ein Wert Leerzeichen enthalten kann. Zeilen, die mit einem # oder beginnen; gelten als
       Kommentare und ignoriert.

BEISPIEL
              # sysctl.conf Beispiel
              #
                kernel.domainname = example.com
              ;; Dieser hat ein Leerzeichen, das in das System geschrieben wird!
                kernel.modprobe = / sbin / mod probe

1
Dies kann nicht mit sysctl konfiguriert werden.
Michael Hampton

Warum? Ich optimiere / sys / knowbs oft mit sysctl.conf ... Fehlt mir hier etwas? EDIT: egal, ich habe es in der RHEL-Dokumentation gefunden. Danke, dass
du
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.