% linux_configuration_13_memory_management_options.tex
% since Linux 6.16

% 13.
\section{Memory Management options \texorpdfstring{$\rightarrow$}{->}}
(Speicherverwaltungsoptionen)

%13.1
\subsection{Support for paging of anonymous memory (swap) \texorpdfstring{$\rightarrow$}{->}}
CONFIG\_SWAP [=y] \textbf{[Y]}\\
Mit dieser Option können Sie wählen, ob Sie Unterstützung für so genannte Swap-Geräte oder Swap-Dateien in Ihrem Kernel haben möchten, die dazu dienen, mehr virtuellen Speicher als den tatsächlichen Arbeitsspeicher in Ihrem Computer bereitzustellen.
Wenn Sie unsicher sind, sagen Sie Y.
\english{This option allows you to choose whether you want to have support for so called swap devices or swap files in your kernel that are used to provide more virtual memory than the actual RAM present in your computer.
If unsure say Y.}

\subsubsection{Compressed cache for swap pages}
CONFIG\_ZSWAP [=y] \textbf{[Y]}\\
Ein leichtgewichtiger komprimierter Cache für Auslagerungsseiten.
Er nimmt Seiten, die gerade ausgelagert werden, und versucht, sie in einem dynamisch zugewiesenen RAM-basierten Speicherpool zu komprimieren.
Dies kann zu einer erheblichen E/A-Reduzierung auf dem Swap-Gerät führen und in dem Fall, in dem die Dekomprimierung aus dem RAM schneller ist als das Lesen aus dem Swap-Gerät, auch die Arbeitslastleistung verbessern.
\english{A lightweight compressed cache for swap pages.
It takes pages that are in the process of being swapped out and attempts to compress them into a dynamically allocated RAM-based memory pool.
This can result in a significant I/O reduction on swap device and, in the case where decompressing from RAM is faster than swap device reads, can also improve workload performance.}

