[LINUX] Speicherverwaltung »Konzeptübersicht

Ursprünglich ist es Teil des Quellcodes des Linux-Kernels, daher wird es als GPLv2 behandelt (Anerkennung, dass es sein sollte).

https://www.kernel.org/doc/html/latest/index.html

Licensing documentation

The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.

https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing

https://www.kernel.org/doc/html/latest/admin-guide/mm/concepts.html

Concepts overview

The memory management in Linux is a complex system that evolved over the years and included more and more functionality to support a variety of systems from MMU-less microcontrollers to supercomputers.

Die Linux-Speicherverwaltung ist ein komplexes System, das im Laufe der Jahre verbessert wurde und über die Funktionalität verfügt, eine Vielzahl von Systemen zu unterstützen, von MMU-freien Mikrocontrollern bis hin zu Supercomputern.

The memory management for systems without an MMU is called nommu and it definitely deserves a dedicated document, which hopefully will be eventually written.

Die Speicherverwaltung für Systeme ohne MMU wird als "nommu" bezeichnet. Und es besteht kein Zweifel, dass es sich lohnt, ein spezielles Dokument bereitzustellen.

Yet, although some of the concepts are the same, here we assume that an MMU is available and a CPU can translate a virtual address to a physical address.

Obwohl einige Konzepte identisch sind, gehen wir davon aus, dass MMUs verfügbar sind und dass die CPU von virtuellen Adressen in physische Adressen übersetzen kann.

Virtual Memory Primer

The physical memory in a computer system is a limited resource and even for systems that support memory hotplug there is a hard limit on the amount of memory that can be installed.

Der physische Speicher eines Computersystems ist eine begrenzte Ressource, und selbst wenn das System Hotplugs des Speichers unterstützt, gibt es strenge Einschränkungen hinsichtlich der installierbaren Speichermenge.

The physical memory is not necessarily contiguous; it might be accessible as a set of distinct address ranges.

Der physische Speicher erfordert keine Kontinuität. Manchmal ist es als separater Adressbereich zugänglich.

Besides, different CPU architectures, and even different implementations of the same architecture have different views of how these address ranges are defined.

Darüber hinaus können unterschiedliche CPU-Architekturen oder sogar dieselbe Architektur, aber unterschiedliche Implementierungen unterschiedliche Adressbereiche haben.

.

All this makes dealing directly with physical memory quite complex and to avoid this complexity a concept of virtual memory was developed.

Dies machte den direkten Umgang mit physischem Speicher sehr kompliziert, und das Konzept des virtuellen Speichers wurde entwickelt, um diese Komplexität zu vermeiden.

The virtual memory abstracts the details of physical memory from the application software, allows to keep only needed information in the physical memory (demand paging) and provides a mechanism for the protection and controlled sharing of data between processes.

Der virtuelle Speicher abstrahiert die Details des physischen Speichers zur Anwendungssoftware, sodass dieser im physischen Speicher gespeichert werden kann (Seitenanforderungen) und ein Mechanismus für den Datenschutz und die gemeinsame Nutzung von Daten zwischen Prozessen bereitgestellt wird. ..

.

With virtual memory, each and every memory access uses a virtual address.

Bei Verwendung des virtuellen Speichers erfolgt der gesamte Speicherzugriff über die virtuelle Adresse.

When the CPU decodes the an instruction that reads (or writes) from (or to) the system memory, it translates the virtual address encoded in that instruction to a physical address that the memory controller can understand.

Wenn die CPU einen Befehl zum Lesen oder Schreiben aus dem Systemspeicher decodiert, übersetzt sie die "virtuelle Adresse" in eine "physikalische Adresse", damit der Speichercontroller sie verstehen kann.

.

The physical system memory is divided into page frames, or pages.

Der physische Systemspeicher ist in Seitenrahmen oder Seiten unterteilt.

The size of each page is architecture specific.

Die Größe jeder Seite hängt von der Architektur ab.

Some architectures allow selection of the page size from several supported values; this selection is performed at the kernel build time by setting an appropriate kernel configuration option.

Abhängig von der Architektur können Sie aus mehreren Werten auswählen, die Seitengrößen unterstützen. Diese Auswahl kann mit der Kernel-Konfigurationsoption beim Erstellen des Kernels ausgewählt werden.

.

Each physical memory page can be mapped as one or more virtual pages.

Jede physische Speicherseite kann einer oder mehreren virtuellen Seiten zugeordnet werden.

