Por que o aumento do “Número de processadores lógicos” para uma VM hospedada no Hyper-V aumenta o desempenho dessa VM?

8

No meu entender, as máquinas virtuais (assumindo que Relative Weight é igual) obtêm uma parte igual do processador.

Quando a VM recebe algum tempo de processamento, não importa se a VM está vendo um único núcleo para usar ou vários núcleos, já que o processamento sai de uma matriz de processadores no host do Hyper-V, independentemente . No entanto, quando eu defino a configuração Number of logical processors de 1 a 4 no Hyper-V para uma VM específica, vejo um grande aumento no desempenho.

As especificações da minha configuração atual são aproximadamente:

  • O host do Hyper-V tem 32 GB de RAM, 24 processadores lógicos (palavra incorreta?), alguns TB de espaço.

  • As VMs recebem 6 GB de RAM, 1 ou 4 núcleos, algumas centenas de GB de espaço e executam o 2008 R2.

Eu experimentei algo semelhante em configurações anteriores do Hyper-V.

    
por Blackjack00 23.07.2013 / 20:41

2 respostas

19

As máquinas virtuais em todos os hipervisores que conheço são capazes de usar CPUs virtuais adicionais nas quais programar threads de execução simultâneos adicionais.

É exatamente essa camada de abstração entre a máquina física e a máquina virtual que faz com que não funcione da maneira que você descreve. A VM não sabe quantos núcleos a máquina física possui. A VM não "vê" as CPUs (ou núcleos) físicas na máquina física. O hypervisor fornece à VM quantas CPUs virtuais, e o sistema operacional convidado usa essas CPUs virtuais para programar encadeamentos simultâneos adicionais ... O número total de CPUs virtuais que o hypervisor distribui para as máquinas virtuais pode até exceder o número de CPUs físicas / núcleos na máquina.

Dito de outro modo, uma máquina virtual, quando atribuída a uma única vCPU, programa seus encadeamentos como se tivesse apenas uma CPU. Não importa quantos núcleos estão na máquina física subjacente. (Embora seja interessante notar que a máquina física pode programar esse thread de VM em um núcleo físico para um quantum de thread ou fatia de tempo e, em seguida, executá-lo em um núcleo físico diferente na próxima vez que ele estiver programado para ser executado. Não há nenhuma ideia de que isso esteja acontecendo, tudo o que se sabe é que ele só pode agendar um thread de cada vez, um após o outro, porque ele tem apenas uma CPU virtual.

E vamos ser muito claros sobre nossos termos aqui. Você atribui vCPUs, ou CPUs virtuais, às VMs, não aos "núcleos". Núcleos (pelos quais suponho que você quer dizer unidades de processamento físico que compartilham um único soquete físico) não são iguais a vCPUs. Existe uma camada de abstração entre eles. Se uma VM tiver apenas 1 vCPU atribuída a ela, só poderá agendar um thread para ser executado por vez. É por isso que sua máquina virtual é executada mais rapidamente com 2 ou 4 CPUs virtuais atribuídas a ela, pois agora ela pode agendar mais de um thread para execução simultânea.

No entanto, existe definitivamente uma lei de retornos decrescentes, já que um número excessivo de CPUs virtuais incorrem em custos indiretos cada vez maiores em coisas como sincronização, etc.

Existem pequenas diferenças entre o modo como os hipervisores Hyper-V e VMware agendam segmentos de máquinas virtuais para execução e diferem em sua abordagem à "assinatura excessiva" de recursos físicos, mas esse é um conceito geral bom para começar.

    
por 23.07.2013 / 20:47
3

A quantidade de CPUs virtuais designadas é importante. O software em execução na VM não está ciente do fato de estar em uma VM e de o host ser capaz de mais do que a VM é apresentada. Portanto, se você estiver executando um software que aproveite vários núcleos de CPU, em uma VM que tenha apenas um núcleo atribuído, o software agendará apenas um núcleo para suas tarefas, e a VM também usará apenas um núcleo de host em um tempo. Depois de fornecer à VM mais núcleos, o software pode agendar mais tarefas paralelas, que a CPU dos hosts programará para a VM.

Cuidado para não dar muito as VMs, para não causar contenção, se uma VM tiver mais núcleos virtuais do que o host, a VM estará lutando contra ela mesma e, no caso de hipervisores agendados de gangues, como vmware, a VM nunca poderá executar qualquer coisa (a opção de indisponibilidade é bloqueada pela camada de gerenciamento, é claro).

    
por 23.07.2013 / 20:50