Metodtips för Linux NFS-läsning för Azure NetApp Files
Den här artikeln hjälper dig att förstå metodtips för filsystemcache för Azure NetApp Files.
NFS-läsningsförhandsbegäranden blockerar förutsägbart från en fil före I/O-begäranden från programmet. Den är utformad för att förbättra klientens sekventiella läsdataflöde. Fram till nyligen har alla moderna Linux-distributioner angett värdet read-ahead till motsvarande 15 gånger de monterade filsystemen rsize
.
I följande tabell visas standardvärden för läsning framåt för varje angivet rsize
monteringsalternativ.
Monterat filsystem rsize |
Blockerar läsning framåt |
---|---|
64 KiB | 960 KiB |
256 KiB | 3 840 KiB |
1024 KiB | 15 360 KiB |
RHEL 8.3 och Ubuntu 18.04 introducerade ändringar som kan påverka klientens sekventiella läsprestanda negativt. Till skillnad från tidigare versioner anger dessa distributioner read-ahead till standardvärdet 128 KiB oavsett vilket rsize
monteringsalternativ som används. När du uppgraderade från versioner med det större läs-framåt-värdet till dem med standardvärdet 128 KiB minskade sekventiella läsprestanda. Läs-framåt-värden kan dock justeras uppåt både dynamiskt och beständigt. Till exempel fann testning med SAS GRID läsvärdet 15 360 KiB optimalt jämfört med 3 840 KiB, 960 KiB och 128 KiB. Inte tillräckligt med tester har körts utöver 15 360 KiB för att fastställa positiv eller negativ inverkan.
I följande tabell visas standardvärden för läsning framåt för varje tillgänglig distribution.
Distribution | Version | Blockerar läsning framåt |
---|---|---|
RHEL | 8.3 | 128 KiB |
RHEL | 7.X, 8.0, 8.1, 8.2 | 15 X rsize |
SLES | 12.X – minst 15SP2 | 15 X rsize |
Ubuntu | 18,04 – minst 20,04 | 128 KiB |
Ubuntu | 16.04 | 15 X rsize |
Debian | Upp till minst 10 | 15 x rsize |
Så här arbetar du med skrivskyddat filsystem per NFS
NFS-läsning definieras vid monteringspunkten för ett NFS-filsystem. Standardinställningen kan visas och ställas in både dynamiskt och beständigt. För enkelhetens skull har följande bash-skript som skrivits av Red Hat tillhandahållits för att visa eller dynamiskt ställa in läs-framåt för det beloppsfördelade NFS-filsystemet.
Läs-framåt kan definieras antingen dynamiskt per NFS-montering med hjälp av följande skript eller beständigt med hjälp av udev
regler som visas i det här avsnittet. Om du vill visa eller ange läsbehörighet för ett monterat NFS-filsystem kan du spara följande skript som en bash-fil, ändra filens behörigheter så att den blir körbar (chmod 544 readahead.sh
) och köra som det visas.
Så här visar eller anger du läs-framåt-värden
Kör följande kommando för att visa det aktuella read-ahead-värdet (det returnerade värdet finns i KiB):
./readahead.sh show <mount-point>
Kör följande kommando för att ange ett nytt värde för läsning framåt:
./readahead.sh set <mount-point> [read-ahead-kb]
Exempel
#!/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
Så här konfigurerar du beständigt läsning för NFS-monteringar
För att beständigt ställa in läs-framåt för NFS-monteringar udev
kan regler skrivas på följande sätt:
Skapa och testa
/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"
Tillämpa regeln
udev
:sudo udevadm control --reload