Existe um equivalente do Windows para 'CPU steal time' do Unix?

24

A fim de avaliar o desempenho monitorando precisão em virtualização de plataformas, a CPU roubar o tempo tornou-se uma vez mais relevante métrica - ver EC2 monitoramento: o caso da CPU roubado para um resumo instrutiva no contexto do Amazon EC2 papel do e IBM em tempo de CPU contabilidade para uma explicação técnica mais aprofundada (incluindo ilustrações) do conceito:

Tempo de roubo é a porcentagem de tempo que uma CPU virtual aguarda uma CPU real enquanto o hipervisor está atendendo outro processador virtual.

Consequentemente, ele está exposto na maioria das ferramentas de monitoramento Unix / Linux relacionadas atualmente - veja, por exemplo, as colunas % steal ou st in sarou top:

st - Steal Time
A quantidade de CPU 'roubada' desta máquina virtual pelo hypervisor para outras tarefas (como executar outra máquina virtual).

Eu não consegui descobrir como capturar a mesma métrica no Windows, isso já é possível? (Ideal para as AMIs do Windows 2008 Server R2 no EC2 e através dos respectivos contadores de desempenho do Windows, é claro.)

Steffen Opel
fonte

Respostas:

33

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 topcomando 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 Timee % 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.)

Ryan Ries
fonte
1
+1 - resposta épica é épica
Mark Henderson
1
+1 para a exploração completa, de fato, muito apreciada. Portanto, com relação ao EC2, isso aparentemente se resume a convidados Unix / Linux executando no Xen paravirtualmodo, 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ção Xen 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?
Steffen Opel
2
Poderia, em teoria, mas não prenda a respiração. Como eu disse, ele exige que o hipervisor específico do fornecedor e o SO convidado específico do fornecedor façam um esforço coordenado para disponibilizar e acessar esses dados sobre o host físico a partir da VM convidada. wiki.xen.org/wiki/Xen_Kernel_Feature_Matrix
Ryan Ries
2
Tangencial: os hipervisores da VMware se referem à equipe de roubo como tempo de espera - a quantidade de tempo que uma CPU virtual aguarda para ser atendida por um recurso físico.
Yolo Perdiem 12/12/12
1
este é um tópico bem conhecido no mainframe. A métrica está disponível há décadas. É chamado de "espera no processador".
2

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).

uSlackr
fonte
Obrigado por verificar - aparentemente os contadores de virtualização para Hyper-V devem estar realmente disponíveis, talvez precisem ser instalados / ativados de alguma forma primeiro? Ainda não consigo identificar / deduzir uma métrica semelhante / relacionada entre elas.
Steffen Opel