Editar: Atualização em 1º de outubro de 2013 - Algumas das minhas respostas originais se tornaram obsoletas.
Não tenho certeza se você ainda está ativo neste site ou se verá isso, mas queria que soubesse que li essa pergunta hoje e que me fascinou, e passei o dia todo (quando deveria (trabalhando) pesquisando internamente o Hyper-V e Windows e até explorando os próprios conceitos de virtualização, na esperança de que eu esteja pronto para responder à sua pergunta.
Permita-me dizer que venho do ponto de vista do Hyper-V como uma plataforma de virtualização, porque é aí que tenho mais experiência. Embora possa haver certos princípios de virtualização, como a conhecemos, que não podem ser desviados, a Microsoft, a VMware e o Xen têm estratégias diferentes para projetar seus hipervisores.
Essa é a primeira coisa que torna sua pergunta desafiadora. Você coloca a sua pergunta como se fosse hipnótica por hipervisor, quando na verdade não é. O Amazon EC2, por exemplo, usa o hipervisor Xen e a métrica "CPU Steal Time" que você vê na saída de um top
comando emitido de dentro de uma VM Linux em execução nesse hipervisor, resultado dos serviços de integração instalados no SO convidado (ou ferramentas com reconhecimento de virtualização no convidado) em conjunto com os dados fornecidos por esse hypervisor específico.
Primeiro, deixe-me responder sua pergunta diretamente: não há como ver de dentro de uma máquina virtual executando o Windows quanto tempo os processadores pertencentes à máquina física na qual o hipervisor é executado passam fazendo outras coisas, a menos que as ferramentas virtuais específicas / serviços ou ferramentas com reconhecimento de virtualização para seu hypervisor específico são instalados na VM convidada eo hipervisor específico no qual o convidado está executando expõe esses dados ao convidado. Mesmo um convidado do Windows executando em um hipervisor Hyper-V não terá acesso imediato a informações sobre o tempo gasto pelos processadores físicos no hipervisor fazendo outras coisas. (Para citar o voretaq7, algo que "quebra a quarta parede".) Embora os sistemas operacionais cliente e servidor Windows executando como convidados virtualizados no Hyper-V com os serviços / ferramentas de integração corretos instalados façam uso de "esclarecimentos" (que são literalmente kernel) alterações de código feitas especialmente para VMs) que aumentam significativamente seu desempenho no uso dos recursos de um host físico; o ponto principal é que o hypervisor não possuipara fornecer mais informações ao SO convidado do que ele deseja. Isso significa que o hipervisor não precisa informar a uma VM convidada o que mais está fazendo além de atender à VM ... a menos que queira. E essas informações sobre o que mais os processadores físicos estão fazendo são necessárias para derivar uma métrica da perspectiva da VM, como "Tempo de Roubo de CPU: a porcentagem de tempo que a vCPU aguarda uma CPU física".
Como o sistema operacional convidado sabia disso, se nem percebeu que estava realmente virtualizado?
Em outras palavras, sem as ferramentas de integração corretas instaladas no convidado, o sistema operacional convidado nem saberá que sua CPU é realmente uma v CPU. Ele nem saberá que existe outra força fora de si mesma "roubando" os ciclos da CPU, portanto essa métrica não existirá na VM convidada.
A VMware começou a expor esses dados para convidados do Windows e para o ESXi 5.0. As ferramentas de integração da VMware também precisam ser atualizadas no convidado. Aqui está uma referência ; eles se referem a ele como "Tempo roubado da CPU".
Um hipervisor como o Hyper-V não oferece aos convidados acesso direto a recursos físicos, como processadores físicos ou núcleos de processador. Em vez disso, o hipervisor fornece a eles vDevs - dispositivos virtuais - como vCPUs.
Um excelente exemplo do porquê: digamos que um sistema operacional convidado da máquina virtual faça a chamada para liberar o TLB (buffer de observação da tradução), que é um componente físico de uma CPU física. Se o sistema operacional convidado tivesse permissão para limpar o TLB inteiro em um processador físico, isso teria efeitos negativos no desempenho de todas as outras VMs que também estavam compartilhando o mesmo TLB físico. No caso do Windows, essa chamada no sistema operacional convidado é convertida em uma chamada "hipercall" ou "iluminada", que é interpretada pelo hipervisor para que apenas a seção do TLB relevante para essa máquina virtual seja liberada.
(Curiosamente, isso sugere que as VMs convidadas que não possuem as ferramentas e / ou serviços de integração apropriadas podem ter a capacidade de afetar o desempenho de todas as outras VMs no mesmo host, mas isso está completamente fora do escopo deste tópico .)
Tudo isso para dizer que você ainda pode detectar em um host Hyper-V o tempo que um processador virtual gastou esperando que um processador real se tornasse disponível para que ele pudesse agendar a execução. Mas você só pode ver esses dados em um hypervisor Windows Hyper-V. Se for possível ver isso em outros hipervisores, peço aos outros que nos digam como ver isso nesse hipervisor e também se estiver exposto aos convidados. (Edit 01/10/2013 Obrigado evilensky por fazer exatamente isso!)
Minha máquina de teste foi o Hyper-V Server 2012, que é a edição gratuita do Server 2012 que executa apenas o Core e a função Hyper-V. É efetivamente o mesmo que qualquer Windows Server 2012 executando o Hyper-V.
Inicie o Perfmon na partição pai, também conhecida como host físico. Carregue este contador:
Hyper-V Hypervisor Virtual Processor\CPU Wait Time Per Dispatch\*
Você notará que haverá uma instância desse contador para cada máquina virtual nesse hipervisor, bem como _Total. A definição da Microsoft desse contador Perfmon é:
O tempo médio (em nanossegundos) gasto aguardando o envio de um processador virtual para um processador lógico.
Obviamente, você deseja que esse número seja o mais baixo possível. Para computadores, esperar quase nunca é uma coisa boa.
Outros contadores de desempenho no hypervisor que você vai querer investigar são Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time
, % Hypervisor Run Time
e % Total Run Time
. Esses contadores fornecem as porcentagens que podem ser usadas para determinar fatos, como quanto tempo os processadores "reais" gastam fazendo outras coisas além de atender a uma VM ou a todas as VMs.
Portanto, em conclusão, a métrica que você está procurando em uma máquina virtual convidada depende do hipervisor em que está executando, se esse hipervisor escolhe fornecer os dados sobre como ele gasta seu tempo, além de atender à VM, e se o convidado O SO possui as ferramentas / serviços / drivers de integração de virtualização certos para estar ciente o suficiente para perceber que o hipervisor está disponibilizando esses dados.
Não sei como, em um convidado do Windows, as ferramentas de integração instaladas ou não, para ver quanto tempo, em segundos ou porcentagem, o host da VM gastou para atendê-lo ou não para o tempo total do processador físico. (Edit 01/10/2013: O ESXi 5.0 ou melhor expõe esses dados à VM convidada por meio das ferramentas de integração. Ainda assim, nada no Hyper-V.)
Xen paravirtual
modo, que é um domínio paravirtualizado (ou seja, não virtualização completa, o sistema operacional convidado é modificado para ser executado no host), onde o tempo de roubo está disponível, em comparação com o Windows / FreeBSD / ... convidados em execuçãoXen HVM
, que é um domínio emulado por hardware (ou seja, o sistema operacional convidado não é modificado para ser executado no host), onde aparentemente não está - portanto, uma resposta negativa definitiva, acho que é isso o que conta. Eu li você corretamente que poderia ser adicionado eventualmente?FWIW, acabei de examinar os contadores Perfmon de um servidor Windows 2008r2 em execução no Hyper-V e não vi nada relacionado ao tempo de roubo (ou virtualização).
fonte