Práticas recomendadas de leitura antecipada do NFS do Linux para o Azure NetApp Files
Este artigo ajuda você a entender as práticas recomendadas para o cache do sistema de arquivos do Azure NetApp Files.
A leitura antecipada do NFS solicita preditivamente os blocos de um arquivo antes que o aplicativo faça solicitações de E/S. Ela foi projetada para aprimorar a taxa de transferência de leitura sequencial do cliente. Até recentemente, todas as distribuições modernas do Linux definiam o valor de leitura antecipada como equivalente a 15 vezes o valor dos sistemas de arquivos rsize
montados.
A tabela a seguir mostra os valores padrão de leitura antecipada de cada opção de montagem de rsize
fornecida.
rsize do sistema de arquivos montado |
Bloqueia a leitura antecipada |
---|---|
64 KiB | 960 KiB |
256 KiB | 3.840 KiB |
1024 KiB | 15.360 KiB |
O RHEL 8.3 e o Ubuntu 18.04 introduziram alterações que podem prejudicar o desempenho da leitura sequencial do cliente. Ao contrário das versões anteriores, essas distribuições configuram a leitura antecipada com o padrão de 128 KiB, independentemente da opção de montagem de rsize
usada. Na atualização de versões com um valor de leitura antecipada superior ao padrão de 128 KiB houve uma diminuição do desempenho da leitura sequencial. No entanto, os valores de leitura antecipada podem ser aumentados de modo dinâmico ou persistente. Por exemplo, o teste com SAS GRID encontrou o valor de leitura ideal de 15.360 KiB em comparação com 3.840 KiB, 960 KiB e 128 KiB. Não foram executados testes suficientes além de 15.360 KiB para determinar o impacto positivo ou negativo.
A tabela a seguir mostra os valores padrão de leitura antecipada de cada distribuição disponível no momento.
Distribuição | Versão | Bloqueia a leitura antecipada |
---|---|---|
RHEL | 8.3 | 128 KiB |
RHEL | 7.X, 8.0, 8.1, 8.2 | 15 x rsize |
SLES | 12.X – Pelo menos 15SP2 | 15 x rsize |
Ubuntu | 18.04 – Pelo menos 20.04 | 128 KiB |
Ubuntu | 16.04 | 15 x rsize |
Debian | Até pelo menos 10 | 15 x rsize |
Como trabalhar com a leitura antecipada do sistema de arquivos por NFS
A leitura antecipada do NFS é definida no ponto de montagem de um sistema de arquivos NFS. A configuração padrão pode ser exibida e definida de modo dinâmico e persistente. Para sua conveniência, o script do Bash a seguir escrito pelo Red Hat foi fornecido para exibição ou configuração dinâmica da leitura antecipada para o sistema de arquivos NFS.
A leitura antecipada pode ser definida de modo dinâmico por montagem do NFS usando o script a seguir ou de modo persistente usando regras de udev
, como é mostrado nesta seção. Para exibir ou definir a leitura dinâmica de um sistema de arquivos NFS montado, você pode salvar o script a seguir como um arquivo Bash, modificar as permissões do arquivo para transformá-lo em executável (chmod 544 readahead.sh
) e executá-lo como é mostrado.
Como mostrar ou definir os valores de leitura antecipada
Para mostrar o valor de leitura antecipada atual (o valor retornado está em KiB), execute o seguinte comando:
./readahead.sh show <mount-point>
Para definir um novo valor para a leitura antecipada, execute o seguinte comando:
./readahead.sh set <mount-point> [read-ahead-kb]
Exemplo
#!/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
Como definir a leitura antecipada de modo persistente para montagens do NFS
Para definir a leitura antecipada persistente para montagens do NFS, as regras de udev
podem ser escritas da seguinte maneira:
Criar e testar
/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"
Aplicar a regra de
udev
:sudo udevadm control --reload
Próximas etapas
- Práticas recomendadas de E/S direta do Linux para o Azure NetApp Files
- Práticas recomendadas de cache do sistema de arquivos do Linux para o Azure NetApp Files
- Melhores práticas de opções de montagem do NFS no Linux para o Azure NetApp Files
- Práticas recomendadas de simultaneidade do Linux
- Práticas recomendadas de SKUs de máquina virtual do Azure
- Parâmetros de comparação de desempenho para o Linux