UPD CMS debug messages

This commit is contained in:
2023-12-14 16:21:49 +01:00
parent 0a9681a91f
commit 977c807e5a
2 changed files with 200 additions and 0 deletions

View File

@@ -3889,4 +3889,204 @@ Dies kann auch zu unterschiedlichen Konfigurationen des Pools führen, da zsmall
ähnlichen Eigenschaften zusammenführt.\\ ähnlichen Eigenschaften zusammenführt.\\
Weitere Informationen finden Sie in der Dokumentation zu zsmalloc. Weitere Informationen finden Sie in der Dokumentation zu zsmalloc.
\subsection{SLAB allocator options \texorpdfstring{$\rightarrow$}{->}}
\subsubsection{Choose SLAB allocator (SLUB (Unqueued Allocator)) \texorpdfstring{$\rightarrow$}{->}}
Diese Option ermöglicht die Auswahl eines Slab-Allokators.
\paragraph{SLAB (DEPRECATEDUnqueued Allocator)}$~$\\
CONFIG\_SLAB\_DEPRECATED [=n] \textbf{[N]}\\
Veraltet und soll in ein paar Zyklen entfernt werden. Ersetzt durch SLUB. Wenn Sie nicht auf SLUB umsteigen
können, wenden Sie sich bitte an linux-mm@kvack.org und an die Personen, die im Abschnitt SLAB ALLOCATOR der
MAINTAINERS-Datei aufgeführt sind, und erläutern Sie die Gründe. Der reguläre Slab-Allokator, der sich
bewährt hat und bekanntermaßen in allen Umgebungen gut funktioniert. Er organisiert Cache-Hot-Objekte in
Warteschlangen pro CPU und pro Knoten.
\paragraph{SLUB (Unqueued Allocator)}$~$\\
CONFIG\_SLUB [=y] \textbf{[Y]}\\
SLUB ist ein Slab-Allokator, der die Nutzung von Cache-Zeilen minimiert, anstatt Warteschlangen von gecachten
Objekten zu verwalten (SLAB-Ansatz). Die Zwischenspeicherung pro CPU wird durch Slabs von Objekten anstelle
von Objekt-Warteschlangen realisiert. SLUB kann den Speicher effizient nutzen und verfügt über verbesserte
Diagnosefunktionen. SLUB ist die Standardwahl für einen Slab-Allokator.
\subsubsection{Allow slab caches to be merged}
CONFIG\_SLAB\_MERGE\_DEFAULT [=y] \textbf{[Y]}\\
Um die Fragmentierung des Kernspeichers zu verringern, können Slab-Caches zusammengelegt werden, wenn sie
die gleiche Größe und andere Merkmale aufweisen. Dies birgt das Risiko, dass Kernel-Heap-Überläufe Objekte
aus zusammengeführten Caches überschreiben können (und das Cache-Layout leichter zu kontrollieren ist),
wodurch solche Heap-Angriffe von Angreifern leichter ausgenutzt werden können. Wenn die Caches nicht gemischt
werden, können diese Arten von Angriffen normalerweise nur Objekte im selben Cache beschädigen. Um die
Zusammenführung zur Laufzeit zu deaktivieren, kann \texttt{slab\_nomerge} in der Kernel-Befehlszeile
übergeben werden.
\subsubsection{Randomize slab freelist}
CONFIG\_SLAB\_FREELIST\_RANDOM [=y] \textbf{[Y]}\\
Die Reihenfolge der Freelist bei der Erstellung neuer Seiten wird zufällig festgelegt.
Dieses Sicherheitsmerkmal verringert die Vorhersagbarkeit der Kernel-Slab-Zuweisung gegen Heap-Überläufe.
\subsubsection{Harden slab freelist metadata}
CONFIG\_SLAB\_FREELIST\_HARDENED [=y] \textbf{[Y]}\\
Viele Kernel-Heap-Angriffe zielen auf Slab-Cache-Metadaten und andere Infrastrukturen ab.
Diese Optionen bringen geringfügige Leistungseinbußen mit sich, um den Kernel-Slab-Allokator gegen gängige
Freelist-Angriffsmethoden zu härten. Einige Slab-Implementierungen haben mehr Sanity-Checking als andere.
Diese Option ist am effektivsten mit CONFIG\_SLUB.
\subsubsection{Enable SLUB performance statistics}
CONFIG\_SLUB\_STATS [=n] \textbf{[N]}\\
SLUB-Statistiken sind nützlich, um das Zuweisungsverhalten von SLUBs zu debuggen und Wege zur Optimierung
der Zuweisungsfunktion zu finden. Diese Funktion sollte niemals für den produktiven Einsatz aktiviert werden,
da die Führung von Statistiken die Zuweisungsfunktion um einige Prozentpunkte verlangsamt.
Der Befehl \texttt{slabinfo} unterstützt die Ermittlung der aktivsten Slabs, um herauszufinden,
welche Slabs für eine bestimmte Last relevant sind. Versuchen Sie Folgendes: \texttt{slabinfo -DA}
\subsubsection{SLUB per cpu partial cache}
CONFIG\_SLUB\_CPU\_PARTIAL [=y] \textbf{[Y]}\\
Partielle Zwischenspeicher pro CPU beschleunigen die Zuweisung und Freigabe von Objekten, die lokal auf einem
Prozessor liegen, zum Preis einer größeren Unbestimmtheit bei der Latenzzeit der Freigabe. Bei Überlauf
werden diese Caches geleert, was das Einnehmen von Sperren erfordert, die Latenzspitzen verursachen können.
Normalerweise würde man sich bei einem Echtzeitsystem für nein entscheiden.
\subsubsection{Randomize slab caches for normal kmalloc}
CONFIG\_RANDOM\_KMALLOC\_CACHES [=n] \textbf{[N]}\\
Eine Härtungsfunktion, die mehrere Kopien von Slab-Caches für die normale kmalloc-Allokation erstellt und
kmalloc veranlasst, eine zufällig auf der Grundlage der Code-Adresse auszuwählen, was es Angreifern
erschwert, verwundbare Speicherobjekte auf den Heap zu sprühen, um Speicherschwachstellen auszunutzen.
Gegenwärtig ist die Anzahl der Kopien auf 16 festgelegt, ein angemessen großer Wert, der die für verschiedene
Subsysteme oder Module zugewiesenen Speicherobjekte effektiv in verschiedene Caches aufteilt, und zwar auf
Kosten eines begrenzten Grades an Speicher- und CPU-Overhead, der mit der Hardware und der Systemauslastung
zusammenhängt.
\subsection{Page allocator randomization}
CONFIG\_SHUFFLE\_PAGE\_ALLOCATOR [=y] \textbf{[Y]}\\
Die Randomisierung der Seitenzuweisung verbessert die durchschnittliche Auslastung eines direkt abgebildeten
Memory-Side-Cache. In Abschnitt 5.2.27 Heterogeneous Memory Attribute Table (HMAT) der ACPI 6.2a-Spezifikation
finden Sie ein Beispiel dafür, wie eine Plattform das Vorhandensein eines speicherseitigen Cache anzeigt.
Es gibt auch zufällige Sicherheitsvorteile, da es die Vorhersagbarkeit von Seitenzuweisungen reduziert, um
SLAB\_FREELIST\_RANDOM zu ergänzen, aber die Standardgranularität des Shufflings auf MAX\_ORDER,
d.h. die 10. Reihenfolge der Seiten wird auf der Grundlage der Cache-Nutzung auf x86 ausgewählt.
Die Randomisierung verbessert zwar die Cache-Nutzung, kann sich aber auf Plattformen ohne Cache negativ auf
die Arbeitslast auswirken. Aus diesem Grund wird die Randomisierung standardmäßig nur aktiviert, wenn zur
Laufzeit ein direkt zugeordneter Memory-Side-Cache erkannt wird. Andernfalls kann die Randomisierung mit dem
Kernel-Befehlszeilenparameter \texttt{page\_alloc.shuffle} zwangsweise aktiviert werden.
Sagen Sie Y, wenn Sie unsicher sind.
\subsection{Disable heap randomization}
CONFIG\_COMPAT\_BRK [=n] \textbf{[N]}\\
Die Randomisierung der Heap-Platzierung macht Heap-Exploits schwieriger, aber sie macht auch alte
Binärdateien (einschließlich aller libc5-basierten) kaputt. Diese Option ändert die Standardeinstellung beim
Booten auf Heap-Randomisierung deaktiviert und kann zur Laufzeit überschrieben werden, indem
/proc/sys/kernel/randomize\_va\_space auf 2 gesetzt wird. Auf nicht-alten Distributionen (nach 2000)
ist N normalerweise eine sichere Wahl.
\subsection{Sparse Memory virtual memmap}
CONFIG\_SPARSEMEM\_VMEMMAP [=y] \textbf{[Y]}\\
SPARSEMEM\_VMEMMAP verwendet eine virtuell gemappte Memmap, um texttt{pfn\_to\_page} und\\
\texttt{page\_to\_pfn} Operationen zu optimieren.
Dies ist die effizienteste Option, wenn genügend Kernel-Res\-sour\-cen verfügbar sind.
\subsection{Memory hotplug \texorpdfstring{$\rightarrow$}{->}}
CONFIG\_HOTPLUG [=y] \textbf{[Y]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\subsubsection{Online the newly added memory blocks by default}
CONFIG\_MEMORY\_HOTPLUG\_DEFAULT\_ONLINE [=y] \textbf{[Y]}\\
Diese Option legt die Standardeinstellung für die Hotplug-Onlining-Richtlinie für Speicher\\
(/sys/devices/system/memory/auto\_online\_blocks) fest, die bestimmt, was mit neu hinzugefügten
Spei\-cher\-be\-reichen geschieht.
Die Richtlinieneinstellung kann jederzeit zur Laufzeit geändert werden.\\
Siehe Documentation/admin-guide/mm/memory-hotplug.rst für weitere Informationen.
Geben Sie hier Y an, wenn Sie möchten, dass alle Hotplug-Speicherblöcke standardmäßig im
\glqq Online\grqq{}-Zustand erscheinen. Geben Sie hier N an, wenn Sie möchten, dass die
Standardrichtlinie alle Hot-Plugged-Speicherblöcke im \glqq Offline\grqq{}-Zustand hält.
\subsubsection{Allow for memory hot remove}
CONFIG\_MEMORY\_HOTREMOVE [=y] \textbf{[Y]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\subsection{Allow for balloon memory compaction/migration}
CONFIG\_BALLOON\_COMPACTION [=y] \textbf{[Y]}\\
Die durch das Ballooning verursachte Speicherfragmentierung kann die Anzahl der zusammenhängenden
2-MB-Speicher\-blöcke, die in einem Gastsystem verwendet werden können, erheblich verringern, was zu
Leistungseinbußen aufgrund der geringeren Anzahl transparenter großer Seiten führt, die vom Gastsystem
verwendet werden können. Das Zulassen der Verdichtung und Migration für Speicherseiten, die als Teil von
Speicher-Ballon-Geräten eingetragen sind, vermeidet das oben beschriebene Szenario und trägt zur Verbesserung
der Speicherdefragmentierung bei.
\subsection{Allow for memory compaction}
CONFIG\_COMPACTION [=y] \textbf{[Y]}\\
Die Verdichtung ist die einzige Speicherverwaltungskomponente, die zuverlässig Speicherblöcke hoher Ordnung
(größere, physisch zusammenhängende Blöcke) bildet. Die Seitenzuweisung ist in hohem Maße auf die Verdichtung
angewiesen, und das Fehlen dieser Funktion kann bei Speicheranforderungen hoher Ordnung zu unerwarteten
OOM-Killer-Aufrufen führen. Sie sollten diese Option nicht deaktivieren, es sei denn, es gibt wirklich einen
triftigen Grund dafür, und dann wären wir sehr daran interessiert, diesen unter
\href{mailto:linux-mm@kvack.org}{linux-mm@kvack.org} zu erfahren.
\subsection{Free page reporting}
CONFIG\_PAGE\_REPORTING [=y] \textbf{[Y]}\\
Die Meldung freier Seiten ermöglicht die inkrementelle Erfassung freier Seiten vom Buddy-Allokator mit
dem Ziel, diese Seiten einer anderen Einheit, z.~B. einem Hypervisor, zu melden, damit der Speicher
innerhalb des Hosts für andere Zwecke freigegeben werden kann.
\subsection{Page migration}
CONFIG\_MIGRATION [=y] \textbf{[Y]}\\
Ermöglicht die Migration des physischen Standorts von Seiten von Prozessen, während die virtuellen
Adressen nicht geändert werden. Dies ist in zwei Situationen nützlich. Erstens auf NUMA-Systemen, um
Seiten näher an die zugreifenden Prozessoren zu bringen. Zweitens bei der Zuweisung großer Seiten,
da durch die Migration Seiten verlagert werden können, um eine große Seitenzuweisung zu erfüllen,
anstatt sie zurückzufordern.
\subsection{Enable KSM for page merging}
CONFIG\_KSM [=y] \textbf{[Y]}\\
Aktivieren Sie Kernel Samepage Merging: KSM scannt in regelmäßigen Abständen die Bereiche des Adressraums
einer Anwendung, die laut einer Anwendung zusammengeführt werden können. Wenn er Seiten mit identischem
Inhalt findet, ersetzt er die vielen Instanzen durch eine einzige Seite mit diesem Inhalt und spart so
Speicher, bis eine oder eine andere Anwendung den Inhalt ändern muss. Empfohlen für die Verwendung mit KVM
oder mit anderen doppelten Anwendungen.\\
Siehe Documentation/mm/ksm.rst für weitere Informationen: KSM ist inaktiv, bis ein Programm festgestellt hat,
dass ein Bereich MADV\_MERGEABLE ist, und root /sys/kernel/mm/ksm/run auf 1 gesetzt hat
(wenn CONFIG\_SYSFS gesetzt ist).
\subsection{Low address space to protect from user allocation}
CONFIG\_DEFAULT\_MMAP\_MIN\_ADDR [=65536] \textbf{[65536]}\\
Dies ist der Teil des niedrigen virtuellen Speichers, der vor der Zuweisung an den Benutzerraum geschützt werden
sollte. Wenn ein Benutzer davon abgehalten wird, auf niedrige Seiten zu schreiben, kann dies dazu beitragen, die
Auswirkungen von NULL-Zeiger-Fehlern im Kernel zu verringern. Für die meisten ia64-, ppc64- und x86-Benutzer mit
viel Adressraum ist ein Wert von 65536 angemessen und sollte keine Probleme verursachen.
Auf Arm und anderen Archs sollte er nicht höher als 32768 sein. Programme, die die vm86-Funktionalität nutzen oder
diesen niedrigen Adressraum abbilden müssen, benötigen CAP\_SYS\_RAWIO oder deaktivieren diesen Schutz,
indem sie den Wert auf 0 setzen. Dieser Wert kann nach dem Booten mit dem Parameter /proc/sys/vm/mmap\_min\_addr
geändert werden.
\subsection{Enable recovery from hardware memory errors}
CONFIG\_MEMORY\_FAILURE [=y] \textbf{[Y]}\\
Ermöglicht die Wiederherstellung von Code nach einigen Speicherfehlern auf Systemen mit MCA-Wiederherstellung.
Dadurch kann ein System auch dann weiterlaufen, wenn ein Teil des Speichers unkorrigierte Fehler aufweist. Dies
erfordert spezielle Hardwareunterstützung und in der Regel ECC-Speicher.
\subsection{HWPoison pages injector}
CONFIG\_HWPOISON\_INJECT [=m] \textbf{[M]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\subsection{Transparent Hugepage Support}
CONFIG\_TRANSPARENT\_HUGEPAGE [=y] \textbf{[Y]}\\
Transparent Hugepages erlaubt es dem Kernel, große Seiten und große tlb transparent für die Anwendungen zu
verwenden, wann immer dies möglich ist. Diese Funktion kann die Rechenleistung bestimmter Anwendungen verbessern,
indem sie Seitenfehler bei der Speicherzuweisung beschleunigt, die Anzahl der tlb-Misses verringert und das
Durchlaufen der Seitentabelle beschleunigt.
Wenn der Speicher bei eingebetteten Systemen begrenzt ist, können Sie N angeben.
\subsection{Contiguous Memory Allocator}
CONFIG\_CMA [=y] \textbf{[Y]}\\
Dadurch wird der Contiguous Memory Allocator aktiviert, der es anderen Subsystemen ermöglicht, große, physisch
zusammenhängende Speicherblöcke zuzuweisen. CMA reserviert einen Speicherbereich und erlaubt nur die Zuweisung
beweglicher Seiten aus diesem Bereich. Auf diese Weise kann der Kernel den Speicher als Pagecache verwenden,
und wenn ein Subsystem einen zusammenhängenden Bereich anfordert, werden die zugewiesenen Seiten verschoben,
um die zusammenhängende Anforderung zu bedienen. Wenn Sie unsicher sind, sagen Sie N für nein.
\subsubsection{CMS debug messages (DEVELOPMENT)}
CONFIG\_CMA\_DEBUG [=n] \textbf{[N]}\\
Schaltet Debug-Meldungen in CMA ein. Dies erzeugt KERN\_DEBUG-Meldungen für jeden CMA-Aufruf sowie verschiedene
Meldungen während der Verarbeitung von Aufrufen wie dma\_alloc\_from\_contiguous(). Diese Option hat keinen
Einfluss auf Warn- und Fehlermeldungen.
\end{document} \end{document}