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.local
Dateien einzufügen cloud.cfg
, aber es hat nicht funktioniert.
transparent_hugepage=never
Ich 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/enabled
Einstellung konfigurieren.
Um die /sys/kernel/mm/transparent_hugepage/defrag
Einstellung 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-guest
wenn Sie es in einer virtuellen Maschine ausführen (EC2 ist das natürlich) oder throughput-performance
wenn 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