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

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

Ich möchte transparent_hugepage (THP) auf einer CentOS 7 EC2-Instanz deaktivieren, das 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.

echo never [...]Ich habe versucht, die Anweisung in meine rc.localDateien einzufügen cloud.cfg, aber es hat nicht funktioniert.

transparent_hugepage=neverIch habe auch versucht, die Einstellung an die Kernelzeile anzuhängen /etc/grub.conf(wie erklärtDort), aber es hat nicht besser funktioniert.

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 deaktivierenUndTHP-Defragmentierung

Antwort1

Die Lösung liegt inabgestimmt, wie @michael-hampton anmerkte. Der schwierige Teil ist, dass dievmDas Plugin kann nur die /sys/kernel/mm/transparent_hugepage/enabledEinstellung konfigurieren.

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

Am Ende lautet die vollständige Lösung:

Schritt 1: Erstellen Sie das Verzeichnis zum Speichern des benutzerdefinierten Profils:

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 erbt vonvirtueller-gast, das war mein aktives Profil, das eigentlich für einen virtualisierten Server (EC2) geeignet schien. 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/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: Das neue Profil aktivieren:

tuned-adm profile custom

Jetzt sollten Sie Folgendes erhalten:

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

Antwort2

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

Erstellen Sie ein benutzerdefiniertes Profil (ich nenne es custom) und legen Sie dann das Profil fest. Sie basieren es auf einem vorhandenen Profil, z. B. virtual-guestwenn Sie es in einer virtuellen Maschine ausführen (EC2 ist das natürlich) oder throughput-performancewenn Sie sich auf einer physischen Maschine befinden.

Erstellen Sie das Verzeichnis zum Speichern des benutzerdefinierten Profils:

mkdir /etc/tuned/custom

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

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

Legen Sie nun das Profil fest:

tuned-adm profile custom

Antwort3

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-hugepages

Antwort4

BEARBEITEN:die obige Antwort istfalsch, weil die transparenten großen Seitenknöpfe im Moment in sysctl fehlen. Entschuldigen Sie die Störung.


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

Aus der Manpage sysctl.conf(5):

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

NAME
       sysctl.conf – sysctl-Preload-/Konfigurationsdatei

BESCHREIBUNG
       sysctl.conf ist eine einfache Datei, die Sysctl-Werte enthält, die von Sysctl eingelesen und gesetzt werden. Die Syntax ist einfach wie folgt:

              # Kommentar
              ; Kommentar

              Token = Wert

       Beachten Sie, dass leere Zeilen und Leerzeichen vor und nach einem Token oder Wert ignoriert werden, obwohl ein Wert Leerzeichen enthalten kann. Zeilen, die mit einem # oder ; beginnen, werden berücksichtigt.
       Kommentare und ignoriert.

BEISPIEL
              # sysctl.conf Beispiel
              #
                kernel.domainname = beispiel.com
              ; dieses hat einen Speicherplatz, der in das Sysctl geschrieben wird!
                kernel.modprobe = /sbin/mod probe

verwandte Informationen