These mappings are described by page tables that allow translation from a virtual address used by programs to the physical memory address. The page tables are organized hierarchically.

Diese Zuordnung ist in Seitentabellen aufgeführt, die die physische Adresse programmgesteuert in eine physische Speicherquelle übersetzen. Diese Seitentabelle ist hierarchisch organisiert.

.

The tables at the lowest level of the hierarchy contain physical addresses of actual pages used by the software.

Die Tabelle am Ende der Hierarchie enthält die physischen Adressen der von der Software tatsächlich verwendeten Seiten.

The tables at higher levels contain physical addresses of the pages belonging to the lower levels.

Die Tabelle der oberen Ebene enthält die physischen Adressen der Seiten, die in der unteren Ebene enthalten sind.

The pointer to the top level page table resides in a register.

Der Zeiger der obersten Tabelle befindet sich im Register.

When the CPU performs the address translation, it uses this register to access the top level page table.

Wenn die CPU versucht, eine Adresse zu übersetzen, verwendet sie dieses Register über die Seitentabelle der obersten Ebene.

The high bits of the virtual address are used to index an entry in the top level page table.

Die höherwertigen Bits der virtuellen Adresse werden verwendet, um Einträge in der übergeordneten Seitentabelle anzuzeigen.

That entry is then used to access the next level in the hierarchy with the next bits of the virtual address as the index to that level page table.

Dieser Eintrag wird verwendet, um auf die nächste Ebene in der Hierarchie zuzugreifen, wobei das nächste Bit der virtuellen Adresse als Index für die Seitentabelle für diese Ebene verwendet wird.

The lowest bits in the virtual address define the offset inside the actual page.

Die niedrigsten Bits der virtuellen Adresse definieren den tatsächlichen Seitenversatz.

Huge Pages

The address translation requires several memory accesses and memory accesses are slow relatively to CPU speed.

Die Adressübersetzung erfordert mehrere Speicherzugriffe, die im Vergleich zur CPU-Geschwindigkeit langsam sind.

To avoid spending precious processor cycles on the address translation, CPUs maintain a cache of such translations called Translation Lookaside Buffer (or TLB).

Um die Verwendung eines wertvollen Prozesszyklus für die Adressübersetzung zu vermeiden, verfügt die CPU über einen Übersetzungscache namens TLB (Translation Lookaside Buffer).

Usually TLB is pretty scarce resource and applications with large memory working set will experience performance hit because of TLB misses.

TLBs sind in der Regel sehr ressourcenarm, und TLB vermisst eine langsame Leistung bei großen Speicherauslastungssätzen.

.

Many modern CPU architectures allow mapping of the memory pages directly by the higher levels in the page table. For instance, on x86, it is possible to map 2M and even 1G pages using entries in the second and the third level page tables.

Oki, die neueste CPU-Architektur, kann Speicherseiten direkt oben in der Seitentabelle zuordnen. Mit x86 können Sie beispielsweise 2M 1G mithilfe der Einträge in der zweiten und dritten Seitentabelle zuordnen.

In Linux such pages are called huge.

Linux nennt das "riesig".

Usage of huge pages significantly reduces pressure on TLB, improves TLB hit-rate and thus improves overall system performance.

Riesige Seiten können verwendet werden, um den Druck auf den TLB zu verringern. Erhöhen Sie die TLB-Trefferquote, um die Gesamtsystemleistung zu verbessern.

.

There are two mechanisms in Linux that enable mapping of the physical memory with the huge pages.

Linux verfügt über zwei Mechanismen zum Zuordnen des physischen Speichers zu großen Seiten.

The first one is HugeTLB filesystem, or hugetlbfs.

Das erste ist "HugeTLB-Dateisystem", riesige tlbfs.

It is a pseudo filesystem that uses RAM as its backing store. For the files created in this filesystem the data resides in the memory and mapped using huge pages.

Dies ist ein Pseudo-Dateisystem, das RAM als Aufzeichnungsmedium verwendet. Wenn eine Datei in diesem Dateisystem erstellt wird, befinden sich die Daten im Speicher und große Seiten werden zugeordnet.

The hugetlbfs is described at Documentation/admin-guide/mm/hugetlbpage.rst <hugetlbpage>.

Die hugetlbfs finden Sie in Documentation / admin-guide / mm / hubetlbpage.rst <hugetlbpage>.

.

Another, more recent, mechanism that enables use of the huge pages is called Transparent HugePages, or THP.

Ein weiterer Mechanismus, um neuere große Seiten zu aktivieren, heißt "Transparent HugePages" THP.

