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)