Login
Newsletter
Di, 15. Juli 2014, 14:00

SSD-Leistung optimieren

Der Linux-Kernel bietet für die Organisation von Datenträgerzugriffen verschiedene I/O-Scheduler. Beim Einsatz von SSDs hat die richtige Wahl des Schedulers Einfluss auf die Performance.

Das I/O-Subsystem, das Lese- und Schreibzugriffe auf Datenträger regelt, ist in jedem Computersystem ein Flaschenhals, der sich besonders bei mechanischen Festplatten stark die Gesamt-Performance des Systems auswirkt. Die Laufwerkssteuerung herkömmlicher Festplatten muss bei Zugriffen den gewünschten Datensektor ausfindig machen, den zuständigen Schreib-Lese-Kopf dorthin bewegen und warten, bis der Kopf ruhig über der Spur läuft. Je nach Modell dauert dies im Mittel zwischen 3,5 und 10 Millisekunden. Sofern die angeforderten oder geschriebenen Daten nicht im Cache des Laufwerks zwischengespeichert sind, muss müssen die anderen Lese-Schreib-Anfragen an das gleiche Laufwerk des I/O-Subsystems währenddessen warten.

Ein wichtiger Faktor, der über die Performance eines Computersystems entscheidet, ist die Organisation dieser Warteschlange für Datenträgeranfragen im I/O-Scheduler. Scheduler sind kein alleiniges Merkmal von Linux, sondern Bestandteil aller Betriebssysteme. Intelligente Scheduler versuchen, alle Operationen in eine optimale Reihenfolge zu bringen, damit Schreib-Lese-Köpfe zur Neupositionierung möglichst kurze Wege zurücklegen müssen.

Die beste Reihenfolge errechnet der Scheduler anhand der Blocknummern des Dateisystems. Schreib- und Leseanforderungen werden dann zu Gruppen mit möglichst kleinen Unterschieden bei ihren Blocknummern abgearbeitet.

Kurze Wege durch benachbarte Blöcke

David Wolski

Kurze Wege durch benachbarte Blöcke

I/O-Scheduler des Linux-Kernels

Der intelligente Scheduler, den die meisten Linux-Systeme standardmäßig nutzen, ist der »Completely Fair Scheduler« (CFQ), der bei mechanischen Festplatten beste Leistung bietet. Beim Einsatz von SSDs stellt sich hingegen die Frage, ob CFQ als Standard noch zeitgemäß ist oder nicht vielmehr die Sortierung der Zugriffe ganz dem internen Controller der SSD überlassen werden sollte. Ab Kernel 2.6.33 stehen insgesamt drei unterschiedliche Scheduler zur Auswahl, und zwei davon nehmen geringeren Einfluss auf die Reihenfolge der Datenträgerzugriffe.

NOOP: Dieser Scheduler verzichtet auf jede Eigenintelligenz und stellt die Anforderungen des I/O-Subsystems in eine einfache Warteschlange, die genau in der Reihenfolge abgearbeitet wird, in der die Anfragen eingehen.

Deadline: Dieser Scheduler sortiert Anfragen anhand ihrer Blocknummer in einer Warteschlange ein. Damit dabei aber I/O-Zugriffe mit weit auseinanderliegenden Blöcken nicht auf der Strecke bleiben, bekommt jeder wartende Zugriff noch einen fixen Zeitpunkt verpasst (Deadline), zu dem der Wartekandidat unabhängig von seiner Blocknummer an die Reihe kommt.

CFQ: Der bereits erwähnte »Completely Fair Scheduler« tut weit mehr als seine Kollegen. Er führt für laufende Prozess eine Block-Statistik, um die verfügbare I/O-Bandbreite fair auf die Prozesse aufzuteilen. Optimal ist dieses Verhalten auf dem Linux-Desktop, auf dem es nicht um die maximalen Durchsatzraten für einzelne Programme geht, sondern um ein ausgeglichenes Antwortverhalten beim Multitasking.

Performance von Schreibzugriffen: Im Test mit IOzone wurde die Schreibrate mit verschiedenen Schedulern getestet. Deadline hatte in diesen Tests die Nase vorn (SSD: Intel X25-V 40 GB)

David Wolski

Performance von Schreibzugriffen: Im Test mit IOzone wurde die Schreibrate mit verschiedenen Schedulern getestet. Deadline hatte in diesen Tests die Nase vorn (SSD: Intel X25-V 40 GB)

Der richtige Scheduler für verschiedene Aufgaben