Unlike the hugetlbfs that requires users and/or system administrators to configure what parts of the system memory should and can be mapped by the huge pages, THP manages such mappings transparently to the user and hence the name.

Im Gegensatz zu hugetlbfs, bei dem Benutzer und Systemadministratoren konfigurieren müssen, welche Teile des Systemspeichers sie konfigurieren müssen, und die von großen Seiten zugeordnet werden können, bietet THP entsprechende Zuordnungen für Benutzer und Namen.

See Documentation/admin-guide/mm/transhuge.rst <admin_guide_transhuge> for more details about THP.

Zones

Often hardware poses restrictions on how different physical memory ranges can be accessed.

Hardware legt häufig Einschränkungen für den Zugriff auf verschiedene physische Speicherbereiche fest.

In some cases, devices cannot perform DMA to all the addressable memory.

In einigen Fällen kann das Gerät nicht für alle adressierbaren Speicher DMA ausführen.

In other cases, the size of the physical memory exceeds the maximal addressable size of virtual memory and special actions are required to access portions of the memory.

In anderen Fällen ist eine spezielle Aktion erforderlich, um auf einen Teil des Speichers zuzugreifen, wenn die Größe des physischen Speichers die maximal adressierbare Größe des virtuellen Speichers überschreitet.

Linux groups memory pages into zones according to their possible usage.

Unter Linux haben wir Speicherseiten organisiert, die als "Zone" bezeichnet werden.

For example, ZONE_DMA will contain memory that can be used by devices for DMA, ZONE_HIGHMEM will contain memory that is not permanently mapped into kernel's address space and ZONE_NORMAL will contain normally addressed pages.

Beispielsweise enthält ZONE_DMA den Speicher, der dem Gerät von DMA zur Verfügung steht. DONE_HIGHMEM enthält nicht persistenten Speicher im Kernel-Adressraum. ZONE_NORMAL enthält regulär adressierte Seiten.

.

The actual layout of the memory zones is hardware dependent as not all architectures define all zones, and requirements for DMA are different for different platforms.

Das tatsächliche Layout der Speicherzone ist hardwareabhängig. Nicht alle Architekturen definieren jede Zone. Die DMA-Anforderungen sind auf verschiedenen Plattformen unterschiedlich.

Nodes

Many multi-processor machines are NUMA - Non-Uniform Memory Access - systems.

Viele Multiprozessor-Maschinen sind NUMA-Systeme (Non-Uniform Memory Access).

In such systems the memory is arranged into banks that have different access latency depending on the "distance" from the processor.

In einem solchen System wird der Speicher in Bänke unterteilt und je nach "Entfernung" vom Prozessor mit unterschiedlicher Latenz zugegriffen.

Each bank is referred to as a node and for each node Linux constructs an independent memory management subsystem.

Jede Bank wird als Knoten bezeichnet. Jeder Knoten bildet ein unabhängiges Speicherverwaltungssubsystem.

A node has its own set of zones, lists of free and used pages and various statistics counters.

Der Knoten verfügt über einen eigenen Satz von Zonen, eine Liste der freien und verwendeten Seiten und verschiedene Statistikzähler.

You can find more details about NUMA in

Documentation/vm/numa.rst <numa> and in Documentation/admin-guide/mm/numa_memory_policy.rst <numa_memory_policy>.

Page cache

The physical memory is volatile and the common case for getting data into the memory is to read it from files.

Der physische Speicher ist flüchtig, und ein häufiger Fall beim Abrufen von Daten in den Speicher besteht darin, Daten aus einer Datei zu lesen.

Whenever a file is read, the data is put into the page cache to avoid expensive disk access on the subsequent reads.

Jedes Mal, wenn Sie eine Datei lesen, werden die Daten in den "Seiten-Cache" gestellt, um kostspieligen Festplattenzugriff für nachfolgende Lesevorgänge zu vermeiden.

Similarly, when one writes to a file, the data is placed in the page cache and eventually gets into the backing storage device.

In ähnlicher Weise werden beim Schreiben in eine Datei die Daten in den Seitencache gestellt und schließlich auf dem Sicherungsspeichergerät gespeichert.

The written pages are marked as dirty and when Linux decides to reuse them for other purposes, it makes sure to synchronize the file contents on the device with the updated data.

Die geschriebenen Seiten sind als "schmutzig" markiert, um sicherzustellen, dass der Inhalt der Dateien auf dem Gerät mit den aktualisierten Daten synchronisiert wird, wenn Linux versucht, sie für einen anderen Zweck wiederzuverwenden.