\paragraph{Enable the compressed cache for swap pages by default}$~$\\
CONFIG\_ZSWAP\_DEFAULT\_ON [=y] \textbf{[Y]}\\
Wenn diese Option ausgewählt ist, wird der komprimierte Cache für Auslagerungsseiten beim Booten aktiviert, andernfalls wird er deaktiviert.
Die hier getroffene Auswahl kann mit der Kernel-Kommandozeilenoption \texttt{zswap.enabled=} überschrieben werden.
\english{If selected, the compressed cache for swap pages will be enabled at boot, otherwise it will be disabled.
The selection made here can be overridden by using the kernel command line `zswap.enabled=' option.}

%\paragraph{Invalidate zswap entries when pages are loaded}$~$\\
%CONFIG\_ZSWAP\_EXCLUSIVE\_LOADS\_DEFAULT\_ON [=n] \textbf{[N]}\\
%Wenn diese Option ausgewählt ist, werden exklusive Lasten für zswap beim Booten aktiviert, andernfalls wird
%sie deaktiviert. Wenn exklusive Ladungen aktiviert sind, wird beim Laden einer Seite aus zswap der
%zswap-Eintrag sofort ungültig gemacht, anstatt ihn in zswap zu belassen, bis der Swap-Eintrag freigegeben
%wird. Dadurch wird vermieden, dass sich zwei Kopien derselben Seite im Speicher befinden (komprimiert und
%unkomprimiert), nachdem eine Seite aus zswap geladen wurde. Der Preis dafür ist, dass die Seite neu
%komprimiert wird, wenn sie nie verschmutzt wurde und erneut ausgelagert werden muss.

\paragraph{Shrink the zswap pool on memory pressure}\mbox{}\\
CONFIG\_ZSWAP\_SHRINKER\_DEFAULT\_ON [=y] \textbf{[Y]}\\*
Wenn diese Option ausgewählt ist, wird der zswap-Shrinker aktiviert, und die im zswap-Pool gespeicherten Seiten werden bei Speicherdruck für die Rückforderung verfügbar (d.\,h. sie werden auf das rückwärtige Swap-Gerät zurückgeschrieben).
Dies bedeutet, dass das Zurückschreiben von Seiten in den zswap-Pool auch dann erfolgen kann, wenn der Pool noch nicht voll ist oder das cgroup zswap-Limit noch nicht erreicht wurde, wodurch die Wahrscheinlichkeit verringert wird, dass kalte Seiten im zswap-Pool verbleiben und unbegrenzt Speicher verbrauchen.
\english{If selected, the zswap shrinker will be enabled, and the pages stored in the zswap pool will become available for reclaim (i.e written back to the backing swap device) on memory pressure.\\
This means that zswap writeback could happen even if the pool is not yet full, or the cgroup zswap limit has not been reached, reducing the chance that cold pages will reside in the zswap pool and consume memory indefinitely.}

\paragraph{Default compressor () \texorpdfstring{$\rightarrow$}{->}}\mbox{}\\
Wählt den Standardkomprimierungsalgorithmus für den komprimierten Cache für Auslagerungsseiten aus.
Einen Überblick darüber, welche Leistung von einem bestimmten Kompressionsalgorithmus erwartet werden kann, finden Sie in den Benchmarks auf der folgenden LWN-Seite: \url{https://lwn.net/Articles/751795/}\\
Im Zweifelsfall wählen Sie \texttt{LZO}.
Die hier getroffene Auswahl kann durch Verwendung der Kernel"=Befehlszeilenoption \texttt{zswap.compressor=} überschrieben werden.
\english{Selects the default compression algorithm for the compressed cache for swap pages.\\
For an overview what kind of performance can be expected from a particular compression algorithm please refer to the benchmarks available at the following LWN page:\\
\url{https://lwn.net/Articles/751795/}\\
If in doubt, select `LZO'.\\
The selection made here can be overridden by using the kernel command line `zswap.compressor=' option.}

\subparagraph{Deflate}$~$\\
CONFIG\_ZSWAP\_COMPRESSOR\_DEFAULT\_DEFLATE [=n] \textbf{[N]}\\
Verwenden Sie den Deflate-Algorithmus als Standard-Komprimierungsalgorithmus.
\english{Use the Deflate algorithm as the default compression algorithm.}

\subparagraph{LZO}$~$\\
CONFIG\_ZSWAP\_COMPRESSOR\_DEFAULT\_LZO [=n] \textbf{[N]}\\
Verwenden Sie den LZO-Algorithmus als Standard-Komprimierungsalgorithmus.
\english{Use the LZO algorithm as the default compression algorithm.}

\subparagraph{842}$~$\\
CONFIG\_ZSWAP\_COMPRESSOR\_DEFAULT\_842 [=n] \textbf{[N]}\\
Verwenden Sie den 842-Algorithmus als Standard-Komprimierungsalgorithmus.
\english{Use the 842 algorithm as the default compression algorithm.}

\subparagraph{LZ4}$~$\\
CONFIG\_ZSWAP\_COMPRESSOR\_DEFAULT\_LZ4 [=n] \textbf{[N]}\\
Verwenden Sie den LZ4-Algorithmus als Standard-Komprimierungsalgorithmus.
\english{Use the LZ4 algorithm as the default compression algorithm.}

\subparagraph{LZ4HC}$~$\\
CONFIG\_ZSWAP\_COMPRESSOR\_DEFAULT\_LZ4HC [=n] \textbf{[N]}\\
Verwenden Sie den LZ4HC-Algorithmus als Standard-Komprimierungsalgorithmus.
\english{Use the LZ4HC algorithm as the default compression algorithm.}

\subparagraph{zstd}$~$\\
CONFIG\_ZSWAP\_COMPRESSOR\_DEFAULT\_ZSTD [=y] \textbf{[Y]}\\
Verwenden Sie den zstd-Algorithmus als Standard-Komprimierungsalgorithmus.
\english{Use the zstd algorithm as the default compression algorithm.}

\paragraph{Default allocator () \texorpdfstring{$\rightarrow$}{->}}$~$\\
Wählt den Standardzuweiser für den komprimierten Cache für Auslagerungsseiten aus.
Die Voreinstellung ist aus Kompatibilitätsgründen \glqq zbud\grqq{}, aber lesen Sie bitte die Beschreibung der einzelnen Zuweiser unten, bevor Sie die richtige Wahl treffen.
Die hier getroffene Auswahl kann mit der Kernel"=Kommandozeilenoption \texttt{zswap.zpool=} überschrieben werden.
\english{Selects the default allocator for the compressed cache for swap pages.
The default is `zbud' for compatibility, however please do read the description of each of the allocators below before making a right choice.\\
The selection made here can be overridden by using the kernel command line `zswap.zpool=' option.}

{\color{gray}
\subparagraph*{zbud \tiny{bis 6.14}}$~$\\
CONFIG\_ZSWAP\_ZPOOL\_DEFAULT\_ZBUD [=n] \textbf{[N]}\\
Verwendung des zbud-Allokators als Standard-Allokator.
\english{Use the zbud allocator as the default allocator.}
}

{\color{gray}
\subparagraph*{z3foldi (DEPRECATED) \tiny{seit 6.12 bis 6.14}}$~$\\
CONFIG\_ZSWAP\_ZPOOL\_DEFAULT\_Z3FOLD\_DEPRECATED [=n] \textbf{[N]}\\
Verwenden Sie den z3fold-Allokator als Standard-Allokator. Veraltet und soll in ein paar Zyklen entfernt werden, siehe CONFIG\_Z3FOLD\_DEPRECATED.
\english{Use the z3fold allocator as the default allocator.\\
Deprecated and scheduled for removal in a few cycles, see CONFIG\_Z3FOLD\_DEPRECATED.}
}

\subparagraph{zsmalloc}$~$\\
CONFIG\_ZSWAP\_ZPOOL\_DEFAULT\_ZSMALLOC [=y] \textbf{[Y]}\\
Verwendung des zsmalloc-Allokators als Standard-Allokator.
\english{Use the zsmalloc allocator as the default allocator.}

{\color{gray}
\paragraph*{2:1 compression allocator (zbud) \tiny{bis 6.14}}$~$\\
CONFIG\_ZBUD [=m] \textbf{[M]}\\
Ein spezieller Allokator für die Speicherung komprimierter Seiten.
Er ist für die Speicherung von bis zu zwei komprimierten Seiten pro physischer Seite ausgelegt.
Dieses Design schränkt zwar die Speicherdichte ein, hat aber einfache und deterministische Rückgewinnungseigenschaften, die es einem Ansatz mit höherer Dichte vorziehen, wenn die Rückgewinnung verwendet wird.
\english{A special purpose allocator for storing compressed pages.
It is designed to store up to two compressed pages per physical page.
While this design limits storage density, it has simple and deterministic reclaim properties that make it preferable to a higher density approach when reclaim will be used.}
}

{\color{gray}
\paragraph*{3:1 compression allocator (z3fold) DEPRECATED \tiny{bis 6.14}}$~$\\
CONFIG\_Z3FOLD [=n] \textbf{[N]}\\
Veraltet und soll in ein paar Zyklen entfernt werden.
Wenn Sie einen guten Grund für die Verwendung von Z3FOLD anstelle von ZSMALLOC haben, wenden Sie sich bitte an linux-mm@kvack.org und die zswap-Maintainer.
Ein spezieller Allokator für die Speicherung komprimierter Seiten.
Er ist für die Speicherung von bis zu drei komprimierten Seiten pro physischer Seite ausgelegt.
Es handelt sich um ein ZBUD-Derivat, so dass die Einfachheit und der Determinismus weiterhin gegeben sind.
\english{Deprecated and scheduled for removal in a few cycles.
If you have a good reason for using Z3FOLD over ZSMALLOC, please contact linux-mm@kvack.org and the zswap maintainers.\\
A special purpose allocator for storing compressed pages.
It is designed to store up to three compressed pages per physical page.
It is a ZBUD derivative so the simplicity and determinism are still there.}
}

%13.2
\subsection{N:1 compression allocator (zsmalloc) \texorpdfstring{$\rightarrow$}{->}}
CONFIG\_ZSMALLOC [=y] \textbf{[Y]}\\
zsmalloc ist ein Slab-basierter Speicherallokator, der für die effiziente Speicherung von Seiten verschiedener Komprimierungsstufen entwickelt wurde.
Er erreicht die höchste Speicherdichte mit der geringsten Fragmentierung.
\english{zsmalloc is a slab-based memory allocator designed to store pages of various compression levels efficiently.
It achieves the highest storage density with the least amount of fragmentation.}

\subsubsection{Export zsmalloc statistics}
CONFIG\_ZSMALLOC\_STAT \colorbox{yellow!80}{[=y] \textbf{[N]}}\\
Diese Option ermöglicht es dem Code in zsmalloc, verschiedene Statistiken über die Vorgänge in zsmalloc zu sammeln und diese Informationen über debugfs in den Userspace zu exportieren.
Wenn Sie unsicher sind, sagen Sie N.
\english{This option enables code in the zsmalloc to collect various statistics about what's happening in zsmalloc and exports that information to userspace via debugfs.
If unsure, say N.}
\note{Wir schalten hier Statistiken aus, deshalb N.}

\subsubsection{Maximum number of physical pages per-zspage}%$~$\\
CONFIG\_ZSMALLOC\_CHAIN\_SIZE [=8] \textbf{[8]}\\*
Diese Option legt die Obergrenze für die Anzahl der physischen Seiten fest, aus denen eine zmalloc-Seite (zspage) bestehen kann.
Die optimale zspage-Kettengröße wird für jede Größenklasse während der Initialisierung des Pools berechnet.\\
Eine Änderung dieser Option kann die Eigenschaften der Größenklassen verändern, z.\,B. die Anzahl der Seiten pro zspage und die Anzahl der Objekte pro zspage.
Dies kann auch zu unterschiedlichen Konfigurationen des Pools führen, da zsmalloc Größenklassen mit ähnlichen Eigenschaften zusammenführt.\\
Weitere Informationen finden Sie in der Dokumentation zu zsmalloc.
\english{This option sets the upper limit on the number of physical pages that a zmalloc page (zspage) can consist of.
The optimal zspage chain size is calculated for each size class during the initialization of the pool.\\
Changing this option can alter the characteristics of size classes, such as the number of pages per zspage and the number of objects per zspage.
This can also result in different configurations of the pool, as zsmalloc merges size classes with similar characteristics.\\
For more information, see zsmalloc documentation.}

%13.3
\subsection{Slab allocator options \texorpdfstring{$\rightarrow$}{->}}
Dies 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{Configure for minimal memory footprint \tiny{seit 6.2}}
CONFIG\_SLUB\_TINY [=n] \textbf{[N]}\\*
Konfiguriert den Slab-Allokator so, dass ein minimaler Speicherbedarf erreicht wird, was zu Lasten der Skalierbarkeit, der Fehlersuche und anderer Funktionen geht.
Dies ist nur für das kleinste System gedacht, das die SLOB-Zuweisung verwendet hat, und wird für Systeme mit mehr als \qty{16}{\mega\byte} RAM nicht empfohlen.
Wenn Sie unsicher sind, sagen Sie N.
\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}
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.
\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}
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.
\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}
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.
{\color{gray}Einige Slab-Implementierungen haben mehr Sanity-Checking als andere.
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{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]}\\
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}
\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{Enable per cpu partial caches}
CONFIG\_SLUB\_CPU\_PARTIAL [=y] \textbf{[Y]}\\
Prozessor-spezifische Teil-Caches beschleunigen die Zuweisung und Freigabe von Objekten, die lokal auf einen Prozessor beschränkt sind, allerdings auf Kosten einer höheren Unbestimmtheit hinsichtlich der Latenz der Freigabe.
Bei einem Überlauf werden diese Caches gelöscht, was das Setzen von Sperren erfordert, was zu Latenzspitzen führen kann.
In der Regel würde man sich bei einem Echtzeitsystem gegen diese Option entscheiden.
\english{Per cpu partial caches accelerate objects allocation and freeing that is local to a processor at the price of more indeterminism in the latency of the free.
On overflow these caches will be cleared which requires the taking of locks that may cause latency spikes.
Typically one would choose no for a realtime system.}

\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-Zuweisung erstellt und kmalloc veranlasst, basierend auf der Codeadresse zufällig eine auszuwählen, wodurch es für Angreifer schwieriger wird, anfällige Speicherobjekte auf dem Heap zu verteilen, um Speicherlücken 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.
\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
\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.
\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
\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 \texttt{/proc/sys/kernel/randomize\_va\_space} auf 2 gesetzt wird.
Auf nicht-alten Distributionen (nach 2000) 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
\subsection{Sparse Memory virtual memmap}
CONFIG\_SPARSEMEM\_VMEMMAP [=y] \textbf{[Y]}\\
\texttt{SPARSEMEM\_VMEMMAP} verwendet eine virtuell zugeordnete memmap, um die Operationen \texttt{pfn\_to\_page} und \texttt{page\_to\_pfn} zu optimieren.
Dies ist die effizienteste Option, wenn genügend Kernel"=Ressourcen 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
\subsection{Memory hotplug \texorpdfstring{$\rightarrow$}{->}}
CONFIG\_HOTPLUG [=y] \textbf{[Y]}\\
\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$}{->}}
Standard-Speichertyp für Hotplug"=Speicher.\\
Diese Option legt die Standardrichtlinieneinstellung für die Hotplug-Onlining-Richtlinie für Speicher
(/sys/devices/system/memory/auto\_online\_blocks) fest, die bestimmt, was mit neu hinzugefügten Speicherbereichen geschieht.
Die Einstellung der Richtlinie kann jederzeit zur Laufzeit geändert werden.\\[0.5em]
Die Voreinstellung ist \texttt{offline}.\\[0.5em]
Wählen Sie \texttt{offline}, um das Onlining auf Treiber und Benutzerrichtlinien zu verschieben.\\
Wählen Sie \texttt{auto}, um den Kernel entscheiden zu lassen, welche Zonen verwendet werden sollen.\\
Wählen Sie \texttt{online\_kernel}, um die Nutzung dieses Speichers durch den Kernel generell zu erlauben.\\
Wählen Sie \texttt{online\_movable}, um die Verwendung dieses Speichers durch den Kernel generell zu verbieten.\\[0.5em]
Ein Beispiel für die Verwendung durch den Kernel wären Seitenstrukturen und Seitentabellen.
Weitere Informationen finden Sie unter \texttt{Documentation/admin-guide/mm/memory-hotplug.rst}.
\english{Default memory type for hotplugged memory.\\
This option sets the default policy setting for memory hotplug onlining policy\\
(/sys/devices/system/memory/auto\_online\_blocks) which determines what happens to newly added memory regions.
Policy setting can always be changed at runtime.\\[0.5em]
The default is `offline'.\\[0.5em]
Select offline to defer onlining to drivers and user policy.\\
Select auto to let the kernel choose what zones to utilize.\\
Select online\_kernel to generally allow kernel usage of this memory.\\
Select online\_movable to generally disallow kernel usage of this memory.\\[0.5em]
Example kernel usage would be page structs and page tables\\
See Documentation/admin-guide/mm/memory-hotplug.rst for more information.}

