Hyper-V Thread Priorities host e guest - como eles correspondem?

5

Sim, pergunta engraçada.

Dado: um host para máquinas virtuais Hyper-V. Um cluster do tipo HPC.

Existem várias máquinas virtuais. Eles não usam a CPU na maioria das vezes. Também executamos um cluster de estilo HPC em casa - os agentes puxam Jobs e os processam.

Há uma conversa para instalar o agente em nossas máquinas Hyper-V. No Momento, isso nos daria um aumento significativo no desempenho - isso levará o verão até que realmente criemos o hardware para o cluster de cálculo.

Os agentes estão executando todos os cálculos em threads de baixa prioridade. Para computadores normais, isso significa que o agente basicamente maximiza o uso da CPU, mas não interfere de fato com a operação do computador em si - eu até posso assistir a um DVD enquanto o agente está sendo executado.

Agora, como é isso com o Hyper-V? Qual prioridade "thred" o núcleo do Hyper-V fornece ao processador virtual? A partição raiz tem prioridades mais altas que as máquinas virtuais? Eu não quero que os agentes interfiram nas máquinas virtuais em execução.

    
por TomTom 01.01.2013 / 17:06

2 respostas

5

A partição pai do Hyper-V, ou sistema operacional de gerenciamento, é especial no hypervisor. Se seus processadores virtuais forem executáveis, eles receberão um grande aumento na prioridade sobre as VMs convidadas. Isso porque, em uma configuração suportada do Hyper-V, a única coisa que o SO de gerenciamento faz (estatisticamente falando) é a E / S em nome das VMs convidadas. Se você instalar qualquer outra coisa no sistema operacional de gerenciamento, você irá se antecipar ao trabalho em nome das VMs convidadas.

Suponho que isso já tenha ocorrido com você, mas você poderia fazer isso da maneira suportada. Crie uma VM que tenha essencialmente o mesmo tamanho da máquina física. Dê pesos de memória e CPU muito baixos e ative a Memória dinâmica para que, quando estiver ociosa, não use muita memória. Execute sua tarefa de computação nessa VM. O Hyper-V, então, prefere trabalhar para qualquer outro convidado que não aquele, mas use ciclos ociosos em nome de sua tarefa computacional.

    
por 02.01.2013 / 19:50
4
Primeiramente, vou tirar isso do caminho: não é recomendado executar nenhuma carga de trabalho adicional na partição pai (sistema operacional host) do Hyper-V. Seu único propósito na vida é fornecer funcionalidade de gerenciamento e controle para as outras VMs convidadas no sistema e fornecer ao administrador uma visão das outras VMs convidadas no sistema. Dito isto, você certamente pode fazê-lo e pode funcionar muito bem para você. Mas a postura oficial da Microsoft é evitar a execução de cargas de trabalho adicionais em sua partição pai. Agora que isso está fora do caminho:

Divertido diagrama de arquitetura ASCII:

| Parent | Child | Child | Child |
----------------------------------
            Hypervisor
----------------------------------
         Physical Hardware

A partição pai, que é o sistema operacional no qual você inicializa e a partir da qual você cria e controla todas as outras VMs filhas, é, na verdade, apenas outra partição lógica no mesmo nível das partições filhas. Todas essas partições são executadas em paralelo. A única diferença é que a partição raiz recebe privilégios e responsabilidades especiais pelo hypervisor. Existem pesos e reservas e limites de CPU que você pode atribuir às máquinas virtuais secundárias por meio do console de Gerenciamento do Hyper-V, mas não está claro se ou como elas seriam mapeadas para o que conhecemos como prioridades de encadeamento no hypervisor. / p>

Em sua partição raiz (ou sistema operacional de gerenciamento ou sistema operacional host), você verá uma vmms.exe e uma instância do vmwp.exe para cada máquina virtual. O VM Management Service (vmms.exe) é responsável por fornecer a interface WMI ao hipervisor, para que você possa gerenciar as VMs de um MMC. Ele também cria uma nova instância do vmwp.exe quando você cria uma nova VM no sistema. O processo de trabalho da VM (vmwp.exe) executa o trabalho de virtualização que um hipervisor monolítico típico executaria, como o gerenciamento do estado da máquina virtual.

On a system with child partitions performing lots of I/O or privileged operations, you would expect most of the CPU usage to be visible in the parent partition: you can identify them by the name Vmwp.exe (one for each child partition). The worker process also includes components responsible for remote management of the virtualization stack... -- Russinovich et al, Windows Internals 6th ed.

Mas, infelizmente, vmwp.exe não é toda a história em termos do que tudo está acontecendo dentro de uma VM, e se você está pensando em manipular a prioridade desses processos a partir do sistema operacional de gerenciamento, você provavelmente estaria em território inexplorado, possivelmente insustentável. Há também hiperchamadas e chamadas esclarecidas, etc., que podem não ser cobradas em um processo vmwp.exe, mas ainda podem ser consideradas parte da carga de trabalho geral de uma máquina virtual.

Além dos componentes críticos do Hyper-V que podem estar presentes na partição raiz e não nas partições filhas, que podem antecipar a execução de outro código VM da VM, suponho que todas as partições sejam iguais ao hypervisor em termos de agendamento de threads.

Infelizmente, a Microsoft não publica muitos artigos profundamente técnicos para responder a essas perguntas. Se não fosse por Russinovich e seus amigos, nós nem teríamos Windows Internals. Há uma breve seção lá no Hyper-V, que eu consultei ao escrever este post, mas mesmo assim é não muito mais profundo do que este post.

    
por 01.01.2013 / 19:37