Condividi tramite


Procedure consigliate per Linux NFS read-ahead per Azure NetApp Files

Questo articolo illustra le procedure consigliate per la cache del file system per Azure NetApp Files.

Le richieste NFS read-ahead in modo predittivo si bloccano da un file in anticipo rispetto alle richieste di I/O dall'applicazione. È progettato per migliorare la velocità effettiva di lettura sequenziale del client. Fino a poco tempo fa, tutte le distribuzioni linux moderne impostano il valore read-ahead equivalente a 15 volte i file system montati rsize.

La tabella seguente mostra i valori di read-ahead predefiniti per ogni opzione di montaggio specificata rsize .

File system montato rsize Blocchi in lettura/avanti
64 KiB 960 KiB
256 KiB 3.840 KiB
1.024 KiB 15.360 KiB

RHEL 8.3 e Ubuntu 18.04 hanno introdotto modifiche che potrebbero influire negativamente sulle prestazioni di lettura sequenziale del client. A differenza delle versioni precedenti, queste distribuzioni impostano read-ahead su un valore predefinito di 128 KiB indipendentemente dall'opzione rsize di montaggio usata. L'aggiornamento dalle versioni con il valore read-ahead più grande alle versioni con il valore predefinito 128-KiB ha riscontrato una riduzione delle prestazioni di lettura sequenziale. Tuttavia, i valori read-ahead possono essere ottimizzati verso l'alto in modo dinamico e persistente. Ad esempio, il test con SAS GRID ha trovato il valore di lettura di 15.360 KiB ottimale rispetto a 3.840 KiB, 960 KiB e 128 KiB. Test non sufficienti sono stati eseguiti oltre 15.360 KiB per determinare un impatto positivo o negativo.

Nella tabella seguente vengono illustrati i valori di read-ahead predefiniti per ogni distribuzione attualmente disponibile.

Distribuzione Rilascio Blocchi in lettura/avanti
RHEL 8.3 128 KiB
RHEL 7.X, 8.0, 8.1, 8.2 15 X rsize
SLES 12.X - almeno 15SP2 15 X rsize
Ubuntu 18.04 - almeno 20.04 128 KiB
Ubuntu 16.04 15 X rsize
Debian Fino a almeno 10 15 x rsize

Come usare il file system per NFS read-ahead

NFS read-ahead viene definito nel punto di montaggio per un file system NFS. L'impostazione predefinita può essere visualizzata e impostata in modo dinamico e permanente. Per praticità, viene fornito lo script Bash seguente scritto da Red Hat per la visualizzazione o l'impostazione dinamica di read-ahead per il file system NFS.

È possibile definire read-ahead in modo dinamico per ogni montaggio NFS usando lo script seguente o usando udev in modo permanente le regole, come illustrato in questa sezione. Per visualizzare o impostare read-ahead per un file system NFS montato, è possibile salvare lo script seguente come file bash, modificare le autorizzazioni del file per renderlo eseguibile (chmod 544 readahead.sh) ed eseguirlo come illustrato.

Come visualizzare o impostare valori read-ahead

Per visualizzare il valore read-ahead corrente (il valore restituito è in KiB), eseguire il comando seguente:

   ./readahead.sh show <mount-point>

Per impostare un nuovo valore per read-ahead, eseguire il comando seguente:

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

Esempio

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

Come impostare in modo permanente read-ahead per i montaggi NFS

Per impostare in modo permanente read-ahead per i montaggi NFS, udev le regole possono essere scritte come segue:

  1. Creare e testare /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. Applicare la udev regola:

       sudo udevadm control --reload
    

Passaggi successivi