Während der CFQ-Scheduler für Desktop-Systeme mit mechanischen Platten ideal ist, empfehlen die Kernel-Entwickler für Server den Deadline-Scheduler. Dieser bietet die geringste Latenz pro Prozess, was besonders Web- und Datenbankservern zugutekommt.

Seit dem Einzug von SSDs auf Desktop-Systemen, auf welchen die Umverteilung von CFQ unnötig erscheint, wird Deadline aber auch für diesen Einsatzzweck mehr Interesse zuteil. So wechselten Ubuntu 13.10 und damit auch Mint 16 von CFQ zu Deadline als Standard, egal, welche Art von Datenträger im System vorhanden ist. Das I/O-Subsystem des Linux-Kernels kann jedem Laufwerk einen eigenen Scheduler zuweisen. Um zu sehen, welcher Typ auf einem Laufwerk zuständig ist, dient im Terminal dieser Befehl:

cat /sys/block/sda/queue/scheduler

Der in eckigen Klammern angezeigte Scheduler in der Ausgabe des Befehls ist auf dem abgefragten Laufwerk (hier sda) aktiv, beispielsweise wäre dies unter Ubuntu 13.10 stets Deadline.

Um den Scheduler permanent zu ändern, bieten sich unter Linux verschiedene Wege an. Eine Möglichkeit, den Standard festzulegen, bietet der Kernel-Parameter elevator=[scheduler], der in Grub 2 über dessen Konfigurationsdatei /etc/default/grub mit der Zeile GRUB_CMDLINE_LINUX= festgelegt wird.

Asynchrone Zugriffe: Für diesen Benchmark simuliert AIO-Stress die Datenträgerzugriffe von mehreren geöffneten Programmen. CFQ meistert diese Situation am besten (SSD: Intel X25-V 40 GB)

David Wolski

Asynchrone Zugriffe: Für diesen Benchmark simuliert AIO-Stress die Datenträgerzugriffe von mehreren geöffneten Programmen. CFQ meistert diese Situation am besten (SSD: Intel X25-V 40 GB)

Es ist aber einfacher, den Scheduler pro Laufwerk mit den Sysfsutils zu definieren. Dazu dient das Paket »sysfsutils«, das in allen verbreiteten Distributionen über den Paketmanager zur Verfügung steht und in Debian/ Ubuntu/Mint mit

sudo apt-get install sysfsutils

installiert wird. Anschließend öffnen Sie mit root-Rechten oder mit sudo die noch leere Konfigurationsdatei /etc/sysfs.conf in einem Texteditor. Soll der Scheduler von /dev/sda auf CFQ geändert werden, tragen Sie dort diese Zeile ein:

block/sda/queue/scheduler = cfq

Genauso können Sie für /dev/sdb mit block/sdb/queue/scheduler = einen anderen Scheduler festlegen. Als Angabe stehen hier »cfq«, »deadline« und »noop« zur Auswahl, und es ist ein Mischbetrieb möglich.

Leistungstests und Fazit

Für einen empirischen Test ließen wir alle Scheduler auf einem Desktop-System mit Ubuntu 13.10 antreten, das ausschließlich eine SSD als Datenträger nutzt. Dieser Aufbau entspricht heute typischen Notebooks. Der erste Langzeittest erfolgte mit IOzone, das verschiedene Schreibzugriffe ausführt. Deadline liefert bei diesem Benchmark deutlich bessere Werte. In einem zweiten Test mit AIO-Stress wurden die asynchronen Schreib- und Lese-Anforderungen von mehreren geöffneten Programmen getestet. In diesem Benchmark, der einem typischen Desktop-System näherkommt, ist wiederum CFQ überlegen.

Ein Wechsel zu Deadline bringt also auf Desktop-Systemen auch beim Einsatz von SSDs keinen Leistungsschub, und somit bleibt CFQ der empfehlenswerte Scheduler für Linux-Desktops. Deadline erscheint dagegen für Server geeignet, auf welchen wenige Prozesse eine hohe I/O-Last erzeugen. Die Beobachtung deckt sich übrigens mit der Empfehlung für Red Hat für die Wahl eines I/O-Schedulers auf Servern. Deren englischsprachige Zusammenfassung dazu ist auf www.redhat.com nachzulesen.

Ubuntu- und Mint-Anwender, die den PC hauptsächlich für Desktop-Aufgaben nutzen, sollten in Betracht ziehen, zu CFQ zurückzukehren.

Dieser Artikel stammt von unserem Kooperationspartner PC-WELT.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten