Einführung in die Verwendung und Deaktivierung von Transparent Huge Pages in Linux

Einführung in die Verwendung und Deaktivierung von Transparent Huge Pages in Linux

Einführung

Da die Anforderungen an die Computertechnik ständig steigen, steigt auch der Speicherbedarf der Anwendungen. Um den Mechanismus zur virtuellen Speicherverwaltung zu implementieren, implementiert das Betriebssystem eine Paging-Verwaltung für den Speicher. Seit der Speicher-Paging-Mechanismus vorgeschlagen wurde, wurde die Standardgröße der Speicherseite auf 4096 Byte (4 KB) festgelegt. Obwohl die Speicherseitengröße grundsätzlich konfigurierbar ist, wird in den meisten Betriebssystemimplementierungen immer noch die Standardseite mit 4 KB verwendet. Als der „Paging-Mechanismus“ vorgeschlagen wurde, waren 4-KB-Seiten sinnvoll, da die Speichergröße damals nur einige zehn Megabyte betrug. Wenn die physische Speicherkapazität jedoch auf mehrere GB oder sogar einige zehn GB angewachsen ist, verwendet das Betriebssystem immer noch 4 KB als Grundeinheit der Seite. Ist das immer noch sinnvoll?

Beim Ausführen einer Anwendung mit großem Speicherbedarf auf dem Linux-Betriebssystem werden mehr TLB-Fehler und Seitenfehler generiert, da die standardmäßig verwendete Seitengröße 4 KB beträgt, was die Leistung der Anwendung erheblich beeinträchtigt. Wenn das Betriebssystem Paging-Einheiten von 2 MB oder noch mehr verwendet, verringert sich die Anzahl der TLB-Fehler und Seitenfehler erheblich, was die Anwendungsleistung deutlich verbessert. Dies ist auch der direkte Grund, warum der Linux-Kernel die Unterstützung großer Seiten eingeführt hat. Die Vorteile liegen auf der Hand. Angenommen, eine Anwendung benötigt 2 MB Speicher. Wenn das Betriebssystem 4 KB als Paging-Einheit verwendet, sind 512 Seiten und 512 Einträge im TLB erforderlich. Gleichzeitig sind auch 512 Seitentabelleneinträge erforderlich. Das Betriebssystem muss mindestens 512 TLB-Fehler und 512 Seitenfehler aufweisen, um den gesamten 2 MB großen Anwendungsspeicher dem physischen Speicher zuzuordnen. Wenn das Betriebssystem jedoch 2 MB als grundlegende Paging-Einheit verwendet, sind nur ein TLB-Fehler und ein Seitenfehler erforderlich, um eine virtuelle zu reale Zuordnung für den 2 MB großen Anwendungsspeicher herzustellen, und während des Betriebs sind keine TLB-Fehler- und Seitenfehlerunterbrechungen erforderlich (vorausgesetzt, es findet kein Ersetzen und Auslagern von TLB-Einträgen statt).

Um die Unterstützung großer Seiten zu möglichst geringen Kosten zu erreichen, verwendet das Linux-Betriebssystem die Unterstützung 2 MB großer Seiten basierend auf dem speziellen Dateisystem „hugetlbfs“. Diese Methode zur Unterstützung großer Seiten in Form eines speziellen Dateisystems ermöglicht es Anwendungen, die Größe der virtuellen Speicherseiten flexibel nach Bedarf zu wählen, ohne gezwungen zu sein, 2 MB große Seiten zu verwenden.

Wenn Redis unter Linux gestartet wird, wird normalerweise WARNING you have Transparent Huge Pages (THP) support enabled in your kernel , was zu Verzögerungen bei Redis und Problemen mit der Speichernutzung führen kann.

In Bezug auf transparente große Seiten werfen wir einen Blick auf die offizielle Einführung

Transparent Huge Pages (THP) sind in RHEL 6 für alle Anwendungen standardmäßig aktiviert. Der Kernel versucht, wann immer möglich Hugepages zuzuweisen, und jeder Linux-Prozess erhält 2 MB große Seiten, wenn die mmap-Region natürlich 2 MB groß ist. Der Hauptadressraum des Kernels selbst wird mit Hugepages abgebildet, wodurch der TLB-Druck durch den Kernelcode reduziert wird. Allgemeine Informationen zu Hugepages finden Sie unter: Was sind Huge Pages und welche Vorteile bietet ihre Verwendung?

