Práticas recomendadas de opções de montagem do Linux NFS para Arquivos NetApp do Azure
Este artigo ajuda você a entender as opções de montagem e as práticas recomendadas para usá-las com os Arquivos NetApp do Azure.
Nconnect
O uso da nconnect
opção mount permite especificar o número de conexões (fluxos de rede) que devem ser estabelecidas entre o cliente NFS e o ponto de extremidade NFS até um limite de 16. Tradicionalmente, um cliente NFS usa uma única conexão entre ele e o ponto de extremidade. O aumento do número de fluxos de rede aumenta significativamente os limites superiores de E/S e taxa de transferência. Os testes revelaram-se nconnect=8
os mais eficientes.
Ao preparar um ambiente SAS GRID de vários nós para produção, você pode notar uma redução repetível de 30% no tempo de execução, passando de 8 horas para 5,5 horas:
Opção de montagem | Tempos de execução do trabalho |
---|---|
Não nconnect |
8 horas |
nconnect=8 |
5,5 horas |
Ambos os conjuntos de testes usaram a mesma máquina virtual E32-8_v4 e RHEL8.3, com leitura antecipada definida para 15 MiB.
Ao usar nconnect
o , tenha em mente as seguintes regras:
nconnect
é suportado pelos Arquivos NetApp do Azure em todas as principais distribuições Linux, mas apenas em versões mais recentes:Versão Linux NFSv3 (liberação mínima) NFSv4.1 (versão mínima) Redhat Enterprise Linux RHEL8,3 RHEL8,3 SUSE SLES12SP4 ou SLES15SP1 SLES15SP2 Ubuntu Ubuntu18,04 Nota
SLES15SP2 é a versão mínima do SUSE na qual
nconnect
é suportada pelos Arquivos NetApp do Azure para NFSv4.1. Todas as outras versões, conforme especificado, são as primeiras versões que introduziram onconnect
recurso.Todas as montagens de um único ponto de extremidade herdam a
nconnect
configuração da primeira exportação montada, conforme mostrado nos seguintes cenários:Cenário 1:
nconnect
é usado pela primeira montagem. Portanto, todas as montagens no mesmo endpoint usamnconnect=8
.mount 10.10.10.10:/volume1 /mnt/volume1 -o nconnect=8
mount 10.10.10.10:/volume2 /mnt/volume2
mount 10.10.10.10:/volume3 /mnt/volume3
Cenário 2:
nconnect
não é usado pela primeira montagem. Portanto, nenhuma montagem contra o mesmo usonconnect
de ponto final, emboranconnect
possa ser especificado nele.mount 10.10.10.10:/volume1 /mnt/volume1
mount 10.10.10.10:/volume2 /mnt/volume2 -o nconnect=8
mount 10.10.10.10:/volume3 /mnt/volume3 -o nconnect=8
Cenário 3:
nconnect
as configurações não são propagadas entre pontos de extremidade de armazenamento separados.nconnect
é usado pelo suporte proveniente de10.10.10.10
, mas não pelo suporte proveniente de10.12.12.12
.mount 10.10.10.10:/volume1 /mnt/volume1 -o nconnect=8
mount 10.12.12.12:/volume2 /mnt/volume2
nconnect
pode ser usado para aumentar a simultaneidade de armazenamento de qualquer cliente.
Para obter detalhes, consulte Práticas recomendadas de simultaneidade do Linux para arquivos NetApp do Azure.
Nconnect
Considerações
Não é recomendado usar nconnect
e sec=krb5*
montar opções juntas. A degradação do desempenho foi observada ao usar as duas opções em combinação.
A GSS-API (Generic Security Standard Application Programming Interface) fornece uma maneira de os aplicativos protegerem os dados enviados para aplicativos pares. Esses dados podem ser enviados de um cliente em uma máquina para um servidor em outra máquina.
Quando nconnect
é usado no Linux, o contexto de segurança GSS é compartilhado entre todas as nconnect
conexões com um servidor específico. O TCP é um transporte confiável que suporta a entrega de pacotes fora de ordem para lidar com pacotes fora de ordem em um fluxo GSS, usando uma janela deslizante de números de sequência. Quando pacotes que não estão na janela de sequência são recebidos, o contexto de segurança é descartado e um novo contexto de segurança é negociado. Todas as mensagens enviadas no contexto agora descartado não são mais válidas, exigindo que as mensagens sejam enviadas novamente. Um número maior de pacotes em uma nconnect
configuração causa pacotes fora da janela frequentes, acionando o comportamento descrito. Nenhuma porcentagem de degradação específica pode ser declarada com esse comportamento.
Rsize
e Wsize
Os exemplos nesta seção fornecem informações sobre como abordar o ajuste de desempenho. Talvez seja necessário fazer ajustes para atender às necessidades específicas do seu aplicativo.
Os rsize
sinalizadores e wsize
definem o tamanho máximo de transferência de uma operação NFS. Se rsize
forem ou wsize
não especificados na montagem, o cliente e o servidor negociarão o maior tamanho suportado pelos dois. Atualmente, os Arquivos NetApp do Azure e as distribuições Linux modernas oferecem suporte a tamanhos de leitura e gravação tão grandes quanto 1.048.576 Bytes (1 MiB). No entanto, para uma melhor taxa de transferência geral e latência, os Arquivos NetApp do Azure recomendam definir ambos rsize
e wsize
não maiores que 262.144 Bytes (256 K). Você pode observar que tanto aumentou a latência quanto diminuiu a taxa de transferência ao usar rsize
e wsize
maior que 256 KiB.
Por exemplo, Implantar um sistema de expansão SAP HANA com nó de espera em VMs do Azure usando Arquivos NetApp do Azure no SUSE Linux Enterprise Server mostra o máximo de 256 KiB rsize
da wsize
seguinte maneira:
sudo vi /etc/fstab
# Add the following entries
10.23.1.5:/HN1-data-mnt00001 /hana/data/HN1/mnt00001 nfs rw,vers=4,minorversion=1,hard,timeo=600,rsize=262144,wsize=262144,noatime,_netdev,sec=sys 0 0
10.23.1.6:/HN1-data-mnt00002 /hana/data/HN1/mnt00002 nfs rw,vers=4,minorversion=1,hard,timeo=600,rsize=262144,wsize=262144,noatime,_netdev,sec=sys 0 0
10.23.1.4:/HN1-log-mnt00001 /hana/log/HN1/mnt00001 nfs rw,vers=4,minorversion=1,hard,timeo=600,rsize=262144,wsize=262144,noatime,_netdev,sec=sys 0 0
10.23.1.6:/HN1-log-mnt00002 /hana/log/HN1/mnt00002 nfs rw,vers=4,minorversion=1,hard,timeo=600,rsize=262144,wsize=262144,noatime,_netdev,sec=sys 0 0
10.23.1.4:/HN1-shared/shared /hana/shared nfs rw,vers=4,minorversion=1,hard,timeo=600,rsize=262144,wsize=262144,noatime,_netdev,sec=sys 0 0
Por exemplo, o SAS Viya recomenda tamanhos de leitura e gravação de 256 KiB, e o SAS GRID limita o a 64 KiB enquanto aumenta o r/wsize
desempenho de leitura com maior avanço de leitura para as montagens NFS. Consulte Práticas recomendadas de leitura antecipada do NFS para Arquivos NetApp do Azure para obter detalhes.
As seguintes considerações aplicam-se à utilização de rsize
e wsize
:
- Os tamanhos de operação de E/S aleatória geralmente são menores do que as
rsize
opções de montagem ewsize
montagem. Como tal, não são constrangimentos. - Ao usar o cache do sistema de arquivos, a E/S sequencial ocorrerá no tamanho predicado pelas opções e
wsize
montagem, a menos que orsize
tamanho do arquivo seja menor quersize
ewsize
. - As operações que ignoram o cache do sistema de arquivos, embora ainda sejam restringidas
rsize
pelas opções ewsize
montagem, não são tão grandes quanto o máximo especificado porrsize
ouwsize
. Essa consideração é importante quando você usa geradores de carga de trabalho que têm adirectio
opção.
Como prática recomendada com os Arquivos NetApp do Azure, para melhor taxa de transferência geral e latência, defina rsize
e wsize
não seja maior que 262.144 Bytes.
Temporizadores de atributos de cache e consistência próxima da abertura
O NFS usa um modelo de consistência flexível. A consistência é frouxa porque o aplicativo não precisa ir para o armazenamento compartilhado e buscar dados toda vez para usá-lo, um cenário que teria um tremendo impacto no desempenho do aplicativo. Há dois mecanismos que gerenciam esse processo: temporizadores de atributo de cache e consistência próxima à abertura.
Se o cliente tiver a propriedade total dos dados, ou seja, eles não forem compartilhados entre vários nós ou sistemas, há consistência garantida. Nesse caso, você pode reduzir as getattr
operações de acesso ao armazenamento e acelerar o aplicativo desativando a consistência de fechar para abrir (cto
) (nocto
como uma opção de montagem) e aumentando os tempos limite para o gerenciamento de cache de atributos (actimeo=600
como uma opção de montagem altera o temporizador para 10m em comparação com os padrões acregmin=3,acregmax=30,acdirmin=30,acdirmax=60
). Em alguns testes, nocto
reduz aproximadamente 65-70% das chamadas de acesso, e o getattr
ajuste actimeo
reduz essas chamadas em outros 20-25%.
Como funcionam os temporizadores de cache de atributos
Os atributos acregmin
, acregmax
, acdirmin
, e acdirmax
controlam a coerência do cache. Os dois primeiros atributos controlam por quanto tempo os atributos dos arquivos são confiáveis. Os dois últimos atributos controlam por quanto tempo os atributos do próprio arquivo de diretório são confiáveis (tamanho do diretório, propriedade do diretório, permissões de diretório). Os min
atributos e max
definem a duração mínima e máxima durante a qual os atributos de um diretório, atributos de um arquivo e conteúdo de cache de um arquivo são considerados confiáveis, respectivamente. Entre min
e max
, um algoritmo é usado para definir a quantidade de tempo durante a qual uma entrada em cache é confiável.
Por exemplo, considere o padrão acregmin
e acregmax
os valores, 3 e 30 segundos, respectivamente. Por exemplo, os atributos são repetidamente avaliados para os arquivos em um diretório. Após 3 segundos, o serviço NFS é consultado quanto à frescura. Se os atributos forem considerados válidos, o cliente dobra o tempo confiável para 6 segundos, 12 segundos, 24 segundos, então como o máximo é definido como 30, 30 segundos. A partir desse ponto, até que os atributos armazenados em cache sejam considerados desatualizados (quando o ciclo recomeça), a confiabilidade é definida como 30 segundos sendo o valor especificado por acregmax
.
Há outros casos que podem se beneficiar de um conjunto semelhante de opções de montagem, mesmo quando não há propriedade completa pelos clientes, por exemplo, se os clientes usam os dados como somente leitura e a atualização de dados é gerenciada por outro caminho. Para aplicativos que usam grades de clientes como EDA, hospedagem na Web e renderização de filmes e têm conjuntos de dados relativamente estáticos (ferramentas ou bibliotecas EDA, conteúdo da Web, dados de textura), o comportamento típico é que o conjunto de dados é em grande parte armazenado em cache nos clientes. Há poucas leituras e nenhuma escrita. Há muitas getattr
chamadas /access voltando para o armazenamento. Esses conjuntos de dados geralmente são atualizados por meio de outro cliente, montando os sistemas de arquivos e enviando periodicamente atualizações de conteúdo.
Nesses casos, há um atraso conhecido na captação de novos conteúdos e o aplicativo ainda funciona com dados potencialmente desatualizados. Nesses casos, nocto
e actimeo
pode ser usado para controlar o período em que a desatualização de dados pode ser gerenciada. Por exemplo, em ferramentas e bibliotecas EDA, actimeo=600
funciona bem porque esses dados são normalmente atualizados com pouca frequência. Para pequenas hospedagens na web, onde os clientes precisam ver suas atualizações de dados em tempo hábil enquanto editam seus sites, actimeo=10
pode ser aceitável. Para sites de grande escala onde há conteúdo enviado para vários sistemas de arquivos, actimeo=60
pode ser aceitável.
O uso dessas opções de montagem reduz significativamente a carga de trabalho para armazenamento nesses casos. (Por exemplo, uma experiência recente da EDA reduziu as IOPs para o volume da ferramenta de >150 K para ~6 K.) Os aplicativos podem ser executados significativamente mais rápido porque podem confiar nos dados na memória. (O tempo de acesso à memória é de nanossegundos vs. centenas de microssegundos para getattr
/access em uma rede rápida.)
Consistência próxima da abertura
A consistência de perto para abrir (a cto
opção de montagem) garante que, independentemente do estado do cache, ao abrir os dados mais recentes de um arquivo sejam sempre apresentados ao aplicativo.
- Quando um diretório é rastreado (
ls
,ls -l
por exemplo), um determinado conjunto de RPCs (chamadas de procedimento remoto) é emitido. O servidor NFS compartilha sua visão do sistema de arquivos. Desde que seja usado por todos os clientes NFS quecto
acessam uma determinada exportação NFS, todos os clientes verão a mesma lista de arquivos e diretórios nela. A atualização dos atributos dos arquivos no diretório é controlada pelos temporizadores de cache de atributos. Em outras palavras, enquantocto
for usado, os arquivos aparecerão para clientes remotos assim que o arquivo for criado e o arquivo pousar no armazenamento. - Quando um arquivo é aberto, o conteúdo do arquivo é garantido fresco da perspetiva do servidor NFS.
Se houver uma condição de corrida em que o conteúdo não tenha terminado de ser liberado da Máquina 1 quando um arquivo for aberto na Máquina 2, a Máquina 2 só receberá os dados presentes no servidor no momento da abertura. Nesse caso, a Máquina 2 não recupera mais dados do arquivo até que o temporizador seja atingido e a
acreg
Máquina 2 verifica sua coerência de cache do servidor novamente. Esse cenário pode ser observado usando uma cauda-f
da Máquina 2 quando o arquivo ainda está sendo gravado na Máquina 1.
Sem consistência próxima da abertura
Quando nenhuma consistência próxima à abertura (nocto
) é usada, o cliente confia na atualização de sua exibição atual do arquivo e do diretório até que os temporizadores do atributo cache tenham sido violados.
Quando um diretório é rastreado (
ls
,ls -l
por exemplo), um determinado conjunto de RPCs (chamadas de procedimento remoto) é emitido. O cliente só emite uma chamada para o servidor para obter uma lista atual de arquivos quando o valor doacdir
temporizador de cache foi violado. Nesse caso, os arquivos e diretórios criados recentemente não aparecem. Arquivos e diretórios removidos recentemente aparecem.Quando um arquivo é aberto, desde que o arquivo ainda esteja no cache, seu conteúdo armazenado em cache (se houver) é retornado sem validar a consistência com o servidor NFS.
Próximos passos
- Práticas recomendadas de E/S direta do Linux para Arquivos NetApp do Azure
- Práticas recomendadas de cache do sistema de arquivos Linux para Arquivos NetApp do Azure
- As melhores práticas de simultaneidade do Linux para o Azure NetApp Files
- Práticas recomendadas de leitura antecipada do Linux NFS
- Práticas recomendadas de SKUs de máquina virtual do Azure
- Testes de referência de desempenho para Linux