Welche Seitenersetzungsalgorithmen werden im Linux-Kernel für den OS-Datei-Cache verwendet?

9

Linux verwendet die nicht verwendeten Teile des Speichers für das Zwischenspeichern von Dateien und bereinigt den Speicherplatz bei Bedarf.

Meine Frage ist, wie eine Opferseite als Ersatz ausgewählt wird. Es gibt verschiedene Algorithmen (LRU, FIFO, LFU und zufällige Ersetzung)

Ich würde gerne wissen 1) Welche Algorithmen zum Ersetzen von Seiten werden im Linux-Kernel für den OS-Datei-Cache verwendet?

2) Wenn möglich, würde ich gerne wissen, wie es sich im Laufe der Zeit im Linux-Kernel entwickelt hat. Ich gehe davon aus, dass sich der Algorithmus und die Implementierung im Laufe der Zeit ändern können, wenn "vernünftige" Änderungen der Trends berücksichtigt werden. Wie kann ich diese finden? Muss ich Kernel-Quellcodes lesen?

Syko
quelle

Antworten:

10

Die Linux-Speicherverwaltung ("MM") scheint etwas geheimnisvoll und schwierig zu sein.

In der Linux-Literatur wird LRU (Least Recent Used) im Zusammenhang mit der Speicherverwaltung stark erwähnt. Ich habe keinen der anderen genannten Begriffe bemerkt.

Ich fand eine interessante Einführung (erste vier Absätze) in diesem Artikel über das unvergleichliche LWN.net. Es wird erklärt, wie grundlegende LRU in der Praxis für den virtuellen Speicher implementiert werden können. Lies es.

Ein echter LFU-Ersatz (Least Frequently Used) wird für den virtuellen Speicher nicht als praktisch angesehen. Der Kernel kann nicht jeden einzelnen Lesevorgang einer Seite zählen, wenn mmap()er für den Zugriff auf Datei-Cache-Seiten verwendet wird. So werden beispielsweise die meisten Programme in den Speicher geladen. Der Leistungsaufwand wäre viel zu hoch.


Um über dieses einfache Konzept hinauszugehen, gibt es hier eine Entwurfsbeschreibung zu Linux Version 2.6.28-32:

http://linux-mm.org/PageReplacementDesign

Es wird vorgeschlagen, dass Clock-PRO für Dateiseiten verwendet wird. Darauf befindet sich ein Originalpapier. Es gibt eine alte Beschreibung von Clock-PRO auf LWN.net, die wiederum einige praktische Implementierungsdetails enthält. Anscheinend "versucht Clock-PRO" über den LRU-Ansatz hinauszugehen ", von dem eine Variante" in den meisten Systemen verwendet wird ". Es scheint mehr Gewicht auf die Frequenz zu legen.

Linux-mm verfügt über ein weiteres Designdokument zur Implementierung von Clock-PRO unter Linux. Dieser spricht nicht davon, dass es zusammengeführt wird; es wurde geschrieben über sie ein paar Monate vor dem LWN Artikel. http://linux-mm.org/ClockProApproximation

Neuere Beschreibungen besagen, dass Linux lediglich "einige Ideen" von Clock-PRO verwendet und tatsächlich eine "Mischung aus einer Reihe verschiedener Algorithmen mit einer Reihe von Modifikationen zum Abfangen von Eckfällen und verschiedenen Optimierungen" ist .

Das obige Zitat wurde auf eine Frage von Adrian McMenamin beantwortet . McMenamin schloss 2011 ein MSc-Projekt ab und testete Änderungen am Ersetzen von Linux-Seiten basierend auf dem "Working-Set-Modell". Es enthält eine kurze Beschreibung des Austauschs von Linux-Seiten. Die "Variante von LRU" wird als "2Q-Ansatz (Zwei-Warteschlangen] für die Datenbankverwaltung" bezeichnet, es werden eine Reihe von Referenzen bereitgestellt, und es gibt ein Diagramm, das die Bewegung zwischen den beiden Warteschlangen und anderen Zustandsübergängen veranschaulicht. Er beschreibt Linux auch als eine teilweise Implementierung von CLOCK-PRO.

Ich gehe davon aus, dass das LRU-Konzept im Gegensatz zu den anderen von Ihnen genannten Möglichkeiten von Anfang an etabliert wurde. Die wichtigste Änderung war die Einführung von Clock-PRO-basierten Funktionen, dh die Erhöhung der Frequenz.

Im Jahr 2013 erhielt Linux die "Thrash Detection-basierte Dateicache-Größe". Dies ist wahrscheinlich auch für die Frage relevant.

sourcejedi
quelle
Vielen Dank an Sie! du hast mich durch das geführt. Ich werde von der Seite 'PageReplacementDesign' ausgehen. Sehr interessant ist auch die auf der Thrash-Erkennung basierende Größe des Datei-Cache.
Syko