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:
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"
Applicare la
udev
regola:sudo udevadm control --reload
Passaggi successivi
- Procedure consigliate per l'I/O diretto di Linux per Azure NetApp Files
- Procedure consigliate per la cache del file system Linux per Azure NetApp Files
- Procedure consigliate per le opzioni di montaggio NFS di Linux per Azure NetApp Files
- Procedure consigliate per la concorrenza linux
- Procedure consigliate per gli SKU delle macchine virtuali di Azure
- Benchmark delle prestazioni per Linux