Edycja: Aktualizacja 1 października 2013 r. - Niektóre z moich pierwotnych odpowiedzi stały się nieaktualne.
Nie jestem pewien, czy nadal jesteś aktywny na tej stronie, czy to zobaczysz, ale chciałem, abyś wiedział, że przeczytałem to pytanie dzisiaj i to mnie zafascynowało, więc spędziłem cały dzień (kiedy powinienem był pracowałem) badając wewnętrzne funkcje Hyper-V i Windows, a nawet zagłębiając się w same koncepcje wirtualizacji w nadziei, że będę gotowy odpowiedzieć na twoje pytanie.
Pozwolę sobie powiedzieć, że pochodzę z punktu widzenia Hyper-V jako platformy do wirtualizacji, ponieważ właśnie tam mam największe doświadczenie. Mimo, że mogą istnieć pewne zasady wirtualizacji, o których wiemy, że nie można się od nich odstąpić, Microsoft, VMware i Xen mają różne strategie projektowania swoich hiperwizorów.
To pierwsza rzecz, która sprawia, że twoje pytanie jest trudne. Zadajesz swoje pytanie, jakby było hiperwizorem-agnostykiem, podczas gdy tak naprawdę nie jest. Na przykład Amazon EC2 korzysta z hiperwizora Xen, a metryka „Czas kradzieży CPU” widoczna w danych wyjściowych top
polecenia wydanego z maszyny wirtualnej z systemem Linux działającej na tym hiperwizorze jest wynikiem usług integracji zainstalowanych w tym systemie-gościu (lub narzędzia obsługujące wirtualizację gościa) w połączeniu z danymi dostarczonymi przez tego konkretnego hiperwizora.
Po pierwsze, pozwól mi od razu odpowiedzieć na twoje pytanie: nie ma sposobu, aby zobaczyć z wnętrza maszyny wirtualnej z systemem Windows, ile czasu procesory należące do maszyny fizycznej, na której działa hiperwizor, spędza inne rzeczy, chyba że określone narzędzia wirtualne / usługi lub narzędzia obsługujące wirtualizację dla konkretnego hiperwizora są instalowane na maszynie wirtualnej gościa ikonkretny hiperwizor, na którym działa gość, udostępnia te dane gościowi. Nawet gość systemu Windows działający na hiperwizorze Hyper-V nie będzie miał natychmiastowego dostępu do informacji dotyczących czasu spędzonego przez inne procesory na hiperwizorze. (Cytując voretaq7, coś, co „łamie czwartą ścianę”). Mimo że systemy operacyjne klienta i serwera Windows działające jako zwirtualizowani goście w Hyper-V z zainstalowanymi prawidłowymi usługami / narzędziami integracji wykorzystują „oświecenia” (które są dosłownie jądrem zmiany kodu wprowadzone specjalnie dla maszyn wirtualnych), które znacznie zwiększają ich wydajność w korzystaniu z zasobów hosta fizycznego, dolna linia jest taka, że hiperwizor nie maaby przekazać gościowi więcej informacji niż chce. Oznacza to, że hiperwizor nie musi mówić maszynie wirtualnej gościa, co robi poza obsługą tej maszyny wirtualnej ... chyba że chce. Ta informacja o tym, co jeszcze robią procesory fizyczne, jest niezbędna do uzyskania metryki z perspektywy maszyny wirtualnej, takiej jak „Czas kradzieży procesora: procent czasu, w którym vCPU czeka na fizyczny procesor”.
Skąd system operacyjny gościa może to wiedzieć, skoro nawet nie zdaje sobie sprawy, że tak naprawdę został zwirtualizowany?
Innymi słowy, bez odpowiednich narzędzi integracyjnych zainstalowanych na gościu, system operacyjny gościa nie będzie nawet wiedział, że jego procesor jest w rzeczywistości procesorem v . Nie będzie nawet wiedział, że istnieje inna siła poza nim „kradnąca” cykle procesora, dlatego ta metryka nie będzie istnieć na maszynie wirtualnej gościa.
VMware zaczęło udostępniać te dane gościom Windows, a także ESXi 5.0. Narzędzia integracyjne VMware również wymagają aktualizacji u gościa. Oto odniesienie ; nazywają to „czasem skradzionego procesora”.
Hiperwizor, taki jak Hyper-V, nie zapewnia gościom bezpośredniego dostępu do zasobów fizycznych, takich jak procesory fizyczne lub rdzenie procesorów. Zamiast tego hypervisor daje im vDevs - urządzenia wirtualne - takie jak vCPU.
Doskonały przykład tego: powiedzmy, że system operacyjny gościa maszyny wirtualnej wywołuje funkcję opróżnienia TLB (bufora z tłumaczeniem), który jest fizycznym składnikiem fizycznego procesora. Gdyby systemowi-gościowi zezwolono na wyczyszczenie całej TLB na fizycznym procesorze, miałoby to negatywny wpływ na wydajność dla wszystkich innych maszyn wirtualnych, które również współużytkują tę samą fizyczną TLB. W przypadku systemu Windows to wywołanie w systemie gościa jest tłumaczone na wywołanie „hypercall” lub „enlightened”, które jest interpretowane przez hiperwizora tak, że tylko sekcja TLB, która jest odpowiednia dla tej maszyny wirtualnej, jest opróżniana.
(Co ciekawe, to sugeruje mi, że maszyny wirtualne, które nie mają odpowiednich narzędzi i / lub usług integracji, mogą mieć wpływ na wydajność wszystkich innych maszyn wirtualnych na tym samym hoście, ale jest to całkowicie poza zakresem tego tematu .)
Wszystko po to, aby powiedzieć, że nadal możesz wykryć na hoście Hyper-V czas, jaki procesor wirtualny spędził, czekając na udostępnienie prawdziwego procesora, aby mógł on zostać uruchomiony. Ale możesz zobaczyć te dane tylko w hiperwizorze Windows Hyper-V. Jeśli jest to możliwe do zobaczenia w innych hiperwizorach, wzywam innych, aby powiedzieli nam, jak to zobaczyć w tym hiperwizorze, a także jeśli jest on wystawiony na gości. (Edytuj 10/1/2013 Dziękuję evilensky za to, że właśnie to zrobiłeś!)
Moja maszyna testowa to Hyper-V Server 2012, która jest bezpłatną wersją Server 2012, która działa tylko w roli Core i Hyper-V. W rzeczywistości działa tak samo jak każdy system Windows Server 2012 z funkcją Hyper-V.
Uruchom Perfmon na partycji nadrzędnej, zwanej też hostem fizycznym. Załaduj ten licznik:
Hyper-V Hypervisor Virtual Processor\CPU Wait Time Per Dispatch\*
Zauważysz, że będzie wystąpienie tego licznika dla każdej maszyny wirtualnej na tym hiperwizorze, a także _Total. Definicja tego licznika Perfmon firmy Microsoft to:
Średni czas (w nanosekundach) spędzony na oczekiwaniu na wysłanie procesora wirtualnego do procesora logicznego.
Oczywiście chcesz, aby ta liczba była jak najniższa. W przypadku komputerów oczekiwanie prawie nigdy nie jest dobrą rzeczą.
Inne liczniki wydajności na hypervisor, które będą chciały zbadać to Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time
, % Hypervisor Run Time
i % Total Run Time
. Liczniki te podają wartości procentowe, które można wykorzystać do ustalenia faktów, takich jak czas, jaki „rzeczywiste” procesory spędzają, wykonując czynności inne niż serwisowanie maszyny wirtualnej lub wszystkich maszyn wirtualnych.
Podsumowując, metryka, której szukasz na maszynie wirtualnej gościa, zależy od hiperwizora, na którym on działa, od tego, czy hiperwizor zdecyduje się dostarczyć dane o tym, jak spędza swój czas poza obsługą tej maszyny wirtualnej, i czy gość System operacyjny ma odpowiednie narzędzia / usługi / sterowniki integracji wirtualizacji, aby być wystarczająco świadomym, aby zdać sobie sprawę, że hiperwizor udostępnia te dane.
Nie znam żadnego sposobu na gościa Windows, zainstalowanych lub nie narzędzi integracyjnych, aby zobaczyć, ile czasu, pod względem sekund lub procentu, który host maszyny wirtualnej spędził na jego serwisowaniu lub nie na obsługiwaniu go w stosunku do całkowitego czasu procesora fizycznego. (Edycja 10/1/2013: ESXi 5.0 lub nowszy udostępnia te dane maszynie wirtualnej gościa za pośrednictwem narzędzi integracji. Nadal nic w Hyper-V.)
Xen paravirtual
trybie, który jest parawirtualizowaną domeną (tj. Nie pełna wirtualizacja, system gościa jest zmodyfikowany do działania na hoście), gdzie dostępny jest czas kradzieży , w porównaniu z Windows / FreeBSD / ... uruchomieni gościeXen HVM
, która jest domeną emulowaną sprzętowo (tzn. system gościa nie jest zmodyfikowany do działania na hoście), gdzie najwyraźniej tak nie jest - więc zdecydowanie negatywna odpowiedź, chyba to się liczy. Czy dobrze przeczytałem, że można go w końcu dodać?FWIW, właśnie przejrzałem liczniki Perfmon serwera Windows 2008r2 działającego pod Hyper-V i nie widziałem nic związanego z czasem kradzieży (ani z wirtualizacją w ogóle).
źródło