UPD 13 Memory Managment TODO

This commit is contained in:
2025-04-21 11:10:14 +02:00
parent 4f9131a8d1
commit 4a8cea6e2e
3 changed files with 83 additions and 27 deletions

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:0ecc7e523e5b60a98fc748c5e17e9ce5e07078849a8ec1988ceb9e62342ee5c3 oid sha256:db4242e0bb7e8957ea42dac29bb2904c898c918cf289b79c70a368b1cb798266
size 237799 size 3377728

View File

@@ -9,19 +9,19 @@
% pacman -S hyphen hyphen-de % pacman -S hyphen hyphen-de
% pacman -S texlive-mathscience % pacman -S texlive-mathscience
\includeonly{ %\includeonly{
%linux_configuration_04_mitigations_for_speculative_execution_vulnerabilities, %linux_configuration_04_mitigations_for_speculative_execution_vulnerabilities,
%linux_configuration_05_power_management_and_acpi_options, %linux_configuration_05_power_management_and_acpi_options,
%linux_configuration_09_general_architecture-dependent_options, %linux_configuration_09_general_architecture-dependent_options,
%linux_configuration_11_enable_the_block_layer, %linux_configuration_11_enable_the_block_layer,
%linux_configuration_12_executable_file_formats, %linux_configuration_12_executable_file_formats,
linux_configuration_13_memory_management_options, %linux_configuration_13_memory_management_options,
%linux_configuration_14_networking_support, %linux_configuration_14_networking_support,
%linux_configuration_15_device_drivers, %linux_configuration_15_device_drivers,
%linux_configuration_16_file_systems, %linux_configuration_16_file_systems,
%linux_configuration_17_security_options, %linux_configuration_17_security_options,
%linux_configuration_18_cryptographic_API %linux_configuration_18_cryptographic_API
} %}
\documentclass[10pt,a4paper]{article} \documentclass[10pt,a4paper]{article}
%\documentclass[12pt,a4paper]{report} %\documentclass[12pt,a4paper]{report}

View File

