Ok, então, primeiro de tudo, permita-me dizer que não sou uma pessoa de operações, mas um desenvolvedor. Então, eu estou indo para um pedaço de terra desconhecida aqui, então por favor, tenha paciência comigo.
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. Então, eu 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 eu gostaria de saber se sou eu quem está fazendo algo errado ou se meus resultados são o que se pode esperar.
Primeiro de tudo, com o que tenho testado? Eu tenho um aplicativo de console .NET personalizado que não faz nada além de usar um arquivo zip como argumento e começa imediatamente a extrair o arquivo zip para o mesmo diretório em que o arquivo zip reside. Enquanto a extração está em andamento, o aplicativo calcula quantos megabytes o aplicativo gravou no arquivo de destino por segundo e o produz.
Na minha máquina de desenvolvimento local, obtenho um desempenho muito bom com esse aplicativo, gravado 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 250 GB.
Ok, comecei a testar diferentes tamanhos de instância, 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 o cache do host, fiquei estável de 30 a 35 MB / s, o que significa todo a extração levou 24 minutos e 48 segundos. Também tentei ativar o cache do host, mas não fez muita diferença.
- Em uma instância D4 com o Windows Server 2012 Datacenter (8 núcleos, 28 GB de RAM, disco SSD local de 500 GB), obtive um desempenho realmente bom (150 ou mais MB / s) nos primeiros minutos e depois variava o desempenho com picos de 200 MB / se vales a 9 MB / s. O desempenho médio ficou entre 70 e 100 MB / s. A extração levou 9 minutos 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 muito bom (150+ MB / s) no primeiro minuto, mas o desempenho diminuiu 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 ter um desempenho tão ruim, como nas instâncias D1, D2 e D3? E alguém sabe por que o desempenho do disco difere tanto entre D1 a D4? É um problema de memória? Quando olho para o gerenciador de tarefas enquanto a extração está em andamento, o uso da memória está explodindo. Eu suspeito que é porque o Windows está armazenando em cache os dados gravados, mas quando fica sem memória, ele precisa liberar os dados para o disco. Quando isso acontece, o desempenho do disco diminui. Mas isso não acontece na minha máquina local, por que é necessário um cache tão agressivo nessas VMs?
Sei que há diferenças entre minha máquina local e uma máquina virtual hospedada no Azure, mas o desempenho do disco que estou experimentando é realmente esperado?
(Originalmente, postei minha pergunta no Stackoverflow , pois suspeitava que era a causa do meu aplicativo. Mas não tenho mais tanta certeza)