Bewährte Methoden für NFS-Read-Ahead unter Linux für Azure NetApp Files
Dieser Artikel enthält Informationen und bewährte Methoden zum Dateisystemcache für Azure NetApp Files.
Beim NFS-Read-Ahead werden Blöcke aus einer Datei vorausschauend angefordert, bevor E/A-Anforderungen durch die Anwendung eingehen. Diese Funktion wurde entwickelt, um den sequenziellen Lesedurchsatz des Clients zu verbessern. Bis vor Kurzem haben alle modernen Linux-Distributionen den Read-Ahead-Wert auf das 15-Fache von rsize
des bereitgestellten Dateisystems festgelegt.
Die folgende Tabelle zeigt die standardmäßigen Read-Ahead-Werte für jede angegebene rsize
-Bereitstellungsoption.
rsize des bereitgestellten Dateisystems |
Im Voraus gelesene Blöcke |
---|---|
64 KiB | 960 KiB |
256 KiB | 3.840 KiB |
1.024 KiB | 15.360 KiB |
Mit RHEL 8.3 und Ubuntu 18.04 wurden Änderungen eingeführt, die die Leistung sequenzieller Lesevorgänge auf Clients beeinträchtigen können. Im Gegensatz zu früheren Versionen legen diese Distributionen den Read-Ahead-Wert unabhängig von der verwendeten rsize
-Bereitstellungsoption auf 128 KiB fest. Bei einem Upgrade von Releases mit dem größeren Read-Ahead-Wert auf Releases mit dem Standardwert von 128 KiB wurde bei sequenziellen Lesevorgängen ein Leistungsabfall festgestellt. Read-Ahead-Werte können jedoch sowohl dynamisch als auch dauerhaft erhöht werden. Beispielsweise wurde bei Tests mit SAS GRID der Lesewert von 15.360 KiB im Vergleich zu 3.840 KiB, 960 KiB und 128 KiB als optimal befunden. Über 15.360 KiB hinaus wurden nicht genügend Tests ausgeführt, um positive oder negative Auswirkungen zu ermitteln.
In der folgenden Tabelle sind die Read-Ahead-Standardwerte für jede zurzeit verfügbare Distribution aufgeführt.
Distribution | Release | Im Voraus gelesene Blöcke |
---|---|---|
RHEL | 8.3 | 128 KiB |
RHEL | 7.X, 8.0, 8.1, 8.2 | 15 × rsize |
SLES | 12.X – mindestens 15SP2 | 15 × rsize |
Ubuntu | 18.04 – mindestens 20.04 | 128 KiB |
Ubuntu | 16.04 | 15 × rsize |
Debian | Bis zu 10 und zugehörige Nebenversionen | 15 × rsize |
Arbeiten mit Read-Ahead pro NFS
NFS-Read-Ahead wird am Bereitstellungspunkt für ein NFS definiert. Die Standardeinstellung kann angezeigt und sowohl dynamisch als auch dauerhaft festgelegt werden. Der Einfachheit halber wurde das folgende von Red Hat geschriebene Bash-Skript zur Verfügung gestellt, um Read-Ahead für ein bereitgestelltes NFS anzuzeigen oder dynamisch festzulegen.
Read-Ahead kann entweder dynamisch pro NFS-Bereitstellung mithilfe des folgenden Skripts oder dauerhaft anhand von udev
-Regeln definiert werden, wie in diesem Abschnitt gezeigt. Um Read-Ahead für ein bereitgestelltes NFS anzuzeigen oder festzulegen, können Sie das folgende Skript als Bash-Datei speichern, die Berechtigungen der Datei so ändern, dass sie ausgeführt werden kann (chmod 544 readahead.sh
), und sie wie gezeigt ausführen.
Anzeigen oder Festlegen von Read-Ahead-Werten
Führen Sie den folgenden Befehl aus, um den aktuellen Read-Ahead-Wert (in KiB) zu zeigen:
./readahead.sh show <mount-point>
Führen Sie den folgenden Befehl aus, um einen neuen Wert für Read-Ahead festzulegen:
./readahead.sh set <mount-point> [read-ahead-kb]
Beispiel
#!/bin/bash
# set | show readahead for a specific mount point
# Useful for things like NFS and if you do not know / care about the backing device
#
# To the extent possible under law, Red Hat, Inc. has dedicated all copyright
# to this software to the public domain worldwide, pursuant to the
# CC0 Public Domain Dedication. This software is distributed without any warranty.
# For more information, see the [CC0 1.0 Public Domain Dedication](http://creativecommons.org/publicdomain/zero/1.0/).
E_BADARGS=22
function myusage() {
echo "Usage: `basename $0` set|show <mount-point> [read-ahead-kb]"
}
if [ $# -gt 3 -o $# -lt 2 ]; then
myusage
exit $E_BADARGS
fi
MNT=${2%/}
BDEV=$(grep $MNT /proc/self/mountinfo | awk '{ print $3 }')
if [ $# -eq 3 -a $1 == "set" ]; then
echo $3 > /sys/class/bdi/$BDEV/read_ahead_kb
elif [ $# -eq 2 -a $1 == "show" ]; then
echo "$MNT $BDEV /sys/class/bdi/$BDEV/read_ahead_kb = "$(cat /sys/class/bdi/$BDEV/read_ahead_kb)
else
myusage
exit $E_BADARGS
fi
Dauerhaftes Festlegen von Read-Ahead für NFS-Bereitstellungen
Zum dauerhaften Festlegen von Read-Ahead für NFS-Bereitstellungen können udev
-Regeln wie folgt geschrieben werden:
Erstellen und testen Sie
/etc/udev/rules.d/99-nfs.rules
:SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="<absolute_path>/awk -v bdi=$kernel 'BEGIN{ret=1} {if ($4 == bdi) {ret=0}} END{exit ret}' /proc/fs/nfsfs/volumes", ATTR{read_ahead_kb}="15380"
Wenden Sie die
udev
-Regel an:sudo udevadm control --reload
Nächste Schritte
- Bewährte Methoden in Bezug auf direkte E/A unter Linux für Azure NetApp Files
- Bewährte Methoden in Bezug auf den Linux-Dateisystemcache für Azure NetApp Files
- Einbindungsoptionen für NFS unter Linux: bewährte Methoden für Azure NetApp Files
- Bewährte Methoden für die Linux-Parallelität
- Bewährte Methoden für SKUs für virtuelle Azure-Computer
- Leistungsbenchmarks für Linux