@@ -188,24 +188,31 @@ For more information, see zsmalloc documentation.}
%13.3 %13.3
\subsection{Slab allocator options \texorpdfstring{$\rightarrow$}{->}} \subsection{Slab allocator options \texorpdfstring{$\rightarrow$}{->}}
Dies ermöglicht die Auswahl eines Slab-Allokators.
\subsubsection{Choose SLAB allocator (SLUB (Unqueued Allocator)) \texorpdfstring{$\rightarrow$}{->}} %\paragraph{SLAB (DEPRECATEDUnqueued Allocator)}$~$\\
Diese Option ermöglicht die Auswahl eines Slab-Allokators. %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{SLAB (DEPRECATEDUnqueued Allocator)}$~$\\ %\paragraph{SLUB (Unqueued Allocator)}$~$\\
CONFIG\_SLAB\_DEPRECATED [=n] \textbf{[N]}\\ %CONFIG\_SLUB [=y] \textbf{[Y]}\\
Veraltet und soll in ein paar Zyklen entfernt werden. Ersetzt durch SLUB. Wenn Sie nicht auf SLUB umsteigen %SLUB ist ein Slab-Allokator, der die Nutzung von Cache-Zeilen minimiert, anstatt Warteschlangen von gecachten
können, wenden Sie sich bitte an linux-mm@kvack.org und an die Personen, die im Abschnitt SLAB ALLOCATOR der %Objekten zu verwalten (SLAB-Ansatz). Die Zwischenspeicherung pro CPU wird durch Slabs von Objekten anstelle
MAINTAINERS-Datei aufgeführt sind, und erläutern Sie die Gründe. Der reguläre Slab-Allokator, der sich %von Objekt-Warteschlangen realisiert. SLUB kann den Speicher effizient nutzen und verfügt über verbesserte
bewährt hat und bekanntermaßen in allen Umgebungen gut funktioniert. Er organisiert Cache-Hot-Objekte in %Diagnosefunktionen. SLUB ist die Standardwahl für einen Slab-Allokator.
Warteschlangen pro CPU und pro Knoten.
\paragraph{SLUB (Unqueued Allocator)}$~$\\ \subsubsection{Configure for minimal memory footprint \tiny{seit 6.8}}
CONFIG\_SLUB [=y] \textbf{[Y]}\\ CONFIG\_SLUB\_TINY [=n] \textbf{[N]}\\*
SLUB ist ein Slab-Allokator, der die Nutzung von Cache-Zeilen minimiert, anstatt Warteschlangen von gecachten Konfiguriert den Slab-Allokator so, dass ein minimaler Speicherbedarf erreicht wird, was zu Lasten der Skalierbarkeit, der Fehlersuche und anderer Funktionen geht.
Objekten zu verwalten (SLAB-Ansatz). Die Zwischenspeicherung pro CPU wird durch Slabs von Objekten anstelle Dies ist nur für das kleinste System gedacht, das die SLOB-Zuweisung verwendet hat, und wird für Systeme mit mehr als 16 MB RAM nicht empfohlen.
von Objekt-Warteschlangen realisiert. SLUB kann den Speicher effizient nutzen und verfügt über verbesserte Wenn Sie unsicher sind, sagen Sie N.
Diagnosefunktionen. SLUB ist die Standardwahl für einen Slab-Allokator. \english{Configures the slab allocator in a way to achieve minimal memory footprint, sacrificing scalability, debugging and other features.
This is intended only for the smallest system that had used the SLOB allocator and is not recommended for systems with more than 16MB RAM.\\
If unsure, say N.}
\subsubsection{Allow slab caches to be merged} \subsubsection{Allow slab caches to be merged}
CONFIG\_SLAB\_MERGE\_DEFAULT [=y] \textbf{[Y]}\\ CONFIG\_SLAB\_MERGE\_DEFAULT [=y] \textbf{[Y]}\\
@@ -216,11 +223,18 @@ wodurch solche Heap-Angriffe von Angreifern leichter ausgenutzt werden können.
werden, können diese Arten von Angriffen normalerweise nur Objekte im selben Cache beschädigen. Um die 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 Zusammenführung zur Laufzeit zu deaktivieren, kann \texttt{slab\_nomerge} in der Kernel-Befehlszeile
übergeben werden. übergeben werden.
\english{For reduced kernel memory fragmentation, slab caches can be merged when they share the same size and other characteristics.
This carries a risk of kernel heap overflows being able to overwrite objects from merged caches (and more easily control cache layout),
which makes such heap attacks easier to exploit by attackers.
By keeping caches unmerged, these kinds of exploits can usually only damage objects in the same cache.
To disable merging at runtime, ``slab\_nomerge'' can be passed on the kernel command line.}
\subsubsection{Randomize slab freelist} \subsubsection{Randomize slab freelist}
CONFIG\_SLAB\_FREELIST\_RANDOM [=y] \textbf{[Y]}\\ CONFIG\_SLAB\_FREELIST\_RANDOM [=y] \textbf{[Y]}\\
Die Reihenfolge der Freelist bei der Erstellung neuer Seiten wird zufällig festgelegt. 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. Dieses Sicherheitsmerkmal verringert die Vorhersagbarkeit der Kernel-Slab-Zuweisung gegen Heap-Überläufe.
\english{Randomizes the freelist order used on creating new pages.
This security feature reduces the predictability of the kernel slab allocator against heap overflows.}
\subsubsection{Harden slab freelist metadata} \subsubsection{Harden slab freelist metadata}
CONFIG\_SLAB\_FREELIST\_HARDENED [=y] \textbf{[Y]}\\ CONFIG\_SLAB\_FREELIST\_HARDENED [=y] \textbf{[Y]}\\
@@ -228,21 +242,43 @@ Viele Kernel-Heap-Angriffe zielen auf Slab-Cache-Metadaten und andere Infrastruk
Diese Optionen bringen geringfügige Leistungseinbußen mit sich, um den Kernel-Slab-Allokator gegen gängige 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. Freelist-Angriffsmethoden zu härten. Einige Slab-Implementierungen haben mehr Sanity-Checking als andere.
Diese Option ist am effektivsten mit CONFIG\_SLUB. Diese Option ist am effektivsten mit CONFIG\_SLUB.
\english{Many kernel heap attacks try to target slab cache metadata and other infrastructure.
This options makes minor performance sacrifices to harden the kernel slab allocator against common freelist exploit methods.}
\subsubsection{Enable SLUB performance statistics} \subsubsection{Support allocation from separate kmalloc buckets \tiny{seit 6.11}}
CONFIG\_SLAB\_BUCKETS [=y] \textbf{[Y]}\\*
Angriffe auf den Kernel-Heap hängen häufig davon ab, dass man in der Lage ist, speziell dimensionierte Zuweisungen mit benutzergesteuertem Inhalt zu erstellen,
die in denselben kmalloc-Bucket wie ein Zielobjekt zugewiesen werden.
Um die gemeinsame Nutzung dieser Zuweisungsbereiche zu vermeiden, sollte ein explizit getrennter Satz von Bereichen
für benutzergesteuerte Zuweisungen bereitgestellt werden.
Dies kann die Speicherfragmentierung geringfügig erhöhen, obwohl es sich in der Praxis nur um eine Handvoll zusätzlicher Seiten handelt,
da der Großteil der benutzergesteuerten Zuweisungen relativ langlebig ist.\\
Wenn Sie unsicher sind, sagen Sie Y.
\english{Kernel heap attacks frequently depend on being able to create specifically-sized allocations with user-controlled contents
that will be allocated into the same kmalloc bucket as a target object.
To avoid sharing these allocation buckets, provide an explicitly separated set of buckets to be used for user-controlled allocations.
This may very slightly increase memory fragmentation, though in practice it's only a handful of extra pages since the bulk of user-controlled
allocations are relatively long-lived.\\
If unsure, say Y.}
\subsubsection{Enable performance statistics}
CONFIG\_SLUB\_STATS [=n] \textbf{[N]}\\ CONFIG\_SLUB\_STATS [=n] \textbf{[N]}\\
SLUB-Statistiken sind nützlich, um das Zuweisungsverhalten von SLUBs zu debuggen und Wege zur Optimierung 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, 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. 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, 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} welche Slabs für eine bestimmte Last relevant sind. Versuchen Sie Folgendes: \texttt{slabinfo -DA}
\english{The statistics are useful to debug slab allocation behavior in order find ways to optimize the allocator.
This should never be enabled for production use since keeping statistics slows down the allocator by a few percentage points.
The slabinfo command supports the determination of the most active slabs to figure out which slabs are relevant to a particular load.
Try running: \texttt{slabinfo -DA}}
\subsubsection{SLUB per cpu partial cache} %\subsubsection{SLUB per cpu partial cache}
CONFIG\_SLUB\_CPU\_PARTIAL [=y] \textbf{[Y]}\\ %CONFIG\_SLUB\_CPU\_PARTIAL [=y] \textbf{[Y]}\\
Partielle Zwischenspeicher pro CPU beschleunigen die Zuweisung und Freigabe von Objekten, die lokal auf einem %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 %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. %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. %Normalerweise würde man sich bei einem Echtzeitsystem für nein entscheiden.
\subsubsection{Randomize slab caches for normal kmalloc} \subsubsection{Randomize slab caches for normal kmalloc}
CONFIG\_RANDOM\_KMALLOC\_CACHES [=n] \textbf{[N]}\\ CONFIG\_RANDOM\_KMALLOC\_CACHES [=n] \textbf{[N]}\\
@@ -253,6 +289,10 @@ Gegenwärtig ist die Anzahl der Kopien auf 16 festgelegt, ein angemessen großer
Subsysteme oder Module zugewiesenen Speicherobjekte effektiv in verschiedene Caches aufteilt, und zwar auf 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 Kosten eines begrenzten Grades an Speicher- und CPU-Overhead, der mit der Hardware und der Systemauslastung
zusammenhängt. zusammenhängt.
\english{A hardening feature that creates multiple copies of slab caches for normal kmalloc allocation and makes kmalloc randomly pick one based on code address,
which makes the attackers more difficult to spray vulnerable memory objects on the heap for the purpose of exploiting memory vulnerabilities.\\
Currently the number of copies is set to 16, a reasonably large value that effectively diverges the memory objects allocated for different
subsystems or modules into different caches, at the expense of a limited degree of memory and CPU overhead that relates to hardware and system workload.}
%13.4 %13.4
\subsection{Page allocator randomization} \subsection{Page allocator randomization}
@@ -268,6 +308,15 @@ die Arbeitslast auswirken. Aus diesem Grund wird die Randomisierung standardmä
Laufzeit ein direkt zugeordneter Memory-Side-Cache erkannt wird. Andernfalls kann die Randomisierung mit dem Laufzeit ein direkt zugeordneter Memory-Side-Cache erkannt wird. Andernfalls kann die Randomisierung mit dem
Kernel-Befehlszeilenparameter \texttt{page\_alloc.shuffle} zwangsweise aktiviert werden. Kernel-Befehlszeilenparameter \texttt{page\_alloc.shuffle} zwangsweise aktiviert werden.
Sagen Sie Y, wenn Sie unsicher sind. Sagen Sie Y, wenn Sie unsicher sind.
\english{Randomization of the page allocator improves the average utilization of a direct-mapped memory-side-cache.
See section 5.2.27 Heterogeneous Memory Attribute Table (HMAT) in the ACPI 6.2a specification for an example of how a platform advertises
the presence of a memory-side-cache.
There are also incidental security benefits as it reduces the predictability of page allocations to compliment SLAB\_FREELIST\_RANDOM, but the default
granularity of shuffling on the MAX\_PAGE\_ORDER i.e, 10th order of pages is selected based on cache utilization benefits on x86.\\
While the randomization improves cache utilization it may negatively impact workloads on platforms without a cache.
For this reason, by default, the randomization is not enabled even if SHUFFLE\_PAGE\_ALLOCATOR=y.
The randomization may be force enabled with the `page\_alloc.shuffle' kernel command line parameter.\\
Say Y if unsure.}
%13.5 %13.5
\subsection{Disable heap randomization} \subsection{Disable heap randomization}
@@ -277,6 +326,10 @@ Binärdateien (einschließlich aller libc5-basierten) kaputt. Diese Option ände
Booten auf Heap-Randomisierung deaktiviert und kann zur Laufzeit überschrieben werden, indem 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) /proc/sys/kernel/randomize\_va\_space auf 2 gesetzt wird. Auf nicht-alten Distributionen (nach 2000)
ist N normalerweise eine sichere Wahl. ist N normalerweise eine sichere Wahl.
\english{Randomizing heap placement makes heap exploits harder, but it also breaks ancient binaries (including anything libc5 based).
This option changes the bootup default to heap randomization disabled, and can be overridden at runtime by setting
\texttt{/proc/sys/kernel/randomize\_va\_space} to 2.\\
On non-ancient distros (post-2000 ones) N is usually a safe choice.}
%13.6 %13.6
\subsection{Sparse Memory virtual memmap} \subsection{Sparse Memory virtual memmap}
@@ -284,11 +337,14 @@ CONFIG\_SPARSEMEM\_VMEMMAP [=y] \textbf{[Y]}\\
SPARSEMEM\_VMEMMAP verwendet eine virtuell gemappte Memmap, um texttt{pfn\_to\_page} und\\ SPARSEMEM\_VMEMMAP verwendet eine virtuell gemappte Memmap, um texttt{pfn\_to\_page} und\\
\texttt{page\_to\_pfn} Operationen zu optimieren. \texttt{page\_to\_pfn} Operationen zu optimieren.
Dies ist die effizienteste Option, wenn genügend Kernel-Res\-sour\-cen verfügbar sind. Dies ist die effizienteste Option, wenn genügend Kernel-Res\-sour\-cen verfügbar sind.
\english{SPARSEMEM\_VMEMMAP uses a virtually mapped memmap to optimise pfn\_to\_page and page\_to\_pfn operations.
This is the most efficient option when sufficient kernel resources are available.}
%13.7 %13.7
\subsection{Memory hotplug \texorpdfstring{$\rightarrow$}{->}} \subsection{Memory hotplug \texorpdfstring{$\rightarrow$}{->}}
CONFIG\_HOTPLUG [=y] \textbf{[Y]}\\ CONFIG\_HOTPLUG [=y] \textbf{[Y]}\\
\textit{Für diese Option gibt es keine Hilfe.} \textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}
\subsubsection{Memory Hotplug Default Online Type () \texorpdfstring{$\rightarrow$}{->}} \subsubsection{Memory Hotplug Default Online Type () \texorpdfstring{$\rightarrow$}{->}}
Standard-Speichertyp für Hotplug"=Speicher.\\ Standard-Speichertyp für Hotplug"=Speicher.\\