Linux Paging, Caching und Swapping
Inhalte Paging Das Virtuelle Speichermodell Die Page Table im Detail Page Allocation und Page Deallocation Memory Mapping & Demand Paging Caching Die verschiedenen Caches Swapping Welche Pages eines Prozesses werden ausgelagert Der Kernel Swap Demon (kswapd) Freimachen von Speicherseiten
Prozeß VPFN 3 VPFN 2 VPFN VPFN 0 PFN 7 PFN 6 PFN 5 PFN 4 PFN 3 PFN 2 PFN PFN 0 Prozeß 2 VPFN 2 VPFN VPFN 0 Virtuelle Speicherseite eines Prozesses Physische Speicherseite eines Prozesses Physische Speicherseite die von mehreren Prozessen gemeinsam genutzt wird
Prozeß PFN 7 PFN 6 Prozeß 2 VPFN 3 VPFN 2 VPFN PFN 5 PFN 4 PFN 3 PFN 2 PFN VPFN 2 VPFN VPFN 0 PFN 0 Page Table Page Table VPFN 0 Virtuelle Speicherseite eines Prozesses Physische Speicherseite eines Prozesses Physische Speicherseite die von mehreren Prozessen gemeinsam genutzt wird Page Table
Virtuell Physisch Page-Größe bei ix86 Systemen beträgt 4 Kilobyte, also 0x000 B. Virtuelle Adresse 0x00484456 Prozessor extrahiert Offset und VPFN Physische Adresse 0x00089456 Prozessor generiert physische Adresse und greift darauf zu VPFN 0x484 Page Offset 0x456 Prozessor greift auf Page Table 0x484 zu PFN 0x89 Page Offset 0x456
Inhalt Paging Das Virtuelle Speichermodell Die Page Table im Detail Page Allocation und Page Deallocation Memory Mapping & Demand Paging Caching Die verschiedenen Caches Swapping Welche Pages eines Prozesses werden ausgelagert Der Kernel Swap Demon (kswapd) Freimachen von Speicherseiten
Ein einzelner Page Table Eintrag eines Prozesses V Zugriffsrechte D PFN Valid Flag Page Dirty Flag
Ein einzelner Page Table Eintrag eines Prozesses V Zugriffsrechte D PFN Valid Flag Page Dirty Flag Valid gesetzt & PFN gesetzt Seite vorhanden Valid gelöscht & PFN gelöscht Seite ungültig (Page fault)
Ein einzelner Page Table Eintrag eines Prozesses V Zugriffsrechte D PFN Valid Flag Page Dirty Flag Valid gesetzt & PFN gesetzt Seite vorhanden Valid gelöscht & PFN gelöscht Seite ungültig (Page fault) Valid gesetzt & PFN gelöscht Page fault: Demand Paging Valid gelöscht & PFN gesetzt Page fault: Seite im Swap
Ein einzelner Page Table Eintrag eines Prozesses V Zugriffsrechte D PFN Valid Flag Page Dirty Flag Eine neue Page wird geladen Page wird geändert (beschrieben) Page wird nicht beschrieben Page wird dringend für einen anderen Prozeß benötigt Page wird auf Datenträger ausgelagert in den Swap Bereich Seite wird verworfen
Level Level 2 Level 3 Byte in Seite PFN PFN PFN Adresse PGD Physische Seite PGD: Page Global Directory.Vom Kernel initialisiert. Weist auf den ersten Page Table Level.
Inhalt Paging Das Virtuelle Speichermodell Die Page Table im Detail Page Allocation und Page Deallocation Memory Mapping & Demand Paging Caching Die verschiedenen Caches Swapping Welche Pages eines Prozesses werden ausgelagert Der Kernel Swap Demon (kswapd) Freimachen von Speicherseiten
mem_map_t oder auch Page Struktur: count Anzahl der Benutzer, die die Seite benutzen age Alter der Seite. Entscheidet, ob die Seite verworfen bzw. ausgelagert wird, wenn wieder Speicherplatz benötigt wird. map_nr Physische PFN
free_area Vektor 5 4 3 2 0... 8 7 6 5 4 3 2 PFN 0 Freie Speicherseite im Hauptspeicher (nicht alloziert)
free_area Vektor 5 mem_map Struktur 4 3 4 2 0 0 mem_map_t... 8 7 6 5 4 3 2 PFN 0 Freie Speicherseite im Hauptspeicher (nicht alloziert)
free_area Vektor 5 mem_map Struktur 4 map Bitmaps 3 4 2 0 0 mem_map_t... 8 7 6 5 4 3 2 PFN 0 Freie Speicherseite im Hauptspeicher (nicht alloziert)
Inhalt Paging Das Virtuelle Speichermodell Die Page Table im Detail Page Allocation und Page Deallocation Memory Mapping und Demand Paging Caching Die verschiedenen Caches Swapping Welche Pages eines Prozesses werden ausgelagert Der Kernel Swap Demon (kswapd) Freimachen von Speicherseiten
mm_struct vm_area_struct vm_end vm_start vm_ops Virtueller Speicher des Prozesses z.b. Code z.b. initialisierte Daten (Variablen).. Demand Paging Valid gesetzt & PFN gelöscht
Inhalt Paging Das Virtuelle Speichermodell Die Page Table im Detail Page Allocation und Page Deallocation Memory Mapping & Demand Paging Caching Die verschiedenen Caches Swapping Welche Pages eines Prozesses werden ausgelagert Der Kernel Swap Demon (kswapd) Freimachen von Speicherseiten
Buffer Cache Page Cache Swap Cache Hardware Caches TLB (Translation Look-aside Buffers)
Buffer Cache Block-Gerätetreiber Block wird geladen Geräte-ID, Blocknummer 2 kb 2 kb 2 kb 2 kb 2 kb Hardware: Blockgerät (Festplatte)
Page Cache Page fault handling code Pointer auf mem_map_t Datei, Datenoffset page_hash_table (single-page read ahead) mem_map_t mem_map_t mem_map_t mem_map_t mem_map_t Page Page Page Page Page Festplatte
Swap Cache Seite wird aus Swap File gelesen Swap Cache erzeugt Page Table Entry (Swap File, Offset)
Swap Cache Seite wird aus Swap File gelesen Swap Cache erzeugt Page Table Entry (Swap File, Offset) Page wird geändert (beschrieben) Page wird nicht beschrieben Swap Cache löscht den Page Table Entry
Swap Cache Seite wird aus Swap File gelesen Swap Cache erzeugt Page Table Entry (Swap File, Offset) Page wird geändert (beschrieben) Page wird nicht beschrieben Swap Cache löscht den Page Table Entry Seite soll ins Swap File ausgelagert werden
Swap Cache Seite wird aus Swap File gelesen Swap Cache erzeugt Page Table Entry (Swap File, Offset) Page wird geändert (beschrieben) Page wird nicht beschrieben Swap Cache löscht den Page Table Entry Seite soll ins Swap File ausgelagert werden Seite nicht im Cache Page wird in Swap File geschrieben Seite im Cache Seite wird verworfen. Grosse Zeitersparnis
Hardware Caches TLB (Translation Look-aside Buffers) CPU (Prozessor) OS (Linux) TLB
Hardware Caches TLB (Translation Look-aside Buffers) CPU (Prozessor) Exception TLB miss OS (Linux) TLB neuer TLB
Hardware Caches TLB (Translation Look-aside Buffers) CPU (Prozessor) TLB exception bearbeitet OS (Linux)
Inhalt Paging Das Virtuelle Speichermodell Die Page Table im Detail Page Allocation und Page Deallocation Memory Mapping & Demand Paging Caching Die verschiedenen Caches Swapping Welche Pages eines Prozesses werden ausgelagert Der Kernel Swap Demon (kswapd) Freimachen von Speicherseiten
Prozess mit Seiten im physischen Speicher PFN 7 PFN 6 PFN 5 PFN 4 PFN 3 PFN 2 PFN PFN 0 Working Set eines Prozesses
Prozess mit Seiten im physischen Speicher PFN 7 PFN 6 PFN 5 PFN 4 PFN 3 PFN 2 PFN PFN 0 mem_map_t count age map_nr count age map_nr Working Set eines Prozesses
Prozess mit Seiten im physischen Speicher PFN 7 PFN 6 PFN 5 PFN 4 PFN 3 PFN 2 PFN PFN 0 mem_map_t count age map_nr count age map_nr Least Recently Used (LRU) Technik zur Bestimmung des Seitenalters Working Set eines Prozesses Linux
LRU im Detail: Seite wird alloziert Das Alter wird gesetzt auf: age = 3 Seitenzugriff Das Alter wird um 3 eröht, Maximalwert ist 20 kswapd prüft das Alter Das Alter wird um reduziert. Wenn 0 erreicht wird, gilt die Seite als alt.
Inhalt Paging Das Virtuelle Speichermodell Die Page Table im Detail Page Allocation und Page Deallocation Memory Mapping & Demand Paging Caching Die verschiedenen Caches Swapping Welche Pages eines Prozesses werden ausgelagert Der Kernel Swap Demon (kswapd) Freimachen von Speicherseiten
Systeminitialisierung kswapd wird geladen Kernel Swap Timer wird initialisiert free_pages_high und free_pages_low werden initialisiert
Systeminitialisierung kswapd wird geladen Kernel Swap Timer wird initialisiert free_pages_low und free_pages_high werden initialisiert Anzahl freier Seiten unter free_pages_low? nein
Systeminitialisierung kswapd wird geladen Kernel Swap Timer wird initialisiert free_pages_low und free_pages_high werden initialisiert Anzahl freier Seiten unter free_pages_low? nein Anzahl freier Seiten unter free_pages_high? nein
Systeminitialisierung kswapd wird geladen Kernel Swap Timer wird initialisiert free_pages_low und free_pages_high werden initialisiert Anzahl freier Seiten unter free_pages_low? nein Anzahl freier Seiten unter free_pages_high? nein Don t Panic
Systeminitialisierung kswapd wird geladen Kernel Swap Timer wird initialisiert free_pages_low und free_pages_high werden initialisiert Anzahl freier Seiten unter free_pages_low? nein Anzahl freier Seiten unter free_pages_high? ja nein Don t Panic
Systeminitialisierung kswapd wird geladen Kernel Swap Timer wird initialisiert free_pages_low und free_pages_high werden initialisiert Anzahl freier Seiten unter free_pages_low? nein Anzahl freier Seiten unter free_pages_high? ja nein 3 Seiten freimachen Don t Panic
Systeminitialisierung kswapd wird geladen Kernel Swap Timer wird initialisiert free_pages_low und free_pages_high werden initialisiert Anzahl freier Seiten unter free_pages_low? ja nein Anzahl freier Seiten unter free_pages_high? ja nein 3 Seiten freimachen Don t Panic
Systeminitialisierung kswapd wird geladen Kernel Swap Timer wird initialisiert free_pages_low und free_pages_high werden initialisiert ja Anzahl freier Seiten unter free_pages_low? nein 6 Seiten freimachen Nur halbe Zeitspanne schlafen Anzahl freier Seiten unter free_pages_high? ja nein 3 Seiten freimachen Don t Panic
Systeminitialisierung kswapd wird geladen Kernel Swap Timer wird initialisiert free_pages_low und free_pages_high werden initialisiert ja Anzahl freier Seiten unter free_pages_low? nein 6 Seiten freimachen Nur halbe Zeitspanne schlafen Anzahl freier Seiten unter free_pages_high? ja nein 3 Seiten freimachen Don t Panic Zuletzt benutzte Methode wiederbenutzen:.) Page- und Buffer-Cache Seiten reduzieren (z.b. Memory Mapped Files, Festplattendaten) 2.) System V Shared Memory Seiten auslagern (Swap File) 3.) Speicherseiten auslagern (Swap File)
Inhalt Paging Das Virtuelle Speichermodell Die Page Table im Detail Page Allocation und Page Deallocation Memory Mapping & Demand Paging Caching Die verschiedenen Caches Swapping Welche Pages eines Prozesses werden ausgelagert Der Kernel Swap Demon (kswapd) Freimachen von Speicherseiten
.) Page- und Buffer-Cache Seiten reduzieren (z.b. Memory Mapped Files, Festplattendaten) Kein Swapping (Datenträgerzugriff) nötig! mem_map mem_map_t Physische Seiten clock Algorithmus
2.) System V Shared Memory Seiten auslagern (Swap File) clock Algorithmus Physische Seiten Prozeß A Prozeß B Prozeß C
2.) System V Shared Memory Seiten auslagern (Swap File) clock Algorithmus Physische Seiten Page Tables Prozeß A Prozeß B Prozeß C
2.) System V Shared Memory Seiten auslagern (Swap File) clock Algorithmus Physische Seiten Page Tables Prozeß A Prozeß B Prozeß C Page Table Eintrag invalid setzen PFN auf Swapposition setzen (Datei, Offset) User Count für die Seite um reduzieren (mem_map_t) Wenn User Count = 0, dann Seite swappen
3.) Speicherseiten auslagern (Swap File) kswapd Darf Prozeß geswappt werden? Prozeß A Prozeß B Prozeß C
3.) Speicherseiten auslagern (Swap File) kswapd Darf Prozeß geswappt werden? Prozeß A Prozeß B Prozeß C Dürfen Seiten geswappt werden? (nicht locked / shared)
3.) Speicherseiten auslagern (Swap File) kswapd Darf Prozeß geswappt werden? Prozeß A Prozeß B Prozeß C Dürfen Seiten geswappt werden? (nicht locked / shared) Muß eine Seite geswappt werden oder kann man sie einfach verwerfen? (Können die Informationen anders wiederhergestellt werden?)
3.) Speicherseiten auslagern (Swap File) kswapd Darf Prozeß geswappt werden? Prozeß A Prozeß B Prozeß C Dürfen Seiten geswappt werden? (nicht locked / shared) Muß eine Seite geswappt werden oder kann man sie einfach verwerfen? (Können die Informationen anders wiederhergestellt werden?) Seite verwerfen Einige wenige Seiten wählen Seiten ins Swap File auslagern
Ende Linux Paging, Caching und Swapping