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. Ele foi projetado para melhorar 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 |
1.024 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. A atualização de versões com o valor de leitura antecipada maior para versões com o padrão de 128 KiB teve reduções no desempenho de 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 identificou o valor de leitura de 15.360 KiB como o ideal, em comparação com os valores de 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. Por conveniência, o script do Bash a seguir escrito no Red Hat é fornecido para exibir ou definir dinamicamente a leitura antecipada para o sistema de arquivos NFS em quantidade.
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
- Melhores práticas de simultaneidade do Linux
- Melhores práticas de SKUs de máquinas virtuais do Azure
- Parâmetros de comparação de desempenho para o Linux