Der Kernel versucht immer, eine Speicherzuweisung mithilfe von Hugepages durchzuführen. Wenn keine Hugepages verfügbar sind (beispielsweise weil kein physisch zusammenhängender Speicher verfügbar ist), greift der Kernel auf die regulären 4-KB-Seiten zurück. THP sind außerdem auswechselbar (im Gegensatz zu Hugetlbfs). Dies wird erreicht, indem die Hugepage in kleinere 4-KB-Seiten aufgeteilt wird, die dann normal ausgelagert werden.

Um Hugepages jedoch effektiv nutzen zu können, muss der Kernel physisch zusammenhängende Speicherbereiche finden, die groß genug sind, um die Anforderung zu erfüllen, und die auch richtig ausgerichtet sind. Zu diesem Zweck wurde ein khugepaged-Kernel-Thread hinzugefügt. Dieser Thread wird gelegentlich versuchen, kleinere, derzeit verwendete Seiten durch eine Hugepage-Zuweisung zu ersetzen und so die THP-Nutzung zu maximieren.

Im Userland sind keine Änderungen an den Anwendungen erforderlich (daher transparent). Es gibt jedoch Möglichkeiten, die Nutzung zu optimieren. Bei Anwendungen, die große Seiten verwenden möchten, kann die Verwendung von posix_memalign() auch dazu beitragen, dass große Zuordnungen an den Grenzen großer Seiten (2 MB) ausgerichtet sind.

Außerdem ist THP nur für anonyme Speicherbereiche aktiviert. Es ist geplant, Unterstützung für tmpfs und Seitencache hinzuzufügen. THP-Tunables finden Sie im /sys-Baum unter /sys/kernel/mm/redhat_transparent_hugepage.

Überprüfen Sie, ob Transparent Huge Pages aktiviert sind

1: Befehl cat /sys/kernel/mm/redhat_transparent_hugepage/enabled Dieser Befehl ist auf das Red Hat Enterprise Linux-System anwendbar

[root@getlnx06 ~]# mehr /etc/issue
 
Red Hat Enterprise Linux Server Version 6.6 (Santiago)
 
Kernel \r auf einem \m
 
