Procedimientos recomendados de lectura anticipada de NFS de Linux para Azure NetApp Files
Este artículo le ayuda a comprender los procedimientos recomendados de caché del sistema de archivos para Azure NetApp Files.
La lectura anticipada de NFS solicita de forma predictiva bloques de un archivo antes de las solicitudes de E/S de la aplicación. Está diseñado para mejorar el rendimiento de lectura secuencial del cliente. Hasta hace poco, en todas las distribuciones modernas de Linux se establecía la lectura anticipada en un valor equivalente a 15 veces el de los sistemas de archivos montados rsize
.
En la tabla siguiente se muestran los valores de lectura anticipada predeterminados para cada opción de montaje rsize
determinada.
Sistema de archivos montado rsize |
Bloquea la lectura anticipada |
---|---|
64 KiB | 960 KiB |
256 KiB | 3840 KiB |
1024 KiB | 15 360 KiB |
En RHEL 8.3 y Ubuntu 18.04 se han introducido cambios que podrían afectar negativamente al rendimiento de lectura secuencial del cliente. A diferencia de las versiones anteriores, en estas distribuciones se establece la lectura anticipada en un valor predeterminado de 128 KiB, independientemente de la opción de montaje rsize
que se use. La actualización desde versiones con un valor de lectura anticipada mayor a las que tienen el valor predeterminado de 128 KiB ha experimentado una disminución en el rendimiento de la lectura secuencial. Pero los valores de lectura anticipada se pueden ajustar hacia arriba de forma dinámica y persistente. Por ejemplo, las pruebas con SAS GRID han demostrado que el valor de lectura de 15 360 KiB es óptimo en comparación con 3840 KiB, 960 KiB y 128 KiB. No se han ejecutado pruebas suficientes más allá de 15 360 KiB para determinar el impacto positivo o negativo.
En la tabla siguiente se muestran los valores de lectura anticipada predeterminados para cada opción distribución disponible actualmente.
Distribución | Versión | Bloquea la lectura anticipada |
---|---|---|
RHEL | 8.3 | 128 KiB |
RHEL | 7.X, 8.0, 8.1, 8.2 | 15 X rsize |
SLES | 12.X: al menos 15SP2 | 15 X rsize |
Ubuntu | 18.04: al menos 20.04 | 128 KiB |
Ubuntu | 16.04 | 15 X rsize |
Debian | Hasta 10 como mínimo | 15 x rsize |
Procedimiento para trabajar con la lectura anticipada por sistema de archivos NFS
La lectura anticipada de NFS se define en el punto de montaje para un sistema de archivos NFS. La configuración predeterminada se puede ver y establecer de forma dinámica y persistente. Para mayor comodidad, se ha proporcionado el siguiente script de Bash escrito por Red Hat para ver o configurar de forma dinámica la lectura anticipada por cada sistema de archivos NFS montado.
La lectura anticipada se puede definir dinámicamente por montaje de NFS mediante el siguiente script, o bien de forma persistente mediante reglas udev
, como se muestra en esta sección. A fin de mostrar o establecer la lectura anticipada para un sistema de archivos NFS montado, puede guardar el siguiente script como un archivo de Bash, modificar los permisos del archivo para convertirlo en ejecutable (chmod 544 readahead.sh
) y realizar la ejecución como se muestra.
Procedimiento para mostrar o establecer valores de lectura anticipada
Para mostrar el valor de lectura anticipada actual (el valor devuelto está en KiB), ejecute el comando siguiente:
./readahead.sh show <mount-point>
Para establecer un nuevo valor para la lectura anticipada, ejecute el siguiente comando:
./readahead.sh set <mount-point> [read-ahead-kb]
Ejemplo
#!/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
Procedimiento para establecer de forma persistente la lectura anticipada para montajes NFS
A fin de establecer de forma persistente la lectura anticipada para montajes NFS, se pueden escribir reglas udev
de la siguiente manera:
Cree y pruebe
/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"
Aplique la regla
udev
:sudo udevadm control --reload
Pasos siguientes
- Procedimientos recomendados de E/S directa de Linux para Azure NetApp Files
- Procedimientos recomendados de caché del sistema de archivos de Linux para Azure NetApp Files
- Procedimientos recomendados de las opciones de montaje de NFS de Linux para Azure NetApp Files
- Procedimientos recomendados de simultaneidad de Linux
- Procedimientos recomendados de las SKU de máquinas virtuales de Azure
- Bancos de pruebas de rendimiento para Linux