\paragraph{offline}\mbox{}\\
CONFIG\_MHP\_DEFAULT\_ONLINE\_TYPE\_OFFLINE [=n] \textbf{[N]}\\
Hotplug-Speicher wird standardmäßig nicht eingeschaltet.
Wählen Sie diese Option für Systeme mit Treibern und Benutzerrichtlinien, die das Einbinden des Hotplug-Speichers regeln.
\english{Hotplugged memory will not be onlined by default.
Choose this for systems with drivers and user policy that handle onlining of hotplug memory policy.}

\paragraph{auto}\mbox{}\\
CONFIG\_MHP\_DEFAULT\_ONLINE\_TYPE\_ONLINE\_AUTO [=y] \textbf{[Y]}\\
Wählen Sie diese Option, wenn Sie möchten, dass der Kernel automatisch Hotplug-Speicher in die Zone online stellt, die er für sinnvoll hält.
Dieser Speicher kann für Kernel-Daten verwendet werden.
\english{Select this if you want the kernel to automatically online hotplugged memory into the zone it thinks is reasonable.
This memory may be utilized for kernel data.}

\paragraph{kernel}\mbox{}\\
CONFIG\_MHP\_DEFAULT\_ONLINE\_TYPE\_ONLINE\_KERNEL [=n] \textbf{[N]}\\
Wählen Sie diese Option, wenn Sie möchten, dass der Kernel automatisch Hotplugged-Speicher in eine Zone online stellt, die für Kernel-Daten verwendet werden kann.
Dies bedeutet normalerweise ZONE\_NORMAL.
\english{Select this if you want the kernel to automatically online hotplugged memory into a zone capable of being used for kernel data.
This typically means ZONE\_NORMAL.}

