Desempenho lento do disco na máquina virtual do Azure

8

Ok, primeiro de tudo, permita-me dizer que não sou uma pessoa de operações, mas sim um desenvolvedor. Então, vou entrar em um terreno desconhecido aqui, então, por favor, fique comigo.

Eu gostaria de usar uma máquina virtual do Azure para extrair um arquivo XML de 50 GB de um arquivo zip de 1,9 GB. Por isso, tenho testado qual tamanho de instância no Azure devo usar para obter um bom desempenho sem pagar mais do que preciso.

No entanto, o desempenho do disco das VMs do Azure não foi incrível, e gostaria de saber se sou eu quem está fazendo algo errado ou se meus resultados são o que podem ser esperados.

Primeiro de tudo, com o que tenho testado? Eu tenho um aplicativo de console .NET personalizado que não faz nada, mas tomar um arquivo zip como um argumento e imediatamente começa a extrair o arquivo zip para o mesmo diretório que o arquivo zip reside dentro Enquanto a extração está acontecendo, o aplicativo calcula quantos megabytes o aplicativo gravou no arquivo de destino por segundo e gera a saída.

Na minha máquina de desenvolvimento local, obtenho um bom desempenho com este aplicativo, com 160-210 MB / s. Portanto, todo o processo de extração leva cerca de 8 minutos. As especificações da minha máquina local são Intel Core i7 950, 3 GHz, 4 núcleos (8 lógicos), 12 GB de RAM, Samsung SSD 830 series de 250 GB.

Ok, comecei a testar diferentes tamanhos de instâncias, e aqui estão meus resultados.

  • Em uma instância A4 com o Windows Server 2012 Datacenter R2 (8 núcleos, 14 GB de RAM) com um RAID distribuído de 4 discos virtuais usando a mesma conta de armazenamento, sem cache de host, estabilizei 30-35 MB / s, significa que a extração inteira levou 24 minutos e 48 segundos. Eu também tentei habilitar o cache do host, mas isso não fez nenhuma diferença.
  • Em uma instância D4 com o Windows Server 2012 Datacenter (8 núcleos, 28 GB de RAM, 500 GB de disco SSD local) obtive um desempenho realmente bom (150+ MB / s) nos primeiros minutos e, em seguida, desempenho variável com picos em 200 MB / se vales a 9 MB / s. O desempenho médio foi entre 70 e 100 MB / s. A extração levou 9 min e 40 segundos.
  • Em uma instância D3 com o Windows Server 2012 Datacenter (4 núcleos, 14 GB de RAM, 250 GB de disco SSD local) obtive um desempenho realmente bom (150+ MB / s) no primeiro minuto, mas o desempenho caiu para 20 -40 MB / s, fazendo com que o processo de extração demore 21 minutos e 49 segundos.

Em uma instância D2 e D1, o desempenho do disco é pior que no D3.

E isso realmente me surpreende. Como um disco SSD local pode funcionar tão mal, como nas instâncias D1, D2 e D3? E alguém sabe por que o desempenho do disco difere muito entre D1 e D4? É um problema de memória? Quando olho para o gerenciador de tarefas durante a extração, o uso da memória está explodindo. Eu suspeito que seja porque o Windows está armazenando em cache os dados gravados, mas quando ele fica sem memória, ele precisa liberar os dados no disco. Quando isso acontece, o desempenho do disco diminui. Mas isso não acontece na minha máquina local, então por que esse armazenamento em cache agressivo é necessário nessas máquinas virtuais?

Eu sei que há diferenças entre minha máquina local e uma máquina virtual hospedada no Azure, mas o desempenho de disco que estou experimentando é realmente esperado?

(Eu originalmente postei minha pergunta no Stackoverflow , como eu suspeitei que era o meu aplicativo que foi a causa. Mas eu não tenho mais tanta certeza)

    
por René 26.09.2014 / 13:28

2 respostas

6

Pouco tarde para a festa aqui, mas para o que vale a pena, os SSDs "anexados" no Azure têm seus IOPs limitados com base no tamanho da máquina. Não foi mencionado nos preços em nenhum lugar, mas eu levantei esse problema como um ticket com suporte técnico quando eles me encaminharam para a postagem do blog abaixo.

Veja este link: link

    
por 27.04.2015 / 02:44
4

Talvez não esteja relacionado à memória. Discos "físicos" no Azure usam o que é chamado de armazenamento de Blob e essa é a razão pela qual o desempenho não é o mesmo que em seu computador local, mesmo com hardware semelhante. Você pode encontrar mais informações sobre este link . Este parece ser um problema comum para a comunidade do SQL Server que depende muito do desempenho do disco. Vou citar um artigo que encontrei sobre isso

The Performance Guidance for SQL Server in Azure VMs whitepaper mentions (on pages 15 and 26) that in Azure VMs, Storage Spaces can be used to improve storage performance for SQL Server workloads

Os Espaços de Armazenamento são um recurso interno do Windows Server 2012 que permite usar vários discos físicos para criar um único disco virtual, portanto, como uma solução para as limitações de E / S do próprio disco da VM. Citando novamente:

With larger VMs that support many (up to 16) physical disks, a very significant increase in storage performance is possible. This can enable Azure as a viable platform for many SQL workloads that would be too constrained by the I/O performance of a single Azure disk otherwise.

Este artigo mostrará as etapas para criar um espaço de armazenamento.

Você deve tentar isso primeiro. Provavelmente, você pode até usar uma instância menor, pois o serviço de armazenamento é um serviço separado da própria instância.

    
por 26.09.2014 / 15:53