Wie wird der Seitencache im Kernel auf 64-Bit-x86-Architekturen zugeordnet?

7

Wie ist unter einem modernen 64-Bit-x86-Linux die Zuordnung zwischen virtuellen und physischen Seiten auf der Kernelseite eingerichtet? Auf der Benutzerseite können Sie mmapSeiten aus dem Seitencache einfügen, wodurch 4K-Seiten direkt dem Benutzerbereich zugeordnet werden. Ich bin jedoch daran interessiert, wie die Seiten auf der Kernelseite zugeordnet werden.

Verwendet es die "gesamte RAM-Identitätszuordnung" oder etwas anderes? Verwendet diese gesamte RAM-Identitätszuordnung im Allgemeinen 1 GB Seiten?

BeeOnRope
quelle
Über welchen Cache sprichst du?
Gilles 'SO - hör auf böse zu sein'
@Gilles - die Seiten - Cache , dh der Cache, die Seiten von der Platte (einschließlich ungeschriebenen schmutzigen Blöcke) lesen hält.
BeeOnRope

Antworten:

1

Auf einem modernen 64-Bit x86 Linux?

Ja. Es ruft kmap()oder auf kmap_atomic(), aber auf x86-64 verwenden diese immer die Identitätszuordnung. x86-32 hat eine spezifische Definition davon, aber ich denke, x86-64 verwendet eine generische Definition in include / linux / highmem.h .

Und ja, die Identitätszuordnung verwendet 1 GB große Seiten.

LWN-Artikel, in dem kmap_atomic erwähnt wird .

Ich habe kmap_atomic () gefunden, indem ich mir den PIO-Code angesehen habe . [*]

Wenn read () / write () Daten aus / in den Seitencache kopiert:

generic_file_buffered_read -> copy_page_to_iter -> kmap_atomic () erneut.


[*] Ich habe mir PIO angesehen, weil mir klar wurde, dass der Kernel beim Ausführen von DMA zum / vom Seitencache die Verwendung von Zuordnungen vermeiden konnte. Der Kernel könnte einfach die physikalische Adresse auflösen und an die Hardware übergeben :-). (Vorbehaltlich IOMMU). Der Kernel benötigt jedoch eine Zuordnung, wenn er zuerst die Daten prüfen oder verschlüsseln möchte.

sourcejedi
quelle