Linux Fileserver Optimierung

Das System ist eingerichtet und hat alle geforderten Funktionen, aber nach einigen Wochen wird die Last so hoch, dass der Server die meiste Zeit mit Warten auf die E/A-Hardware verbringt. Das Budget ist schon ausgereizt, zusätzliche Leistung wird trotzdem benötigt. Aber woher nehmen?

Hier meine Erfahrungswerte aus den letzten Jahren, was unter Linux auf einem Fileserver mit hauptsächlich sequentiellem Zugriff Sinn machen kann.

Der Server läuft unter Debian GNU/Linux, die Daten sind in einem Software-RAID5 mit dem Dateisystem XFS organisiert und per Gigabit-Ethernet angebunden. Zugriffe sind meist entweder lesend-sequentiell in der Größenordnung von 200 bis 12.000 MByte für wenige Clients oder schreibend-zufällig von zwei dutzend Prozessen auf dem Server selbst in der Größenordnung von 256 bis 4.096 KByte.

 

 

Tip 1: Zugriffszeit bei lesenden Operation nicht schreiben
Die Voreinstellung in Linux ist es, die Zugriffszeit auch bei nur lesendem Zugriff zu speichern. Wenn auf die Zugriffszeit beim lesen verzichtet werden kann, wie z.B. bei Webservern oder nur lesend freigegebenen Daten auf einem Fileserver, kann darauf verzichtet werden um die Geschwindigkeit messbar zu steigern. Dafür in der Datei /etc/fstab in der Spalte options für das Dateisystem die Option noatime zu ergänzen. Die Änderung ist nach einem Neustart aktiv. Kann der Server nicht neugestartet werden, ist es auch möglich im Einzelbenutzermodus (Befehl # init 1) und nach Beenden aller Prozesse, die auf das Dateisystem zugreifen mit dem Befehl mount -o remount,defaults,noatime Dateisystem die Änderung zu aktivieren.

Weitere Informationen zu „noatime“ (TLDP-Projekt, Englisch)
„noatime“ impliziert „nodiratime“ (Linux Kernel Mailingliste, Englisch)

 

 

Tip 2: XFS-Dateisystem regelmäßig deframentieren
Bei vielen parallel-schreibenden Zugriffen kann über mehrere Monate das XFS-Dateisystem stark fragmentiert werden. Darum kann es sinnvoll sein, in regelmäßigen Intervallen das Dateisystem zu defragmentieren. Die aktuelle Fragmentierung lässt sich mittel xfs_db -r -c frag Dateisystem bestimmen. Um ein XFS-Dateisystem unter Debian zu defragmentieren ist das Progamm xfs_fsr aus dem Paket xfsdump notwendig. Die Defragmentierung kann im laufenden Betrieb (z.B. Nachts per cron) gestartet werden und defragmentiert nur Daten, auf die gerade nicht zugegriffen wird. In der Voreinstellung läuft xfs_fsr für zwei Stunden.

Artikel zur XFS-Defragmentierung (Linux.com, Englisch)

 

 

Tip 3: E/A-Steuerung („Scheduler“) an Zugriffe anpassen
Aktuelle Linux-Kernel verwenden in Voreinstellung den CFQ-Scheduler von Jens Axboe. Zur Auswahl stehen aber auch zweitere: „Deadline“ und „Anticipatory“. Wenn ein Muster beim Zugriff auf das Dateisystem erkennbar ist, lohnt es sich den entsprechenden Scheduler einzusetzen. Unter der beschriebenen Arbeitslast brachte (paradoxerweise) der Anticipatory-Scheduler den größten Durchsatz. Der Scheduler kann für jedes E/A-Gerät einzeln während des Betriebs gewechselt werden. Links zur Entscheidungsfindung:

Kernel-Dokumentation des Anticipatory-Schedulers (Englisch)
Anleitung zum wechseln des Schedulers (Englisch)
Beschreibung der Scheduler (Linuxwiki, Englisch)

 

 

Weiterführende Tips zur E/A-Optimierung:
E/A-Tips von IBM (Englisch)

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.