Baixo desempenho ao montar o compartilhamento de arquivos do Azure na VM Linux

2

Eu experimentei o Serviço de arquivos do Azure como uma forma de sistema de arquivos de rede que pode ser montado por várias VMs simultaneamente - algo que os discos rígidos virtuais comuns do Azure não são capazes. Um VHD do Azure só pode ser anexado a uma única VM por vez.

No entanto, ao montar um compartilhamento de arquivos do Azure por meio do protocolo SMB, observo um desempenho de gravação muito ruim.

A configuração é a seguinte: iniciei uma Canonical:UbuntuServer:16.04-LTS:latest VM em uma Standard_DS2 VM.

Quando o processo de inicialização é concluído, sigo as instruções oficiais para montar o compartilhamento de arquivos do Azure via SMB.

sudo apt-get install cifs-utils
sudo mkdir -p /mnt/azure
sudo mount -t cifs //<storageaccount>.file.core.windows.net/<file-share-name> /mnt/azure/ -o vers=3.0,username=<storageaccount>,password=<base64-encoded>,dir_mode=0777,file_mode=0777,serverino

Em seguida, executo este teste de desempenho de gravação simples:

time for i in $(seq 1 500); do echo "hello!" > /mnt/azure/hello.txt; done

real    0m20.673s
user    0m0.032s
sys     0m0.124s

Como pode ser visto, leva mais de 20 segundos para ser concluído. Como comparação, executando o mesmo teste em minha máquina local (com unidade SSD), vejo os seguintes números:

time for i in $(seq 1 500); do echo "hello!" > hello.txt; done

real    0m0.031s
user    0m0.004s
sys     0m0.024s

Isso é concluído em cerca de 30 milli segundos. Portanto, há quase um fator de penalidade de desempenho de 1000 ao executar o compartilhamento de arquivos do Azure.

Esses números de desempenho são esperados ou estou faltando alguma coisa?

    
por hal 10.03.2017 / 11:01

2 respostas

1

Sim.

Lembre-se de que, embora o disco local e os arquivos do Azure sejam basicamente armazenamentos de rede, o último usa uma API de E / S em vez de acesso direto ao hardware. A latência será muito maior. Disse que vamos tentar uma matemática simples:

Você está fazendo 500 solicitações e, a cada vez, abre e fecha uma conexão:

500 solicitações / 20,673.sec = 24,18 Req / seg

24.18 / 1000 = 0,02418s para completar cada solicitação, o que é ótimo.

Se você precisar de desempenho em um pequeno e / ou grande número de arquivos, o Armazenamento de Arquivos do Azure não é para o seu caso de uso. Em teoria, pode atingir 1000 IOPS e 60MB / seg.

Além disso, vamos encarar, o SMB / CIFS é muito lento lidando com arquivos pequenos.

    
por 10.03.2017 / 15:58
1

Não sei se esse é o problema, pois isso parece uma grande diferença, mas tenha em mente:

  1. O armazenamento de arquivos do Azure é um armazenamento padrão, não premium, portanto, é tudo disco giratório, sem SSD, sempre será mais lento do que o seu SSD.
  2. Você está correndo pela rede agora, o que também adiciona algum tempo. VMs de tamanhos diferentes têm limites diferentes, um D2 será limitado a 1.5Gb / s
por 10.03.2017 / 15:28