Linux block IO performance

Im Studium gab es eine für mich damals sehr konstruierte Aufgabe in den Systemarchitektur-Tutorien: Zwei Prozesse koordinieren den Zugriff auf eine gemeinsam genutzte Ressource, indem sie in eine Variable ihre Prozess-ID schreiben, falls sie die Ressource nicht erlangen können. 0 schreiben sie nach der Freigabe der Ressource. Sie erlangen die Ressource, wenn die Variable bei der Prüfung den Wert 0 besitzt. Ergebnis: Sitzen die Prozesse auf verschiedenen CPUs invalidieren sie sich gegenseitig ihre Caches.

Und fast genau dieses Szenario findet sich, wie ich dank dem hervorragenden Kernel Log von Heise lesen durfte, im Linux Block Device Layer. Denn hier gibt es eine zentrale Request Queue, um die sich alle CPUs bemühen müssen. Das Ergebnis: Mehr als ungefähr eine Million IO-Operationen sind nicht möglich. Diese werden aber für moderne SSDs benötigt.

Die Lösung findet sich im kommenden Kernel 3.13 sowie in einer schönen Veröffentlichung: »Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems«. Sie besteht im Wesentlichen aus einem Design mit zwei Ebenen an Queues und diversen kleineren Verbesserungen, auch im Userspace. Definitiv eine Leseempfehlung mit vielen Benchmarks und Erklärungen zur Designentscheidung.

Speichere in deinen Favoriten diesen Permalink.

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

fünf × eins =