Auf dieser Seite wird beschrieben, wie Sie den NFS-Read-Ahead auf Linux-Clients optimieren, die NetApp-Volumes einbinden. Mit Read-Ahead kann der Kernel Dateiblöcke vorab abrufen, bevor eine Anwendung sie anfordert. Dadurch wird der sequenzielle Lesedurchsatz verbessert. Read-Ahead ersetzt keine Mount-Optionen oder die Optimierung der Parallelität. Konfigurieren Sie diese zuerst. Weitere Informationen finden Sie unter Linux-NFS-Clients optimieren.
Hinweis
Erfüllen Sie die folgenden Voraussetzungen, bevor Sie den NFS-Read-Ahead-Wert optimieren:
Wenn Sie die Slot-Tabelle oder Sitzungsslots optimieren möchten, führen Sie zuerst Linux NFS-Concurrency aus.
Stellen Sie das Volume mit den entsprechenden Linux-NFS-Bereitstellungsoptionen bereit, einschließlich
rsize. Weitere Informationen finden Sie unter Linux-NFS-Bereitstellungsoptionen.Stellen Sie die Read-Ahead-Funktion nach der Bereitstellung des Volumes ein.
Übersicht zu Read-Ahead
Wenn eine Anwendung eine Datei sequenziell liest, kann der Linux-NFS-Client zusätzliche Daten über den aktuellen Lesevorgang hinaus anfordern. Dadurch wird die Netzwerklatenz verborgen und der Durchsatz für sequenzielle Arbeitslasten wie die Wiedergabe von Protokollen, Media-Streaming, das Kopieren von Massendaten und einige Analysen erhöht.
Read-Ahead wird pro Mount-Point konfiguriert. Es ist für Arbeitslasten mit zufälligen Lesevorgängen weniger effektiv als für Arbeitslasten mit sequenziellen Lesevorgängen.
Standardeinstellungen und „rsize“
Bei vielen Linux-Distributionen wird der Read-Ahead-Wert auf etwa das 15-Fache von rsize festgelegt. Einige Distributionen verwenden unabhängig von rsize einen festen Read-Ahead von 128 KiB, was die Leistung bei sequenziellen Lesevorgängen nach einem Upgrade verringern kann. Prüfen Sie den aktuellen Wert in Ihrem bereitgestellten Dateisystem, bevor Sie ihn ändern.
Read-Ahead für eine Bereitstellung ansehen
Jeder NFS-Mount-Point hat ein entsprechendes Sicherungsblockgerät unter /sys/class/bdi/. Führen Sie die folgenden Schritte aus, um die Sicherungsblockgeräte-ID (Backing Block Device Identifier, BDI) zu ermitteln und den aktuellen read_ahead_kb-Wert aufzurufen:
Suchen Sie in
/proc/self/mountinfonach dem Mount und notieren Sie sich die BDI-ID im dritten Feld.Lesen Sie den Wert in Kilobyte:
cat /sys/class/bdi/BDEV/read_ahead_kb
Read-Ahead-Wert auswählen
Verwenden Sie die folgenden Richtlinien, um einen geeigneten Read-Ahead-Wert für Ihre Arbeitslast auszuwählen:
Wenn Sie keine maximale Leistung benötigen, behalten Sie die Standardeinstellung Ihrer Distribution bei und optimieren Sie den Read-Ahead-Wert nicht.
Beginnen Sie mit 15 Mal
rsize(in KiB), wenn Ihre Distribution den Wert nicht mehr automatisch festlegt.Für
rsize=1048576(1 MiB) entspricht das 15-fache vonrsizeungefähr 15.360 KiB (15 MiB).Erhöhen oder verringern Sie den Wert schrittweise und messen Sie die Leistung mit Ihrer Anwendung und
nfsiostat. Testen Sie Werte, die größer als 15.360 KiB sind, bevor Sie sie in der Produktion verwenden.
Read-Ahead interagiert mit dem Seitencache. Arbeitslasten, die den Cache umgehen (O_DIRECT), profitieren nicht von Read-Ahead wie sequenzielle Cache-Lesevorgänge.
Read-Ahead-Funktion auch nach Neustarts beibehalten
Dynamische Änderungen gelten, bis Sie die Bereitstellung aufheben oder einen Neustart durchführen. Damit diese Änderungen für NFS-Mounts beibehalten werden, erstellen Sie eine udev-Regel.
Erstellen Sie
/etc/udev/rules.d/99-nfs-readahead.rulesund passen Sie den Wertread_ahead_kbnach Bedarf an:SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="/usr/bin/awk -v bdi=$kernel 'BEGIN{ret=1} {if ($4 == bdi) {ret=0}} END{exit ret}' /proc/fs/nfsfs/volumes", ATTR{read_ahead_kb}="15360"Verwenden Sie im Attribut
PROGRAM=einen absoluten Pfad zuawkauf Ihrem System.Laden Sie
udevneu:sudo udevadm control --reload
Hängen Sie die NFS-Volumes neu ein oder starten Sie den Server neu, um die Regeln für neue BDI-Geräte auszulösen.
Testen Sie die udev-Regeln zuerst auf einem Nichtproduktionshost. Falsche Regeln können sich auf Nicht-NFS-Blockgeräte auswirken, wenn der Abgleichsausdruck falsch ist.
Anleitung für Arbeitslasten
Beachten Sie beim Optimieren von Read-Ahead die folgenden Richtlinien, die auf Ihrem Arbeitslasttyp basieren:
Zufällige Lesevorgänge (OLTP, kleine zufällige E/A): Behalten Sie den Standardwert für Read-Ahead bei.
Sequenzielle Lesevorgänge (Media, Bulk-Kopien und einige Hochleistungs-Computing-Vorgänge): Erhöhe den Wert auf das 15-Fache von
rsizeund miss.Gemischt: Nur optimieren, wenn das Profiling einen Engpass beim sequenziellen Lesen zeigt.
Niedriger
rsize(64 KiB) mit einem standardmäßigen Read-Ahead von 128 KiB: Erwägen Sie, den Read-Ahead auf 960 KiB oder höher zu erhöhen.
Kombinieren Sie die Read-Ahead-Optimierung mit geeigneten rsize-, nconnect- und Parallelitätseinstellungen.