Desempenho lento do disco na Máquina Virtual do Azure

9

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)

René
fonte

Respostas:

7

Um pouco atrasado para a festa aqui, mas para o que vale a pena SSDs "anexados" no Azure, suas IOPs são limitadas com base no tamanho da máquina. Ele 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 indicaram a postagem do blog abaixo.

Consulte este link: http://azure.microsoft.com/blog/2014/10/06/d-series-performance-expectations/

Richard Hauer
fonte
Ótima informação, obrigado Richard! Eu suspeitava que isso estivesse relacionado à limitação, mas naquele momento não consegui encontrar nenhuma informação específica. Essa postagem do blog responde às minhas perguntas.
René
azure limit disk io .. o que diabos .. eu mudo para o google cloud .. eles não limitam isso e o preço é muito mais barato.
tyan
4

Talvez não esteja relacionado à memória. Os discos "físicos" no Azure usam o que é chamado de armazenamento de Blob e é por isso que o desempenho não é o mesmo que no seu computador local, mesmo com hardware semelhante. Você pode encontrar mais informações neste link . Esse 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 ele

O white paper Guia de Desempenho para SQL Server nas VMs do Azure menciona (nas páginas 15 e 26) que nas VMs do Azure, os Espaços de Armazenamento podem ser usados ​​para melhorar o desempenho do armazenamento de cargas de trabalho do SQL Server

O Storage Spaces é 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 alternativa para as limitações de E / S do próprio disco da VM. Citando novamente:

Com VMs maiores que suportam muitos discos físicos (até 16), é possível um aumento muito significativo no desempenho do armazenamento. Isso pode habilitar o Azure como uma plataforma viável para muitas cargas de trabalho SQL que seriam muito limitadas pelo desempenho de E / S de um único disco do Azure.

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

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

Bruno Faria
fonte
Você está certo de que os discos padrão no Azure realmente usam o Armazenamento de Blob, mas não acredito que seja o caso dos discos SSD. De acordo com as informações fornecidas pela minha Microsoft, esses são discos SSD físicos locais. E nesse caso, acho estranho que o desempenho seja muito diferente entre os tamanhos das instâncias D. Em relação aos espaços de armazenamento: explorei isso e fiz alguns testes, mas infelizmente isso não me deu nenhum ganho de desempenho perceptível. No final, cheguei à conclusão de que só preciso aceitar que preciso usar um tamanho de instância maior para esta tarefa.
René
1
@ René você teve a chance de testar o novo Azure Storage Premium? Desculpe por abordar este tópico antigo, mas estou curioso para ver como esse novo armazenamento funcionaria em seu ambiente.
de Bruno Faria
Desculpe pela minha resposta tardia. Ótima dica sobre o Azure Storage Premium. Ainda não tentei, pois ainda não está disponível na minha região. Mas vou ficar de olho nisso. Obrigado novamente!
René