[root@getlnx06 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
 
[immer] madvise nie

2: Befehl cat /sys/kernel/mm/transparent_hugepage/enabled Dieser Befehl ist auf andere Linux-Systeme anwendbar

[root@getlnx06 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
 
immer madvise [nie]
 
[root@getlnx06 ~]#

Wenn Sie den Befehl zum Anzeigen verwenden und das Ausgabeergebnis [immer] lautet, bedeutet dies, dass transparente große Seiten aktiviert sind. [never] bedeutet, dass transparente riesige Seiten deaktiviert sind, [madvise] bedeutet

3: Wenn HugePages_Total 0 zurückgibt, bedeutet dies, dass transparente große Seiten deaktiviert sind.

[root@getlnx06 ~]# grep -i HugePages_Total /proc/meminfo 
 
HugePages_Total: 0

4: cat /proc/sys/vm/nr_hugepages gibt 0 zurück, was auch bedeutet, dass transparente große Seiten deaktiviert sind.

[root@getlnx06 ~]# cat /proc/sys/vm/nr_hugepages 

0

Deaktivieren und Aktivieren der Funktion „Transparent Huge Pages“

Methode 1: Legen Sie die Datei /etc/grub.conf so fest, dass sie beim Systemstart deaktiviert wird.

[root@getlnx06 ~]# vi /etc/grub.conf
# grub.conf generiert von anaconda
#
# Beachten Sie, dass Sie grub nicht erneut ausführen müssen, nachdem Sie Änderungen an dieser Datei vorgenommen haben
# HINWEIS: Sie haben eine /boot-Partition. Das bedeutet, dass
# alle Kernel- und Initrd-Pfade sind relativ zu /boot/, zB.
# Wurzel (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/VolGroup--LogVol0-LogVol01
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
Standardwert = 0
Zeitüberschreitung = 5
splashimage=(hd0,0)/grub/splash.xpm.gz
verstecktes Menü
Titel Red Hat Enterprise Linux 6 (2.6.32-504.el6.x86_64)
    Wurzel (hd0,0)
    Kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/VolGroup--LogVol0-LogVol01 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup-LogVol0/LogVol01 rd_LVM_LV=VolGroup-LogVol0/LogVol00 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb ruhig
    initrd /initramfs-2.6.32-504.el6.x86_64.img
transparent_hugepage=nie

Methode 2: Einrichten der Datei /etc/rc.local

[root@getlnx06 ~]# vi /etc/rc.local
#!/bin/sh
#
# Dieses Skript wird *nach* allen anderen Init-Skripten ausgeführt.
# Sie können hier Ihre eigenen Initialisierungsmaterialien einfügen, wenn Sie nicht
# möchte die komplette Initialisierung im Sys-V-Stil durchführen.
berühren Sie /var/lock/subsys/local
wenn test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; dann
  echo nie > /sys/kernel/mm/redhat_transparent_hugepage/aktiviert
fi

Nachdem Sie die obige Konfiguration verwendet haben, müssen Sie das Betriebssystem neu starten, damit sie wirksam wird. Sie können den folgenden Befehl auch ausführen, ohne das Betriebssystem neu zu starten.

[root@getlnx06 ~]# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
[root@getlnx06 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
immer madvise [nie]
[root@getlnx06 ~]#

Tipps:

1: Ab den Kerneln RedHat 6, OEL 6, SLES 11 und UEK2 ist Transparent HugePages standardmäßig aktiviert: Wird verwendet, um die Leistung der Speicherverwaltung zu verbessern. Transparent HugePages ähnelt den Huge Pages in früheren Versionen. Der Hauptunterschied besteht darin, dass Transparent HugePages in Echtzeit konfiguriert werden kann und kein Neustart erforderlich ist, damit die Konfiguration wirksam wird.

2: Transparent Huge Pages werden im 32-Bit-RHEL 6 nicht unterstützt.

3: ORACLE empfiehlt offiziell nicht, Transparent HugePages zu aktivieren, wenn Sie RedHat 6-, OEL 6-, SLES 11- und UEK2-Kernel verwenden, da Transparent HugePages einige Probleme aufweist:

  • Transparent HugePages in einer RAC-Umgebung können zu abnormalen Knotenneustarts und Leistungsproblemen führen
  • In einer eigenständigen Umgebung können Transparent HugePages auch einige ungewöhnliche Leistungsprobleme verursachen.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Eine detaillierte Einführung in Linux Transparent Huge Pages
  • Einführung in den transparenten Huge Page-Mechanismus von Linux

<<:  So verschieben Sie den Datenspeicherort von mysql5.7.19 in Centos7

>>:  So verwenden Sie das Videowiedergabe-Plugin DPlayer.js

Artikel empfehlen

Einführung in general_log-Protokollwissenspunkte in MySQL

Die folgenden Funktionsdemonstrationen basieren a...

Ein einfaches Beispiel für die MySQL-Suche nach Daten im Umkreis von N Kilometern

Gemäß dem Koeffizienten von Pi und dem Radius der...

JavaScript zum Erzielen eines einfachen Lupeneffekts

In einem großen Kästchen befindet sich ein Bild. ...

Das Laufschrift-Tag in HTML erzielt einen nahtlosen Laufschrift-Effekt

Das <marquee>-Tag ist ein Tag, das paarweis...

HTML-Basis-URL-Tag

Seine Funktion besteht darin, einen globalen Stil ...

Rhit effiziente Visualisierung Nginx-Protokollanzeigetool

Inhaltsverzeichnis Einführung Installieren Anzeig...

Beispiel für die Verwendung von Docker zum Erstellen eines ELK-Protokollsystems

Die folgenden Installationen verwenden alle das V...

SQL-basierte Abfrageanweisungen

Inhaltsverzeichnis 1. Einfache SELECT-Anweisung 1...

Proxy_pass-Methode in mehreren if in Nginx-Standorten

1. Lassen Sie uns zunächst das relevante Wissen z...

Tipps zum Escapen von HTML-Texten

Heute habe ich auf CSDN einen kleinen Trick zum Es...

Einführung von ECharts in das Vue-Projekt

Inhaltsverzeichnis 1. Installation 2. Einleitung ...

Einführung in die CSS-Stilklassifizierung (Grundkenntnisse)

Klassifizierung von CSS-Stilen 1. Interner Stil -...

Ubuntu 19.10 aktiviert SSH-Dienst (detaillierter Prozess)

Ich habe mehr als eine Stunde gebraucht, um SSH i...

Lösung für dieselbe IP nach dem Klonen der virtuellen Ubuntu 18-Maschine

Vorwort Ich habe vor Kurzem eine virtuelle Maschi...