Aplicativo de thread único 50% mais lento no VMware X5650 que o físico E5450

5

Nosso aplicativo é executado 50% mais lentamente em um Xeon X5650 no ESX do que em um E5450 sem metal.

Uma tarefa de teste nos servidores físicos leva 17 minutos.

A mesma tarefa nos servidores virtuais leva 25 minutos: 50% a mais.

De tudo o que posso dizer, isso deve ser impossível; a série 5600 é supostamente 10-20% mais rápida do que a série 5400 para processos de encadeamento único com a mesma velocidade de clock, e a sobrecarga de virtualização deve ser igualmente baixa para cargas de trabalho limitadas por CPU de encadeamento único. O desempenho deve ser menos maior que o esperado, não deveria? Mas, em vez de ter desempenho igual ou melhor, o desempenho é reduzido em 1/3.

UPDATE: Resolvido. A mesma tarefa nos servidores virtuais (fixos) leva 14 minutos: 15% mais rápido.

Era a configuração da RAM. A queda de 50% no desempenho ocorreu porque a memória do sistema host ESX foi instalada incorretamente e fornece apenas metade da largura de banda total possível. Para a CPU & processo ligado à memória, essa perda de largura de banda traduziu-se em um desempenho 50% pior que o esperado.

O desempenho dos aplicativos agora está bem no meio da melhora de 10 a 20% que esperávamos originalmente.

Existem dois sistemas físicos Windows Server 2003 R2 que executam um aplicativo que consiste em um cálculo de single-thread executado em um servidor (32 bits), conversando de um lado para outro em um banco de dados do SQL Server 2005 (64- pouco).

Ambas as caixas físicas são CPU-E5450 com 4GB de RAM a 800Mhz. O servidor de cálculo nunca usa mais de 1,5 GB de memória física e o SQL Server nunca usa mais de 2,5 GB. A utilização da CPU no servidor de cálculo nunca ultrapassa ~ 15% (cerca de 50% de um único núcleo). A utilização da CPU no servidor de banco de dados nunca ultrapassa 25% (um único núcleo totalmente utilizado).

Os hosts físicos do ESX 4.1 são X5650 de CPU dupla com 64 GB de RAM a 1333 Mhz. As máquinas virtuais recebem 4 núcleos e 4 GB de RAM cada, para espelhar o ambiente físico. O teste foi feito com uma única VM em execução em cada host físico, bem como com ambos em execução no mesmo host.

Curiosamente, obtemos quase os mesmos resultados de teste de 25 minutos em outro par de servidores ESX usando CPUs X5550 e RAM @ 1066Mhz.

Além disso, os resultados de teste nos sistemas virtuais não variam em mais de 10%, dando às CPUs 1, 2 ou 4 de VMs, ou 1, 2, 4 ou 8 GB de RAM. Há muito pouca atividade de rede ou de disco e, até onde posso dizer, o processo deve estar ligado à CPU.

Os testes foram executados usando discos SAS de 15K locais nos hosts separados, bem como em uma SAN iSCSI de gigabit também com discos de 15K. Há resultados diferentes insignificantes para diferentes armazenamentos.

De tudo o que posso dizer, a série Xeon 5600 deve ser 20-50% mais rápida do que a série 5400 para cargas de trabalho de encadeamento único. Mesmo considerando que o X5650 é uma parte de 2,67GHz e o E5450 uma parte de 3GHhz, se o desempenho por núcleo fosse igual à mesma velocidade de clock, você ainda esperaria ver pelo menos 90% do desempenho em vez de 67%. Isso nem leva em conta o fato de que o clock da memória é quase o dobro da velocidade.

Deve-se dizer que já fiz vários projetos de virtualização no passado e nunca vi nada perto de uma degradação de desempenho de 50%, mesmo usando os SAME núcleos de CPU físicos, sem falar de duas gerações mais novas com memória mais rápida. / p>

Alguma idéia sobre possíveis causas ou configurações que eu devo verificar?

    
por ryandenki 30.08.2011 / 09:53

1 resposta

1

Dependendo do tipo de virtualização, a sobrecarga de 5% é praticamente o melhor cenário possível. Com a paravirtualização completa, você pode obter essa sobrecarga em cargas de trabalho de I / O com muita facilidade. Com a virtualização assistida por hardware (tecnologia usada pelo VMWare), é possível obter uma sobrecarga tão baixa nas cargas de trabalho de I / O em um hipervisor com poucas VMs. Com virtualização total (sem extensões de CPU), 5% de sobrecarga é praticamente um sonho.

Tenha em mente que isso pode depender de muitos fatores. A virtualização tende a adicionar uma quantidade significativa de latência entre os discos e o sistema operacional convidado. Isso aumentará a espera de IO e, portanto, carregará as médias, mantendo o uso da CPU um pouco baixo. Se o seu armazenamento estiver na parte inferior da escala de IOPS, isso terá um impacto muito grande. Se você estiver usando o armazenamento de rede, isso quase sempre adicionará latência devido a ter que acessar uma rede para cada IO, em vez de apenas acessar um barramento interno.

A virtualização também pode adicionar latência de rede extra se você usar módulos de configuração de rede especiais, como switches virtuais, mas isso geralmente não é muito significativo.

A virtualização tende a adicionar muitas interrupções extras necessárias para alternar de uma VM para outra. Dependendo do agendador do hipervisor, isso pode ser significativo. Não há muito que você possa fazer sobre isso, pois é apenas devido à natureza da virtualização. Mas é algo para se ter em mente como uma justificativa para reduzir o desempenho.

Devido à natureza de thread único de sua aplicação, ter mais núcleos não resultará em melhoria significativa de desempenho. Ambos os processadores têm freqüências similares, mas você notará que o X5650 tem uma frequência mais lenta sem o "Turbo Boost". Você pode querer verificar se o recurso é compatível / ativado com sua configuração.

33% de sobrecarga na carga de trabalho intensiva de IO não é tão ruim. Tente separar o armazenamento de suas duas VMs e veja se isso ajuda.

    
por 30.08.2011 / 12:18