Anonymous Memory

The anonymous memory or anonymous mappings represent memory that is not backed by a filesystem.

anonymer Speicher oder anonyme Zuordnungen ist Speicher, der vom Dateisystem nicht unterstützt wird.

Such mappings are implicitly created for program's stack and heap or by explicit calls to mmap(2) system call.

Solche Zuordnungen können implizit im Stapel und im Heap des Programms oder durch einen expliziten Aufruf des Systemaufrufs mMap (2) implementiert werden.

Usually, the anonymous mappings only define virtual memory areas that the program is allowed to access.

Die anonyme Zuordnung definiert normalerweise nur virtuelle Speicherbereiche, auf die das Programm zugreifen kann.

The read accesses will result in creation of a page table entry that references a special physical page filled with zeroes.

Lesezugriff führt zu einem Seitentabelleneintrag, der auf eine spezielle mit 0 gefüllte physische Seite verweist.

When the program performs a write, a regular physical page will be allocated to hold the written data.

Wenn das Programm einen Schreibvorgang ausführt, wird ihm eine reguläre physische Seite zugewiesen, auf der die geschriebenen Daten gespeichert werden.

The page will be marked dirty and if the kernel decides to repurpose it, the dirty page will be swapped out.

Diese Seite ist als fehlerhaft markiert. Wenn der Kernel entscheidet, dass sie wiederverwendet werden soll, wird die fehlerhafte Seite ausgetauscht.

Reclaim

Throughout the system lifetime, a physical page can be used for storing different types of data.

Während der gesamten Lebensdauer des Systems werden physische Seiten verwendet, um verschiedene Arten von Daten zu speichern.

It can be kernel internal data structures, DMA'able buffers for device drivers use, data read from a filesystem, memory allocated by user space processes etc.

Die interne Datenstruktur des Kernels, DMA-fähige Puffer zur Verwendung durch Gerätetreiber, aus dem Dateisystem gelesene Daten, durch User-Space-Prozesse zugewiesener Speicher usw.

.

Depending on the page usage it is treated differently by the Linux memory management.

Die Linux-Speicherverwaltung behandelt dies je nach Verwendung der Seite unterschiedlich.

The pages that can be freed at any time, either because they cache the data available elsewhere, for instance, on a hard disk, or because they can be swapped out, again, to the hard disk, are called reclaimable.

Eine Seite, die jederzeit zurückgefordert werden kann, wird als "wiederherstellbar" bezeichnet, damit Sie Daten, die an anderer Stelle verfügbar sind, z. B. Ihre Festplatte, zwischenspeichern oder erneut auf Ihre Festplatte austauschen können.

The most notable categories of the reclaimable pages are page cache and anonymous memory.

Die bemerkenswertesten Kategorien wiederverwendbarer Seiten sind der Seitencache und der anonyme Speicher.

.

In most cases, the pages holding internal kernel data and used as DMA buffers cannot be repurposed, and they remain pinned until freed by their user. Such pages are called unreclaimable.

In vielen Fällen bleiben die internen Daten des Kernels erhalten, und die als DMA-Puffer verwendete Seite kann nicht umgeleitet werden und wird repariert, bis sie vom Benutzer freigegeben wird. Solche Seiten werden als "nicht zurückfordernd" bezeichnet.

However, in certain circumstances, even pages occupied with kernel data structures can be reclaimed.

Am Agrarforschungsinstitut können jedoch auch Seiten, die von der Kernel-Datenstruktur belegt werden, wiederverwendet werden.

For instance, in-memory caches of filesystem metadata can be re-read from the storage device and therefore it is possible to discard them from the main memory when system is under memory pressure.

Beispielsweise kann der speicherinterne Cache von Dateisystemmetadaten erneut vom Speichergerät gelesen werden. Sie können sie aus dem Hauptspeicher freigeben, wenn das System nicht über genügend Speicher verfügt.

.

The process of freeing the reclaimable physical memory pages and repurposing them is called (surprise!) reclaim.

Das Freigeben und Zurückfordern wiederverwendbarer physischer Speicherseiten wird als "Zurückfordern" bezeichnet (was!).

Linux can reclaim pages either asynchronously or synchronously, depending on the state of the system.

Linux verwendet Seiten je nach Systemstatus synchron oder asynchron wieder.

When the system is not loaded, most of the memory is free and allocation requests will be satisfied immediately from the free pages supply.

