Open Source im professionellen Einsatz
Linux-Magazin 04/2016
© psdesign1, Fotolia

© psdesign1, Fotolia

Kernel- und Treiberprogrammierung mit dem Linux-Kernel – Folge 85

Kern-Technik

,

Zwar kann der Linux-Kernel SSDs der Einfachheit halber wie konventionelle Festplatten ansprechen, schöpft damit die mechanikfreien Blockgeräte aber nicht annähernd aus. Seit einem Umbau ist Linux bereit für die neue Technik. Mehr noch: Die Entwickler würden gern den Job der Firmware übernehmen.

873

Mehr als zwei Jahrzehnte lang hat die von Linus Torvalds angeführte Truppe Code optimiert, damit Linux klassische Festplatten optimal handhabt. Die Schwächen in der Technologie machte es den Entwicklern nicht leicht: rotierende und darum stoßempfindliche Platten, mechanisch aufwändig zu positionierende Köpfe, wechselnde Transferraten, modellabhängige Cachingstrategien, die hohen Latenzzeiten beim Lesen und Schreiben von rückwärtigen Daten sowie Integritätsprobleme wegen des verzögerten Schreibens.

Das Resultat sind auf Magnetplatten optimierte Dateisysteme, diverse Caches und passende I/O-Schedulingmechanismen. Damit hält der Kernel I/O-Aufträge zurück, sortiert sie um und reicht sie erst im geeigneten Moment an die drehenden Scheiben weiter.

Flashspeicher kommen dagegen ohne mechanische Komponenten aus, und die Latenzzeiten bewegen sich statt im Millisekunden- im Mikrosekunden-Bereich. Kann das Betriebssystem pro Sekunde mehrere Hundert I/O-Zugriffe (IOPS) auf eine Festplatte absetzen, sind es bei einer SSD mehrere Hunderttausend und im Idealfall bis zu 15 Millionen.

Flashmemory liest und schreibt Daten unabhängig von der Position im Speicher gleich schnell, fragmentiert abgelegte Daten bedeuten keine Performance-Einbußen mehr. Andererseits lassen sich die einzelnen Speicherblöcke eines Flashspeichers nicht beliebig oft beschreiben. Technisch besteht das Schreiben aus dem Löschen eines Blockes und dem nachfolgenden Rücksetzen einzelner Bits.

Der Flash Translation Layer

Die Hersteller begegnen den Flash-Eigenheiten in ihren Solid State Drives (SSDs) mit einer Softwareschicht (Flash Translation Layer, FTL), die auf dem SSD-Controller läuft. Sie vermeidet das häufige Schreiben von einzelnen Blöcken und bringt ein ausgefuchstes Bad-Block-Management mit. Es ersetzt als fehlerhaft erkannte Blöcke durch Reserveblöcke – von denen die SSD eine ausreichend große Anzahl vorhält.

Mit einem SATA-Hardware-Interface ausgestattet, haben die Hersteller unter dem Diktat der Kompatibilität Solid State Drives hergestellt, die sich von den alten Festplatten im Wesentlichen nur durch ihre erheblich besseren Zugriffszeiten auszeichnen. Praktisch für den Anwender: Die neue schnelle Hardware funktioniert mit der bewährten Systemsoftware.

Entschlackungskur

Die jahrelangen Forschungs-, Test- und Implementierungsarbeiten am Festplatten-Subsystem verlieren mit dem Aufkommen von Flashspeichern, insbesondere von SSDs, an praktischer Bedeutung. Der Kernel für Rechner ohne konventionelle Festplatte lässt sich um einen gehörigen Batzen Code entschlacken und damit natürlich beschleunigen.

Andererseits vermag die Firmware der SSDs prinzipbedingt keine hundertprozentige Kompatibilität zu konventionellen Festplatten herzustellen: Ob ein Block auf dem Speichermedium noch belegt ist oder nicht, wissen nur das Betriebssystem oder das konkrete Dateisystem – unter Linux zumeist Ext 4. Aus diesem Grund muss Linux der SSD allwöchentlich per Trim-Kommando die nicht mehr verwendeten Blöcke mitteilen (Abbildung 1). Ob SSDs im System vorhanden sind, lässt sich im Sys-Filesystem herausfinden (Abbildung 2).

Abbildung 1: In wöchentlichem Abstand teilt Linux der SSD die nicht mehr genutzten Blöcke mit.
Abbildung 2: Ist der Inhalt der Pseudodatei rotational gleich null, handelt es sich um einen Flashspeicher.

Das große Potenzial der Flashspeichertechnik schöpft der Festplatten-Kompatibilitätsmodus jedoch bei Weitem nicht aus. Die Kernelentwickler arbeiten seit einigen Jahren eng mit SSD-Herstellern zusammen, um mehr Effizienz zu erreichen. Neben mehreren kleineren Maßnahmen unterstützt der Kernel hochperformante Solid State Drives mit drei Technologien: durch den Multiqueue-Blocklayer, durch Polling für Blockgeräte sowie für Open-Channel-SSDs durch Light NVM (Abbildung 3).

