Dela via


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
1 024 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 versioner 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.

Fördelning Frisläpp Blockerar läsning framåt
RHEL (Red Hat Enterprise Linux) 8.3 128 KiB
RHEL (Red Hat Enterprise Linux) 7.X, 8.0, 8.1, 8.2 15 X rsize
SLES (Sodium Laureth Sulfate) 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 tillhandahålls följande bash-skript skrivet av Red Hat för att visa eller dynamiskt ställa in läs-framåt för mängden NFS-filsystem.

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:

  1. 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"
    
  2. Tillämpa regeln udev :

       sudo udevadm control --reload
    

Nästa steg