Wenn die Systemlast niedrig ist, wird der größte Teil des Speichers freigegeben und Zuordnungsanforderungen werden in der Reihenfolge von der Herbstseite ausgeführt.

As the load increases, the amount of the free pages goes down and when it reaches a certain threshold (high watermark), an allocation request will awaken the kswapd daemon.

Mit zunehmender Last nimmt das Seitenvolumen ab. Wenn ein hohes Wasserzeichen erreicht ist, weckt die Zuweisungsanforderung den Daemon "kswapd".

It will asynchronously scan memory pages and either just free them if the data they contain is available elsewhere, or evict to the backing storage device (remember those dirty pages?).

Scannen Sie Speicherseiten asynchron und geben Sie sie frei, wenn die darin enthaltenen Daten an anderer Stelle wiederverwendbar sind, oder werfen Sie sie auf ein Backup-Speichergerät (denken Sie an die Dirty-Seite).

As memory usage increases even more and reaches another threshold - min watermark - an allocation will trigger direct reclaim.

Wenn die Speichernutzung weiter zunimmt und ein anderer Schwellenwert (minimales Wasserzeichen) erreicht wird, löst die Zuweisung eine "direkte Rückforderung" aus.

In this case allocation is stalled until enough memory pages are reclaimed to satisfy the request.

In diesem Fall wird die Zuordnung gestoppt, bis genügend Speicherseiten zurückgefordert wurden, um die Anforderung zu erfüllen.

Compaction

As the system runs, tasks allocate and free the memory and it becomes fragmented.

Wenn das System ausgeführt wird, wird Speicher zugewiesen und freigegeben, und es wird ein Fragment.

Although with virtual memory it is possible to present scattered physical pages as virtually contiguous range, sometimes it is necessary to allocate large physically contiguous memory areas.

Mit dem virtuellen Speicher können physische Seiten zusammengestellt werden, um einen praktisch kontinuierlichen Bereich zu erstellen. Manchmal ist es jedoch erforderlich, einen physikalisch kontinuierlichen Speicherbereich zuzuweisen.

Such need may arise, for instance, when a device driver requires a large buffer for DMA, or when THP allocates a huge page.

Wenn der Gerätetreiber beispielsweise einen großen Puffer für DMA benötigt oder wenn der THP-Allokator eine große Seite zuweist, tritt eine solche Anforderung auf.

Memory compaction addresses the fragmentation issue.

Die Speicherverdichtung behebt Fragmentierungsprobleme.

This mechanism moves occupied pages from the lower part of a memory zone to free pages in the upper part of the zone.

Dieser Mechanismus verschiebt die belegte Seite vom unteren Rand der Speicherzone in den freien Speicherplatz über der Speicherzone.

When a compaction scan is finished free pages are grouped together at the beginning of the zone and allocations of large physically contiguous areas become possible.

Nach dem Komprimierungsscan wird der freie Speicher am Anfang der Zone gruppiert und kann einem großen physisch zusammenhängenden Bereich zugewiesen werden.

.

Like reclaim, the compaction may happen asynchronously in the kcompactd daemon or synchronously as a result of a memory allocation request.

Ähnlich wie bei der Rückforderung kann die Komprimierung durch den Daemon "kcompactd" asynchron oder aufgrund der Speicherzuweisung synchron erfolgen.

OOM killer

It is possible that on a loaded machine memory will be exhausted and the kernel will be unable to reclaim enough memory to continue to operate.

Auf stark ausgelasteten Computern kann der Speicher knapp werden. Infolgedessen kann der Kernel möglicherweise nicht genügend Speicher ändern, um den Betrieb fortzusetzen.

In order to save the rest of the system, it invokes the OOM killer.

"OOM Killer" wird aufgerufen, um den Rest des Systems zu retten.

.

The OOM killer selects a task to sacrifice for the sake of the overall system health.

OOM Killer wählt Aufgaben aus, die für den allgemeinen Systemzustand geopfert werden sollen.

The selected task is killed in a hope that after it exits enough memory will be freed to continue normal operation.

Die ausgewählte Aufgabe wird in der Hoffnung beendet, genügend Speicherplatz freizugeben, um den normalen Betrieb nach Abschluss fortzusetzen.

Recommended Posts

Speicherverwaltung »Konzeptübersicht
Verwaltung des Startzeitspeichers
[Übersetzung] Spark Memory Management seit 1.6.0
[OS / Linux] Prozess-, Thread-, Speicherverwaltung