\paragraph{movable}\mbox{}\\
CONFIG\_MHP\_DEFAULT\_ONLINE\_TYPE\_ONLINE\_MOVABLE [=n] \textbf{[N]}\\
Wählen Sie diese Option, wenn Sie möchten, dass der Kernel den Speicher automatisch online in \texttt{ZONE\_MOVABLE} einbindet.
Dieser Speicher wird in der Regel nicht für Kernel-Daten verwendet.
Diese Option sollte nur verwendet werden, wenn der Administrator weiß, dass genügend \texttt{ZONE\_NORMAL}"=Speicher verfügbar ist, um den Hotplug-Speicher zu beschreiben, da sonst der Hotplug-Speicher möglicherweise nicht online geschaltet werden kann.
Beispielsweise muss ausreichend kernel-fähiger Speicher (\texttt{ZONE\_NORMAL}) verfügbar sein, um Seitenstrukturen zur Beschreibung von \texttt{ZONE\_MOVABLE} zuzuweisen.
\english{Select this if you want the kernel to automatically online hotplug memory into ZONE\_MOVABLE.
This memory will generally not be utilized for kernel data.
This should only be used when the admin knows sufficient ZONE\_NORMAL memory is available to describe hotplug memory, otherwise hotplug memory may fail to online.
For example, sufficient kernel-capable memory (ZONE\_NORMAL) must be available to allocate page structs to describe ZONE\_MOVABLE.}

\subsubsection{Allow for memory hot remove}
CONFIG\_MEMORY\_HOTREMOVE [=y] \textbf{[Y]}\\
Für diese Option ist keine Hilfe verfügbar.
\english{There is no help available for this option.}

%13.8
\subsection{Allow for balloon memory compaction/migration}
CONFIG\_BALLOON\_COMPACTION [=y] \textbf{[Y]}\\
Die durch Ballooning verursachte Speicherfragmentierung kann die Anzahl der zusammenhängenden 2-MB-Speicherblöcke, die innerhalb eines Gastsystems verwendet werden können, erheblich reduzieren, was zu Leistungseinbußen aufgrund der geringeren Anzahl transparenter großer Seiten führt, die vom Gastsystem verwendet werden können.
Durch die Komprimierung und Migration von Speicherseiten, die als Teil von Speicher-Ballon-Geräten registriert sind, wird das oben genannte Szenario vermieden und die Speicherdefragmentierung verbessert.
\english{Memory fragmentation introduced by ballooning might reduce significantly the number of 2MB contiguous memory blocks that can be used within a guest, thus imposing performance penalties associated with the reduced number of transparent huge pages that could be used by the guest workload.
Allowing the compaction \& migration for memory pages enlisted as being part of memory balloon devices avoids the scenario aforementioned and helps improving memory defragmentation.}

%13.9
\subsection{Allow for memory compaction}
CONFIG\_COMPACTION [=y] \textbf{[Y]}\\
Die Komprimierung ist die einzige Komponente der Speicherverwaltung, die zuverlässig Speicherblöcke höherer Ordnung (größere, physisch zusammenhängende Blöcke) bildet.
Der Seitenzuordner ist stark auf die Komprimierung angewiesen, und das Fehlen dieser Funktion kann zu unerwarteten OOM-Killer-Aufrufen für Speicheranforderungen höherer Ordnung 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.
\english{Compaction is the only memory management component to form high order (larger physically contiguous) memory blocks reliably.
The page allocator relies on compaction heavily and the lack of the feature can lead to unexpected OOM killer invocations for high order memory requests.
You shouldn't disable this option unless there really is a strong reason for it and then we would be really interested to hear about that at linux-mm@kvack.org.}

%13.10
\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.
\english{Free page reporting allows for the incremental acquisition of free pages from the buddy allocator for the purpose of reporting those pages to another entity, such as a hypervisor, so that the memory can be freed within the host for other uses.}

%13.11
\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.
\english{Allows the migration of the physical location of pages of processes while the virtual addresses are not changed.
This is useful in two situations.
The first is on NUMA systems to put pages nearer to the processors accessing.
The second is when allocating huge pages as migration can relocate pages to satisfy a huge page allocation instead of reclaiming.}

%13.12
\subsection{Maximum scale factor of PCP (Per-CPU pageset) batch allocate/free \tiny{seit 6.7}}
CONFIG\_PCP\_BATCH\_SCALE\_MAX [=5] \textbf{[5]}\\*
Bei der Seitenzuweisung wird der PCP (Per-CPU pageset) in Chargen aufgefüllt und entleert.
Die Anzahl der Stapel wird automatisch skaliert, um den Durchsatz bei der Seitenzuweisung/Freigabe zu verbessern.
Ein zu großer Skalierungsfaktor kann jedoch die Latenz beeinträchtigen.
Mit dieser Option wird die Obergrenze des Skalierungsfaktors festgelegt, um die maximale Latenz zu begrenzen.
\english{In page allocator, PCP (Per-CPU pageset) is refilled and drained in batches.
The batch number is scaled automatically to improve page allocation/free throughput.
But too large scale factor may hurt latency.
This option sets the upper limit of scale factor to limit the maximum latency.}

%13.13
\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).
\english{Enable Kernel Samepage Merging: KSM periodically scans those areas of an application's address space that an app has advised may be mergeable.
When it finds pages of identical content, it replaces the many instances by a single page with that content, so saving memory until one or another app needs to modify the content.
Recommended for use with KVM, or with other duplicative applications.
See Documentation/mm/ksm.rst for more information: KSM is inactive until a program has madvised that an area is MADV\_MERGEABLE, and root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG\_SYSFS is set).}

