Linux liest voraus, wenn gleichzeitige Lesevorgänge für dieselbe Datei ausgeführt werden

Linux liest voraus, wenn gleichzeitige Lesevorgänge für dieselbe Datei ausgeführt werden

Linux führt Readaheads aus (angegeben in /sys/block//queue/read_ahead_kb), wenn eine Datei sequenziell gelesen wird.

Interessiertes Betriebssystem: Red Hat Linux Interessiertes Dateisystem: xfs, ext4

Nach welchen Kriterien wird entschieden, ob ein sequentieller Lesevorgang durchgeführt wird?Berücksichtigen Sie mehrere gleichzeitige Lesevorgänge derselben Datei mit pread (https://man7.org/linux/man-pages/man2/pwrite.2.html) mit gleichen oder unterschiedlichen FDs.

z.B

Gleiche FD. Lesevorgänge an den Positionen 10-20-30-78-89 (außerhalb der Sequenz) -40-50-60-70 - 23-34 (außerhalb der Sequenz) - 80-90-100 ...

Könnten die oben genannten subtilen Out-of-Sequence-Lesevorgänge in diesem Fall ein vorausschauendes Lesen verhindern?

Wenn ja, würde die Verwendung von zwei verschiedenen FDs dieses Problem lösen (d. h. ein separates FD für Lesevorgänge bei 78-89-23-34)? (d. h. Readaheads werden wie üblich für Lesevorgänge bei 10-20-30-40-50 ausgeführt)

Antwort1

Können in diesem Fall die oben genannten subtilen Lesevorgänge außerhalb der Reihenfolge ein Vorauslesen verhindern?

Ja, nicht sequenzielle Lesevorgänge aus demselben Dateideskriptor können sich auf Readaheads auswirken, aber der Kernel versucht, dies zu berücksichtigen – zumindest bei kleinen „zufälligen“ Lesevorgängen parallel zu sequenziellen Lesevorgängen. Siehedie Beschreibung des On-Demand-Readahead-Designs, insbesondere:

Bei verschachtelten sequentiellen Lesevorgängen können gleichzeitige Streams auf demselben FD den Readahead-Status des jeweils anderen ungültig machen. Daher kennzeichnen wir die neue Readahead-Seite bei (Start+Größe-async_Größe) mit PG_readahead und verwenden sie als Readahead-Indikator. Die Kennzeichnung wird auf bereits zwischengespeicherten Seiten nicht gesetzt, um den Ärger mit dem umsonst erfolgenden Readahead zu vermeiden und sinnlose Seitencache-Suchvorgänge zu sparen.

Wie das hier passt, können Sie sehen, wenn Sie sichondemand_readahead, insbesondereseinen Aufruf zutry_context_readaheadund die dazugehörigen Kommentare.

Wie immer, wenn Sie versuchen, Leistungsengpässe zu beseitigen, sollten Sie potenzielle Engpässe nur als Hinweise berücksichtigen: Sie sollten Ihre eigenen Benchmarks entwickeln und die Leistungsmerkmale Ihrer spezifischen Szenarien analysieren. Es könnte beispielsweise der Fall sein, dass Ihre Out-of-Sequence-Lesevorgänge nur Seiten treffen, die sich aufgrund des Readahead bei Ihren sequentiellen Lesevorgängen bereits im Seitencache befinden.

verwandte Informationen