Considerações sobre o desempenho do NFS (sistema de arquivos de rede) 3.0 no Armazenamento de Blobs do Azure

O armazenamento de Blobs agora dá suporte ao protocolo NFS (Network File System) 3.0. Este artigo contém recomendações que ajudam a otimizar o desempenho de suas solicitações de armazenamento. Para saber mais sobre o suporte ao NFS 3.0 para Armazenamento de Blobs do Azure, consulte Suporte ao protocolo NFS (sistema de arquivos de rede) 3.0 para Armazenamento de Blobs do Azure.

Adicionar clientes para aumentar a taxa de transferência

O Armazenamento de Blobs do Azure é dimensionado de forma linear até atingir o limite máximo de entrada e saída da conta de armazenamento. Portanto, seus aplicativos podem obter uma taxa de transferência mais alta usando mais clientes. Para obter mais informações sobre os limites de entrada e saída da conta de armazenamento, consulte Metas de escalabilidade e desempenho das contas de Armazenamento Standard.

O gráfico a seguir mostra como a largura de banda aumenta conforme você adiciona mais clientes. Neste gráfico, um cliente é uma VM (máquina virtual) e com uma conta de armazenamento de uso geral padrão v2.

Desempenho Standard

O gráfico a seguir mostra esse mesmo efeito quando aplicado a uma conta de armazenamento de blobs de blocos premium.

Desempenho Premium

Usar contas de armazenamento de blobs de blocos premium para aplicativos de pequena escala

Nem todos os aplicativos podem ser escalados verticalmente adicionando mais clientes. Para esses aplicativos, a conta de armazenamento de Blob de blocos Premium do Azure oferece taxas de transações baixas e de baixa latência consistentes. A conta de armazenamento de Blob de blocos Premium pode alcançar a largura de banda máxima com menos threads e clientes. Por exemplo, com um único cliente, uma conta de armazenamento de blob de blocos pode atingir uma largura de banda de 2,3 x em comparação com a mesma configuração usada com uma conta de armazenamento de uso geral v2 com desempenho padrão.

Cada barra no gráfico a seguir mostra a diferença na largura de banda alcançada entre as contas de armazenamento de desempenho Premium e Standard. À medida que aumenta o número de clientes, essa diferença diminui.

Desempenho relativo

Melhorar o tamanho de leitura antecipada para aumentar a taxa de transferência de leitura de arquivos grandes

O parâmetro de kernel read_ahead_kb representa a quantidade de dados adicionais que devem ser lidos depois de atendida uma determinada solicitação de leitura. Você pode aumentar esse parâmetro para 16 MiB para aprimorar a taxa de transferência de leitura de arquivos grandes.

export AZMNT=/your/container/mountpoint

echo 16384 > /sys/class/bdi/0:$(stat -c "%d" $AZMNT)/read_ahead_kb

Evite substituições frequentes nos dados

Demora mais tempo para concluir uma operação de substituição do que uma nova operação de gravação. Isso ocorre porque uma operação de substituição de NFS, especialmente uma edição parcial de arquivo in-loco, é uma combinação de várias operações de Blob subjacentes: uma operação de leitura, uma modificação e uma de gravação. Portanto, um aplicativo que requer edições frequentes no local não é adequado para contas de armazenamento de Blobs habilitadas para NFS.

Implantar o Azure HPC Cache para aplicativos sensíveis a latência

Alguns aplicativos podem exigir baixa latência, além da alta taxa de transferência. Você pode implantar o Azure HPC Cache para melhorar significativamente a latência. Saiba mais sobre o Latência no Armazenamento de Blobs.

Aumentar o número de conexões TCP

Você pode usar a opção de montagem nconnect para obter um desempenho de leitura e gravação de agregação mais alto de uma única VM, mas somente se o kernel Linux tiver suporte à nconnect do Azure.

A nconnect é uma opção de montagem do Linux do lado do cliente que permite que você use várias conexões TCP entre o cliente e o ponto de extremidade do serviço Blob. Você pode usar a opção nconnect no comando mount para especificar o número de conexões TCP que deseja criar (por exemplo: mount -t aznfs -o nconnect=16,sec=sys,vers=3,nolock,proto=tcp <storage-account-name>.blob.core.windows.net:/<storage-account-name>/<container-name> /nfsdatain).

Importante

Embora as distribuições mais recentes do Linux ofereçam suporte total à nconnect, você deverá usar essa opção somente se o kernel tiver suporte à nconnect do Azure. O uso da opção de montagem nconnect sem o suporte à nconnect do Azure diminuirá a taxa de transferência, causará vários tempos limite e fará com que comandos como READDIR e READIRPLUS funcionem incorretamente.

O suporte à nconnect do Azure está disponível na maioria dos kernels Ubuntu recentes do que podem ser usados com máquinas virtuais do Azure. Para descobrir se o suporte à nconnect do Azure está disponível para o kernel, execute o comando a seguir.

[ -e /sys/module/sunrpc/parameters/enable_azure_nconnect ] && echo "Yes" || echo "No"

Se o suporte à nconnect do Azure estiver disponível no kernel, Yes será impresso no console. Caso o contrário, 'No é impresso no console.

Se o suporte à nconnect do Azure estiver disponível, habilite-a executando o comando a seguir.

echo Y > /sys/module/sunrpc/parameters/enable_azure_nconnect

Outras recomendações de melhores práticas

  • Use VMs com maior largura de banda de rede.

  • Use vários pontos de montagem quando suas cargas de trabalho permitirem.

  • Use o máximo de threads possível.

  • Use blocos de grande tamanho.

  • Solicite armazenamento de um cliente que esteja localizado na mesma região que a conta de armazenamento. Isso pode melhorar a latência de rede.

Próximas etapas