Aanbevolen procedures voor lezen in Linux NFS voor Azure NetApp Files

Dit artikel helpt u inzicht te hebben in aanbevolen procedures voor de cache van het bestandssysteem voor Azure NetApp Files.

NFS-aanvragen die voorspellend worden gelezen, worden geblokkeerd vanuit een bestand vóór I/O-aanvragen door de toepassing. Het is ontworpen om de doorvoer van client sequentiële leesbewerkingen te verbeteren. Tot voor kort stellen alle moderne Linux-distributies de waarde voor lezen in op een equivalent van 15 keer de gekoppelde bestandssysteem.rsize

In de volgende tabel ziet u de standaardwaarden voor voorlezen voor elke opgegeven rsize koppelingsoptie.

Gekoppeld bestandssysteem rsize Leesbewerkingen blokkeren
64 KiB 960 KiB
256 KiB 3.840 KiB
1024 KiB 15.360 KiB

RHEL 8.3 en Ubuntu 18.04 hebben wijzigingen geïntroduceerd die de sequentiële leesprestaties van de client negatief kunnen beïnvloeden. In tegenstelling tot eerdere releases stellen deze distributies de standaardwaarde van 128 KiB in op een standaardwaarde van 128 KiB, ongeacht de rsize gebruikte koppelingsoptie. Als u een upgrade uitvoert van releases met de grotere waarde voor lezen naar versies met de standaardwaarde 128-KiB, neemt de sequentiële leesprestaties af. Leeswaarden kunnen echter dynamisch en permanent omhoog worden afgestemd. Testen met SAS GRID heeft bijvoorbeeld de 15.360-KiB-leeswaarde optimaal gevonden in vergelijking met 3.840 KiB, 960 KiB en 128 KiB. Er zijn onvoldoende tests uitgevoerd boven 15.360 KiB om positieve of negatieve impact te bepalen.

In de volgende tabel ziet u de standaardwaarden voor lezen voor elke momenteel beschikbare distributie.

Distributie Release Leesbewerkingen blokkeren
RHEL 8.3 128 KiB
RHEL 7.X, 8.0, 8.1, 8.2 15 X rsize
SLES 12.X – ten minste 15SP2 15 X rsize
Ubuntu 18.04 – ten minste 20.04 128 KiB
Ubuntu 16.04 15 X rsize
Debian Maximaal 10 15 x rsize

Werken met het bestandssysteem per NFS

NFS-leesbewerking wordt gedefinieerd op het koppelpunt voor een NFS-bestandssysteem. De standaardinstelling kan zowel dynamisch als permanent worden weergegeven en ingesteld. Voor het gemak is het volgende bash-script dat is geschreven door Red Hat opgegeven voor het weergeven of dynamisch instellen van leesbewerkingen voor het gehoeveelheid NFS-bestandssysteem.

Lezen kan dynamisch worden gedefinieerd per NFS-koppeling met behulp van het volgende script of permanent met behulp van udev regels, zoals wordt weergegeven in deze sectie. Als u de leesbewerking voor een gekoppeld NFS-bestandssysteem wilt weergeven of instellen, kunt u het volgende script opslaan als een bash-bestand, de machtigingen van het bestand wijzigen om het bestand een uitvoerbaar bestand (chmod 544 readahead.sh) te maken en zoals weergegeven uit te voeren.

Leeswaarden weergeven of instellen

Voer de volgende opdracht uit om de huidige waarde voor lezen weer te geven (de geretourneerde waarde bevindt zich in KiB):

   ./readahead.sh show <mount-point>

Voer de volgende opdracht uit om een nieuwe waarde in te stellen voor lezen:

./readahead.sh set <mount-point> [read-ahead-kb]

voorbeeld

#!/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

Permanente leesbewerking instellen voor NFS-koppeling

Regels kunnen als volgt worden geschreven om permanent lees-voor-lezen in te stellen voor NFS-koppeling udev :

  1. Maken en testen /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. Pas de udev regel toe:

       sudo udevadm control --reload
    

Volgende stappen