Während die beiden letzten Technologien erst kürzlich mit Kernel 4.4 den Weg in den Betriebssystemkern fanden, feierte der Multiqueue-Blocklayer bereits mit Version 3.13 sein Debüt [1]. Traditionell sequenzialisiert der Blocklayer I/O-Aufträge an die Festplatte (siehe Kasten "Das Blockgeräte-Subsystem"). Der Multiqueue-Blocklayer bietet zusätzlich die Möglichkeit der Parallelverarbeitung. Das ist aus zwei Gründen bedeutsam: Erstens arbeiten hochperformante SSDs mehrere I/O-Aufträge parallel ab, und zweitens sind moderne Systeme zunehmend Multicore.

Abbildung 3: Linux bedient konventionelle Festplatten mit einer Warteschlange (oben links), SSDs steuert es über seinen Multiqueue-Blocklayer an (oben rechts).

Das Blockgeräte-Subsystem

Festplatten, DVD- und CD-ROM-Laufwerke, USB-Sticks, Speicherkarten und eben auch SSDs arbeiten grundsätzlich blockweise. Selbst wenn die CPU nur ein einzelnes Byte von einem solchen Gerät lesen möchte, bekommt sie einen ganzen Block geliefert, klassischerweise 512 Byte. Das Betriebssystem fordert einen Block über dessen Blocknummer an, während die Anwender auf logischer Ebene Dateisysteme mit Verzeichnissen und Dateien sehen.

Das Umsetzen von einem Dateinamen zu den physischen Blocknummern ebenso wie den eigentlichen Zugriff erledigt das Blockgeräte-Subsystem. Die für normale Festplatten generierten I/O-Aufträge schreibt der Singlequeue-Blocklayer in eine für die Festplatte reservierte Queue. Die dort eine Zeitlang gesammelten Aufträge sortiert ein I/O-Scheduling-Algorithmus um und fasst sie so zusammen, dass die Festplatte mit ihren drehenden Magnetscheiben die Blöcke möglichst effizient lesen beziehungsweise speichern kann.

Die Festplatte ihrerseits transferiert die Daten typischerweise per DMA in den RAM und löst dann einen Interrupt aus. Die Interrupt-Service-Routine weckt am Ende die Applikationen, welche die Daten angefordert hatten. Wie leicht nachzuvollziehen ist, bildet die Auftrags-Queue pro Festplatte einen Engpass. Denn die Queue verhindert, dass das System mit einer zunehmenden Anzahl von Prozessorkernen (Multi- und Manycore-Systeme) skaliert, weil das System das parallele Zugreifen über Spinlocks verhindern muss.

Je mehr Prozesse zugreifen, desto häufiger entstehen Wartezeiten, wie die Messungen von Blockgeräte-Subsystem-Maintainer Jens Axboe eindrucksvoll zeigen. Selbst auf einer idealisierten Festplatte mit optimalen Eigenschaften konnte Axboe auf einem hochperformanten Rechner nicht mehr als eine Million I/O-Aufträge pro Sekunde absetzen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Kern-Technik

    Mit dem Anticipatory-IO-Scheduler greift der Linux-Kernel vorausschauend und damit recht effektiv auf Festplatten zu. Der brandneue CFQ-IO-Scheduler tritt als ambitionierter Konkurrent auf. Der Artikel erklärt die Arbeitsweise beider Zugriffsstrategien und zeigt, worin sie sich unterscheiden.

  • Kernel-News

    Im letzten legten Entwickler die Grundlage, im neuen Kernel 4.12 landen nun mit BFQ und dem Kyber I/O Scheduler zwei neue Terminplaner für Datenzugriffe auf Speichergeräte. Arbeit floss auch in den Vega-Support des AMDGPU-Treibers, zudem kommt Linux jetzt mit USB-Typ-C-Geräten klar.

  • Kern-Technik

    Der Blockdevice-Layer ist das Arbeitspferd bei Linux, was die Datenbeschaffung angeht - von der Festplatte bis zur Anwendung ist es ein langer Weg. Der I/O-Scheduler behält dabei den Überblick.

  • Kern-Technik

    Die Geräteklasse der Blockdevices bildet die Grundlage für Filesysteme. Diese Kern-Technik-Folge erklärt die Treiberkomponenten und zeigt die Implementierung einer RAM-Disk als Beispiel für das neue Blockgeräte-Interface in Kernel 2.6.

  • Kern-Technik

    Bei Linux 2.6.10 kann der Anwender über die Auswahl von IO-Schedulern bestimmen, wie der Kernel auf Festplatten zugreift. Wer weiß, wie sie intern funktionieren, passt das System optimal an die eigene Anwendung an. Zur Laufzeit lassen sich die IO-Scheduler über das SysFS austauschen und einstellen.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.