%13.14
\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 \num{65536} angemessen und sollte keine Probleme verursachen.
Auf Arm und anderen Architekturen sollte er nicht höher als \num{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 \texttt{/proc/sys/vm/mmap\_min\_addr} geändert werden.
\english{This is the portion of low virtual memory which should be protected from userspace allocation.
Keeping a user from writing to low pages can help reduce the impact of kernel NULL pointer bugs.\\
For most arm64, ppc64 and x86 users with lots of address space a value of 65536 is reasonable and should cause no problems.
On arm and other archs it should not be higher than 32768.
Programs which use vm86 functionality or have some need to map this low address space will need CAP\_SYS\_RAWIO or disable this protection by setting the value to 0.\\
This value can be changed after boot using the /proc/sys/vm/mmap\_min\_addr tunable.}

%13.15
\subsection{Enable recovery from hardware memory errors}
CONFIG\_MEMORY\_FAILURE \colorbox{yellow!80}{[=y] \textbf{[N]}}\\
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.
\english{Enables code to recover from some memory failures on systems with MCA recovery.
This allows a system to continue running even when some of its memory has uncorrected errors.
This requires special hardware support and typically ECC memory.}
\note{Typischerweise haben wir bei uns keine ECC-Speicherbausteine, deshalb N.}

\subsubsection{HWPoison pages injector}
CONFIG\_HWPOISON\_INJECT [=m] \textbf{[M]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}

\subsection{Transparent Hugepage Support \texorpdfstring{$\rightarrow$}{->}}
CONFIG\_TRANSPARENT\_HUGEPAGE [=y] \textbf{[Y]}\\
Transparent Hugepage 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.
\english{Transparent Hugepages allows the kernel to use huge pages and huge tlb transparently to the applications whenever possible.
This feature can improve computing performance to certain applications by speeding up page faults during memory allocation, by reducing the number of tlb misses and by speeding up the pagetable walking.\\
If memory constrained on embedded, you may want to say N.}

\subsubsection{Transparent Hugepage Support sysfs defaults () \texorpdfstring{$\rightarrow$}{->}}
Wählt die sysfs-Vorgaben für die transparente Hugepage-Unterstützung aus.
\english{Selects the sysfs defaults for Transparent Hugepage Support.}

\paragraph{always}$~$\\
CONFIG\_TRANSPARENT\_HUGEPAGE\_ALWAYS [=y] \textbf{[Y]}\\
Die ständige Aktivierung von Transparent Hugepage kann den Speicherbedarf von Anwendungen erhöhen, ohne dass dies einen garantierten Nutzen hat, aber es funktioniert automatisch für alle Anwendungen.
\english{Enabling Transparent Hugepage always, can increase the memory footprint of applications without a guaranteed benefit but it will work automatically for all applications.}

\paragraph{madvise}$~$\\
CONFIG\_TRANSPARENT\_HUGEPAGE\_MADVISE [=n] \textbf{[N]}\\
Die Aktivierung von Transparent Hugepage madvise bringt nur eine Leistungsverbesserung für die Anwendungen, die madvise(MADV\_HUGEPAGE) verwenden, aber es besteht nicht die Gefahr, dass der Speicherbedarf von Anwendungen ohne garantierten Nutzen erhöht wird.
\english{Enabling Transparent Hugepage madvise, will only provide a performance improvement benefit to the applications using madvise(MADV\_HUGEPAGE) but it won't risk to increase the memory footprint of applications without a guaranteed benefit.}

\subsubsection{Read-only THP for filesystems (EXPERIMENTAL) \tiny{seit 5.4}}
CONFIG\_READ\_ONLY\_THP\_FOR\_FS [=y] \textbf{[Y]}\\
Erlaubt khugepaged, schreibgeschützte Seiten in THP zu speichern.
Dies ist als experimentell gekennzeichnet, da es sich um eine neue Funktion handelt.
Schreibunterstützung für Datei-THPs wird in den nächsten Release-Zyklen entwickelt werden.
\english{Allow khugepaged to put read-only file-backed pages in THP.\\
This is marked experimental because it is a new feature.
Write support of file THPs will be developed in the next few release cycles.}

\subsubsection{No per-page mapcount (EXPERIMENTAL) \tiny{seit 6.15}}
CONFIG\_NO\_PAGE\_MAPCOUNT [=n] \textbf{[N]}\\*
Verwenden Sie keine Seiten-Zuordnungsanzahlen (per-page mapcounts) für Seiten, die Teil größerer Zuweisungen sind, wie z.\,B. transparente riesige Seiten.
Wenn diese Konfigurationsoption aktiviert ist, verwenden einige Schnittstellen, die sich auf diese Informationen stützen, stattdessen weniger genaue Informationen pro Zuweisung:
Beispielsweise wird in einer so großen Zuweisung die durchschnittliche Seiten-Zuordnungsanzahl anstelle der Seiten-Zuordnungsanzahl verwendet.
EXPERIMENTELL, da die Auswirkungen einiger Änderungen noch unklar sind.
\english{Do not maintain per-page mapcounts for pages part of larger allocations, such as transparent huge pages.
When this config option is enabled, some interfaces that relied on this information will rely on less-precise per-allocation information instead:
for example, using the average per-page mapcount in such a large allocation instead of the per-page mapcount.
EXPERIMENTAL because the impact of some changes is still unclear.}
\note{Derzeit (2025) wird davon abgeraten, diese Option zu aktivieren, da zwar eine Leistungssteigerung zu erwarten ist, jedoch die Stabilität und Zuverlässigkeit der Speicherverwaltung beeinträchtigt werden können.}

\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.
\english{This enables the Contiguous Memory Allocator which allows other subsystems to allocate big physically-contiguous blocks of memory.
CMA reserves a region of memory and allows only movable pages to be allocated from it.
This way, the kernel can use the memory for pagecache and when a subsystem requests for contiguous area, the allocated pages are migrated away to serve the contiguous request.\\
If unsure, say ``n''.}

{\color{gray}
\subsubsection*{CMA debug messages (DEVELOPMENT) \tiny{bis 6.8}}
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.
\english{Turns on debug messages in CMA.
This produces KERN\_DEBUG messages for every CMA call as well as various messages while processing calls such as dma\_alloc\_from\_contiguous().
This option does not affect warning and error messages.}}

\subsubsection{CMA debugfs interface}
CONFIG\_CMA\_DEBUGFS [=y] \textbf{[Y]}\\
Schaltet die DebugFS-Schnittstelle für CMA ein.
\english{Turns on the DebugFS interface for CMA.}

\subsubsection{CMA information through sysfs interface}
CONFIG\_CMA\_SYSFS [=y] \textbf{[Y]}\\
Diese Option legt einige sysfs-Attribute offen, um Informationen von CMA zu erhalten.
\english{This option exposes some sysfs attributes to get information from CMA.}

\subsubsection{Maximum count of the CMA areas}
CONFIG\_CMA\_AREAS \colorbox{yellow!80}{[=7] \textbf{[8]}}\\
CMA ermöglicht es, CMA-Bereiche für bestimmte Zwecke zu erstellen, die hauptsächlich als privater Bereich des Geräts verwendet werden.
Mit diesem Parameter wird die maximale Anzahl von CMA-Bereichen im System festgelegt.
Wenn Sie unsicher sind, belassen Sie den Standardwert \glqq 8\grqq{} bei UMA und \glqq 20\grqq{} bei NUMA.
\english{CMA allows to create CMA areas for particular purpose, mainly, used as device private area.
This parameter sets the maximum number of CMA area in the system.\\
If unsure, leave the default value ``8'' in UMA and ``20'' in NUMA.}
\note{Set to default value of 8.}

%13.18
\subsection{Page Block Order \tiny{seit 6.16}}
CONFIG\_PAGE\_BLOCK\_ORDER [=10] \textbf{[10]}\\*
Die Seitenblockreihenfolge bezieht sich auf die Zweierpotenz der Anzahl physisch zusammenhängender Seiten, denen ein Migrationstyp zugeordnet werden kann.
Die maximale Größe der Seitenblockreihenfolge wird durch ARCH\_FORCE\_MAX\_ORDER begrenzt.
Diese Konfiguration ermöglicht es, die Standard-Seitenblockreihenfolge zu überschreiben, wenn die Seitenblockreihenfolge kleiner als ARCH\_FORCE\_MAX\_ORDER oder MAX\_PAGE\_ORDER sein muss.
Eine Verringerung der Seitenblockreihenfolge kann sich negativ auf die Erfolgsrate der THP-Generierung auswirken.
Wenn Ihre Workloads THP intensiv nutzen, verwenden Sie diese Option bitte mit Vorsicht.
Ändern Sie sie nicht, wenn Sie sich nicht sicher sind.
\english{The page block order refers to the power of two number of pages that are physically contiguous and can have a migrate type associated to them.
The maximum size of the page block order is limited by ARCH\_FORCE\_MAX\_ORDER.
This config allows overriding the default page block order when the page block order is required to be smaller than ARCH\_FORCE\_MAX\_ORDER or MAX\_PAGE\_ORDER.
Reducing pageblock order can negatively impact THP generation success rate.
If your workloads uses THP heavily, please use this option with caution.
Don't change if unsure.}

%13.19
\subsection{Track memory changes}
CONFIG\_MEM\_SOFT\_DIRTY [=y] \textbf{[Y]}\\
Diese Option ermöglicht die Verfolgung von Speicheränderungen durch Einführung eines Soft-Dirty-Bits auf pte-s.
Dieses Bit wird gesetzt, wenn jemand in eine Seite schreibt, genau wie das reguläre Dirty Bit, aber im Gegensatz zu letzterem kann es von Hand gelöscht werden.
Siehe Documentation/admin-guide/mm/soft-dirty.rst für weitere Details.
\english{This option enables memory changes tracking by introducing a soft-dirty bit on pte-s.
This bit it set when someone writes into a page just as regular dirty bit, but unlike the latter it can be cleared by hands.\\
See Documentation/admin-guide/mm/soft-dirty.rst for more details.}

%13.20
\subsection{Defer initialisation of struct pages to kthreads}
CONFIG\_DEFERRED\_STRUCT\_PAGE\_INIT [=n] \textbf{[N]}\\
Normalerweise werden alle Strukturseiten beim Frühstart in einem einzigen Thread initialisiert.
Auf sehr großen Rechnern kann dies sehr viel Zeit in Anspruch nehmen.
Wenn diese Option gesetzt ist, wird bei großen Maschinen eine Teilmenge der memmap beim Booten aufgerufen und der Rest parallel initialisiert.
Dies kann sich auf die Leistung von Aufgaben auswirken, die zu Beginn der Lebensdauer des Systems ausgeführt werden, bis diese kthreads die Initialisierung abgeschlossen haben.
\english{Ordinarily all struct pages are initialised during early boot in a single thread.
On very large machines this can take a considerable amount of time.
If this option is set, large machines will bring up a subset of memmap at boot and then initialise the rest in parallel.
This has a potential performance impact on tasks running early in the lifetime of the system until these kthreads finish the initialisation.}

%13.21
\subsection{Enable idle page tracking}
CONFIG\_IDLE\_PAGE\_TRACKING [=y] \textbf{[Y]}\\
Diese Funktion ermöglicht es, die Anzahl der Benutzerseiten zu schätzen, die in einem bestimmten Zeitraum nicht berührt wurden.
Diese Information kann nützlich sein, um die Grenzen der Speichergruppen und/oder die Platzierung von Aufträgen innerhalb eines Rechenclusters zu optimieren.\\
Siehe Documentation/admin-guide/mm/idle\_page\_tracking.rst für weitere Einzelheiten.
\english{This feature allows to estimate the amount of user pages that have not been touched during a given period of time.
This information can be useful to tune memory cgroup limits and/or for job placement within a compute cluster.\\
See Documentation/admin-guide/mm/idle\_page\_tracking.rst for more details.}

%13.22
\subsection{Support DMA zone}
CONFIG\_ZONE\_DMA [=y] \textbf{[Y]}\\*
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}

%13.23
\subsection{Support DMA32 zone}
CONFIG\_ZONE\_DMA32 [=y] \textbf{[Y]}\\*
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}

%13.24
\subsection{Device memory (pmem, HMM, etc\dots) hotplug support}
CONFIG\_ZONE\_DEVICE [=y] \textbf{[Y]}\\
Die Hotplug-Unterstützung für Gerätespeicher ermöglicht es, pmem oder andere vom Gerätetreiber entdeckte Speicherregionen in der Memmap zu etablieren.
Dies ermöglicht pfn\_to\_page()-Lookups von ansonsten \glqq gerätephysikalischen\grqq{} Adressen, was unter anderem für die Verwendung einer DAX-Zuordnung in einer O\_DIRECT-Operation erforderlich ist.
Wenn FS\_DAX aktiviert ist, dann sagen Sie Y.
\english{Device memory hotplug support allows for establishing pmem, or other device driver discovered memory regions, in the memmap.
This allows pfn\_to\_page() lookups of otherwise ``device-physical'' addresses which is needed for using a DAX mapping in an O\_DIRECT operation, among other things.\\
If FS\_DAX is enabled, then say Y.}

%13.25
\subsection{Unaddressable device memory (GPU memory, \dots)}
CONFIG\_DEVICE\_PRIVATE [=y] \textbf{[Y]}\\
Ermöglicht die Erstellung von Strukturseiten zur Darstellung von nicht adressierbarem Gerätespeicher, d.\,h. Speicher, auf den nur vom Gerät (oder einer Gruppe von Geräten) aus zugegriffen werden kann.
Wahrscheinlich sollten Sie auch HMM\_MIRROR auswählen.
\english{Allows creation of struct pages to represent unaddressable device memory; i.e., memory that is only accessible from the device (or group of devices).
You likely also want to select HMM\_MIRROR.}

%13.26
\subsection{Enable VM event counters for /proc/vmstat}
CONFIG\_VM\_EVENT\_COUNTERS [=y] \textbf{[Y]}\\
VM-Ereigniszähler werden für die Anzeige von Ereigniszählungen benötigt.
Diese Option ermöglicht die Deaktivierung der VM-Ereigniszähler auf EXPERT-Systemen.
/proc/vmstat zeigt die Seitenzahlen nur an, wenn die VM-Ereigniszähler deaktiviert sind.
\english{VM event counters are needed for event counts to be shown.
This option allows the disabling of the VM event counters on EXPERT systems.
/proc/vmstat will only show page counts if VM event counters are disabled.}

%13.27
\subsection{Collect percpu memory statistics}
CONFIG\_PERCPU\_STATS [=n] \textbf{[N]}\\
Diese Funktion sammelt Statistiken und stellt sie über debugfs zur Verfügung.
Die Informationen umfassen globale und pro Chunk-Statistiken, die dazu beitragen können, die Speichernutzung der CPU zu verstehen.
\english{This feature collects and exposes statistics via debugfs.
The information includes global and per chunk statistics, which can be used to help understand percpu memory usage.}

%13.28
\subsection{Enable infrastructure for get\_user\_pages()-related unit tests}
CONFIG\_GUP\_TEST [=n] \textbf{[N]}\\
Stellt \texttt{/sys/kernel/debug/gup\_test} zur Verfügung, das wiederum eine Möglichkeit bietet, ioctl-Aufrufe zu machen, die kernelbasierte Unit-Tests für die get\_user\_pages*()- und pin\_user\_pages*()-Familie von API-Aufrufen starten können.
Diese Tests umfassen Benchmark-Tests für die schnellen Varianten von get\_user\_pages*() und pin\_user\_pages*() sowie Smoke-Tests für die nicht schnellen Varianten.
Es gibt auch einen Untertest, der die Ausführung von dump\_page() auf bis zu acht Seiten (ausgewählt durch Befehlszeilen-Args) innerhalb des Bereichs der User-Space-Adressen ermöglicht.
Diese Seiten werden entweder über pin\_user\_pages*() oder über get\_user\_pages*() angeheftet, wie durch andere Befehlszeilenargumente angegeben.\\
Siehe \texttt{tools/testing/selftests/mm/gup\_test.c}
\english{Provides /sys/kernel/debug/gup\_test, which in turn provides a way to make ioctl calls that can launch kernel-based unit tests for the get\_user\_pages*() and pin\_user\_pages*() family of API calls.\\
These tests include benchmark testing of the \_fast variants of get\_user\_pages*() and pin\_user\_pages*(), as well as smoke tests of the non-\_fast variants.\\
There is also a sub-test that allows running dump\_page() on any of up to eight pages (selected by command line args) within the range of user-space addresses.
These pages are either pinned via pin\_user\_pages*(), or pinned via get\_user\_pages*(), as specified by other command line arguments.\\
See tools/testing/selftests/mm/gup\_test.c}

%13.29
\subsection{Enable a module to run time tests on dma\_pool}
CONFIG\_DMAPOOL\_TEST [=n] \textbf{[N]}\\
Stellt ein Testmodul zur Verfügung, das viele Blöcke unterschiedlicher Größe alloziert und freigibt und berichtet, wie lange es dauert.
Damit soll ein konsistenter Weg gefunden werden, um zu messen, wie sich Änderungen an den dma\_pool\_alloc/free-Routinen auf die Leistung auswirken.
\english{Provides a test module that will allocate and free many blocks of various sizes and report how long it takes.
This is intended to provide a consistent way to measure how changes to the dma\_pool\_alloc/free routines affect performance.}

%13.30
\subsection{Enable memfd\_create() system call}
CONFIG\_MEMFD\_CREATE [=y] \textbf{[Y]}\\*
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}

%13.31
\subsection{Enable memfd\_secret() system call}
CONFIG\_SECRETMEM [=y] \textbf{[Y]}\\*
Aktivieren Sie den Systemaufruf memfd\_secret() mit der Möglichkeit, Speicherbereiche zu erstellen, die nur im Kontext des besitzenden Prozesses sichtbar sind und nicht auf andere Prozesse und andere Kernel-Seitentabellen abgebildet werden.
\english{Enable the memfd\_secret() system call with the ability to create memory areas visible only in the context of the owning process and not mapped to other processes and other kernel page tables.}

%13.32
\subsection{Anonymous VMS name support}
CONFIG\_ANON\_VMA\_NAME [=y] \textbf{[Y]}\\
Erlaubt die Benennung anonymer virtueller Speicherbereiche. Mit dieser Funktion können virtuellen Speicherbereichen Namen zugewiesen werden.\\
Die zugewiesenen Namen können später aus \texttt{/proc/pid/maps} und \texttt{/proc/pid/smaps} abgerufen werden und helfen bei der Identifizierung einzelner anonymer Speicherbereiche.
Die Zuweisung eines Namens für einen anonymen virtuellen Speicherbereich kann verhindern, dass dieser Bereich aufgrund des unterschiedlichen Namens mit benachbarten virtuellen Speicherbereichen zusammengelegt wird.
\english{Allow naming anonymous virtual memory areas.\\
This feature allows assigning names to virtual memory areas.
Assigned names can be later retrieved from /proc/pid/maps and /proc/pid/smaps and help identifying individual anonymous memory areas.
Assigning a name to anonymous virtual memory area might prevent that area from being merged with adjacent virtual memory areas due to the difference in their name.}

%13.33
\subsection{Enable userfaultfd() system call \texorpdfstring{$\rightarrow$}{->}}
CONFIG\_USERFAULTFD [=y] \textbf{[Y]}\\
Aktivieren Sie den Systemaufruf \texttt{userfaultfd()}, der das Abfangen und Behandeln von Seitenfehlern im Userland ermöglicht.
\english{Enable the userfaultfd() system call that allows to intercept and handle page faults in userland.}

\subsubsection{Userfaultfd write protection support for shmem/hugetlbfs}
CONFIG\_PTE\_MARKER\_UFFD\_WP [=y] \textbf{[Y]}\\
Ermöglicht die Erstellung von Marker-PTEs für den Userfaultfd-Schreibschutz.
Sie ist erforderlich, um den userfaultfd-Schreibschutz für dateigebundene Speichertypen wie \texttt{shmem} und \texttt{hugetlbfs} zu aktivieren.
\english{Allows to create marker PTEs for userfaultfd write protection purposes.
It is required to enable userfaultfd write protection on file-backed memory types like shmem and hugetlbfs.}

%13.34
\subsection{Multi-Gen LRU}
CONFIG\_LRU\_GEN [=y] \textbf{[Y]}\\
Eine hochleistungsfähige LRU-Implementierung zur Überbelegung von Speicher.\\
Siehe \texttt{Documentation/admin-guide/mm/multigen\_lru.rst} für Details.
\english{A high performance LRU implementation to overcommit memory.\\
See Documentation/admin-guide/mm/multigen\_lru.rst for details.}

\subsubsection{Enable by default}
CONFIG\_LRU\_GEN\_ENABLED [=y] \textbf{[Y]}\\
Mit dieser Option wird das Multi-Gen-LRU standardmäßig aktiviert.
\english{This option enables the multi-gen LRU by default.}

\subsubsection{Full stats for debugging}
CONFIG\_LRU\_GEN\_STATS [=n] \textbf{[N]}\\
Aktivieren Sie diese Option nicht, es sei denn, Sie möchten sich die historischen Statistiken der
ausgeschiedenen Generationen zu Fehlersuchzwecken ansehen.
Diese Option hat einen Speicher-Overhead pro memcg und pro Knoten.
\english{Do not enable this option unless you plan to look at historical stats from evicted generations for debugging purpose.\\
This option has a per-memcg and per-node memory overhead.}

%13.35 NUMA emulation
% this moved from linux_configuration_03_processor_type_and_features to here:
\subsection{NUMA emulation}
CONFIG\_NUMA\_EMU [=n] \textbf{[N]}\\
Aktivierung der NUMA-Emulation.
Eine einfache Maschine wird in virtuelle Knoten aufgeteilt, wenn sie mit \texttt{numa=fake=N} gebootet wird, wobei N die Anzahl der Knoten ist.
Dies ist nur für die Fehlersuche nützlich.
\english{Enable NUMA emulation.
A flat machine will be split into virtual nodes when booted with "numa=fake=N", where N is the number of nodes.
This is only useful for debugging.}

%13.36 reclaim empty user page table pages
\subsection{reclaim empty user page table pages}
CONFIG\_PT\_RECLAIM [=y] \textbf{[Y]}\\
Versuchen Sie, leere Benutzerseitentabellen-Seiten in anderen Pfaden als \texttt{munmap} und \texttt{exit\_mmap} zurückzugewinnen.\\
Hinweis: Jetzt werden nur noch leere Benutzer-PTE"=Seitentabellen"=Seiten zurückverlangt.
\english{Try to reclaim empty user page table pages in paths other than munmap and exit\_mmap path.\\
Note: now only empty user PTE page table pages will be reclaimed.}

%13.37
\subsection{Data Access Monitoring \texorpdfstring{$\rightarrow$}{->}}
\textit{Überwachung des Datenzugriffs}

\subsubsection{DAMON: Data Access Monitoring Framework}
CONFIG\_DAMON [=y] \textbf{[Y]}\\
Damit wird ein Rahmen geschaffen, der es den Kernel-Subsystemen ermöglicht, die Zugriffshäufigkeit der einzelnen Speicherbereiche zu überwachen.
Diese Informationen können für eine leistungsorientierte Speicherverwaltung auf DRAM-Ebene nützlich sein.
Weitere Informationen finden Sie unter\\\url{https://damonitor.github.io/doc/html/latest-damon/index.html}.
\english{This builds a framework that allows kernel subsystems to monitor access frequency of each memory region.
The information can be useful for performance-centric DRAM level memory management.\\
See \url{https://www.kernel.org/doc/html/latest/mm/damon/index.html} for more information.}

\paragraph{Data access monitoring operations for virtual address spaces}$~$\\
CONFIG\_DAMON\_VADDR [=y] \textbf{[Y]}\\
Damit werden die Standardoperationen zur Überwachung des Datenzugriffs für DAMON erstellt, die für virtuelle Adressräume funktionieren.
\english{This builds the default data access monitoring operations for DAMON that work for virtual address spaces.}

\paragraph{Data access monitoring operations for the physical address space}$~$\\
CONFIG\_DAMON\_PADDR [=y] \textbf{[Y]}\\
Damit werden die Standardvorgänge zur Datenzugriffsüberwachung für DAMON erstellt, die für den physischen Adressraum funktionieren.
\english{This builds the default data access monitoring operations for DAMON that works for the physical address space.}

\subsubsection{DAMON sysfs interface}
CONFIG\_DAMON\_SYSFS [=y] \textbf{[Y]}\\
Dies bildet die sysfs-Schnittstelle für DAMON.
Der Benutzerbereich kann die Schnittstelle für die Überwachung beliebiger Datenzugriffe verwenden.
\english{This builds the sysfs interface for DAMON.
The user space can use the interface for arbitrary data access monitoring.}

{\color{gray}
\subsubsection*{DAMON debugfs interface (DEPRECATED!)}
CONFIG\_DAMON\_DBGFS [=y] \textbf{[N]}\\
Damit wird die debugfs-Schnittstelle für DAMON erstellt.
Die Benutzerraum-Administratoren können die Schnittstelle für die Überwachung beliebiger Datenzugriffe verwenden.
Wenn Sie unsicher sind, sagen Sie N.\\
Dies ist veraltet, daher sollten Benutzer auf die sysfs-Schnittstelle (DAMON\_SYSFS) umsteigen.
Wenn Sie auf diese Schnittstelle angewiesen sind und nicht umsteigen können, melden Sie bitte Ihren Anwendungsfall an damon@lists.linux.dev und linux-mm@kvack.org.
\english{This builds the debugfs interface for DAMON.
The user space admins can use the interface for arbitrary data access monitoring.
If unsure, say N.
This is deprecated, so users should move to the sysfs interface (DAMON\_SYSFS).
If you depend on this and cannot move, please report your usecase to damon@lists.linux.dev and linux-mm@kvack.org.}
}

\subsubsection{Build DAMON-based reclaim (DAMON\_RECLAIM)}
CONFIG\_DAMON\_RECLAIM [=y] \textbf{[Y]}\\
Damit wird das DAMON-basierte Reklamationssubsystem aufgebaut.
Es findet Seiten, auf die lange Zeit nicht mehr mit DAMON zugegriffen wurde (Cold) und fordert diese zurück.
Dies wird als proaktive und leichtgewichtige Rückgewinnung bei geringem Speicherdruck vorgeschlagen, während die traditionelle, auf Seitenscans basierende Rückgewinnung bei hohem Druck verwendet wird.
\english{This builds the DAMON-based reclamation subsystem.
It finds pages that not accessed for a long time (cold) using DAMON and reclaim those.\\
This is suggested to be used as a proactive and lightweight reclamation under light memory pressure, while the traditional page scanning-based reclamation is used for heavy pressure.}

\subsubsection{Build DAMON-based LRU-lists sorting (DAMON\_LRU\_SORT)}
CONFIG\_DAMON\_LRU\_SORT [=y] \textbf{[Y]}\\
Damit wird das DAMON-basierte LRU-Listensortier-Subsystem aufgebaut.
Es versucht, häufig zugegriffene (heiße) Seiten zu schützen, während selten zugegriffene (kalte) Seiten unter Speicherdruck zuerst zurückgefordert werden.
\english{This builds the DAMON-based LRU-lists sorting subsystem.
It tries to protect frequently accessed (hot) pages while rarely accessed (cold) pages reclaimed first under memory pressure.}
