Określanie maszyny wirtualnej wykonującej operacje we / wy na hoście funkcji Hyper-V

13

Jak dowiedzieć się, która maszyna wirtualna jest odpowiedzialna za większość operacji we / wy widzianych za pomocą funkcji Hyper-V?

Sytuacja: mam hosty Hyper-V z wieloma maszynami wirtualnymi (około 30 na hosta), w których czasami widzę dłuższe okresy dużego wykorzystania dysku. Chciałbym wiedzieć, która VM to powoduje.

Próbowałem użyć Process Explorera, ale zgłosiło to, że wszystkie operacje we / wy związane z funkcją Hyper-V były obsługiwane przez proces „System”, więc nie ma tu żadnej pomocy

eksplorator procesów

Już pomogłoby to uzyskać podział według plików, do których uzyskano dostęp. Pełna instalacja GUI systemu Windows Server zawiera Monitor zasobów, który dostarcza te informacje. Jednak Resmon wydaje się być niedostępny w instalacjach Core i Hyper-V.

the-wabbit
źródło
@RyanRies nie, nie widzę vmwp.exe zaangażowanego w żaden z I / O. Ponieważ nie wiem, które dyski będą ładowane, nie mogę stwierdzić, czy pobiera ścieżkę kodu IDE, czy SCSI, oba wydają się równie możliwe.
the-wabbit

Odpowiedzi:

9

Otwórz Monitor wydajności (uruchamiany jako administrator) na lokalnej stacji roboczej. Dodaj licznik, wybierz liczniki z maszyny Hyper-V, wirtualnego kontrolera IDE Hyper-V lub wirtualnego urządzenia magazynującego Hyper-V, wybierz liczniki i instancje (VM) odpowiednio do potrzeb. Być może będziesz musiał trochę rozejrzeć się, aby znaleźć licznik, który jest dla ciebie najbardziej sensowny.

Istnieje kilka dobrych wskazówek, których liczników należy szukać w Monitorowaniu wydajności funkcji Hyper-V

Chris S.
źródło
Próbowałem tego. Nie przyniosło to użytecznych rezultatów i nie mam pojęcia, dlaczego tak jest. Na początku miałem problem ze zlokalizowaniem liczników Virtual Storage Device - wygląda na to, że nie są one obecne w moich instalacjach. Ponieważ większość moich dysków to IDE, dałem wirtualnemu kontrolerowi IDE zastrzyk, ale z jakichś niezgłębionych powodów nie zwraca nic poza zerami dla instancji faktycznie powodującej obciążenie (na które natknąłem się w międzyczasie) - podczas gdy inne przypadki wydają się przynosić rozsądne wartości.
the-wabbit
2
Jeśli masz zainstalowane rzeczy związane z integracją VM, nie używasz IDE (niezależnie od tego, co mówi ekran konfiguracji; nie zaczynaj od złych wyborów ekranu konfiguracji MS), więc musisz użyć liczników Virt Stor Dev. Te ostatnie dotyczą VHD, a nie VM, więc wiąże się to z dereferencją.
Chris S
To wyjaśnia. W końcu znalazłem wirtualne urządzenie magazynujące, wydaje się, że zwraca rozsądne wartości dla wirtualnych dysków.
the-wabbit
Chris S ma rację. Dokładna nazwa licznika monitora wydajności, do którego się odnosi, to „Wirtualne urządzenie pamięci masowej Hyper-V”. Tj. „Długość kolejki” w tej kategorii daje dobry wgląd w to, które pliki VHD (X) mają największe opóźnienia w komunikacji z dyskiem.
Koen Zomers
2

Syneticon-dj, napisałem coś dla ciebie dziś po południu. Myślałem, że ten problem jest interesujący, więc ten prosty skrypt da ci odczyt i zapis statystyki IO na każdej działającej maszynie wirtualnej na hoście Hyper-V. Jako dodatkowy bonus wiąże każdą maszynę wirtualną z identyfikatorem procesu vmwp.exe.

Możesz uruchomić to na serwerze Hyper-V, ponieważ nie wymaga GUI.

Minusem jest to, że podczas pracy nad tym zauważyłem, że liczniki wydajności działały przez chwilę świetnie, a potem bez wyraźnego powodu postanowili pozostać na zero. Cóż, może nie jest to błąd, jak mówi Chris S. ... ale te liczniki mogą niestety nie być zbyt przydatne. Niezależnie od tego bardzo łatwo byłoby zmodyfikować skrypt, aby korzystać z Virt. Zamiast tego liczniki urządzeń pamięci masowej.

Dane wyjściowe wyglądają następująco:

PID     VMName               ReadBytesPerSec             WriteBytesPerSec
---     ------               ---------------             ----------------
5108    DC02                          483.90                            0
2796    DC01                               0                            0
3348    ECA01                     4782668.27                            0

#Requires -Version 3
function Get-VMPidAndIO
{
<#
.SYNOPSIS
    Gets the Process ID and I/O statistics of each virtual machine running on the Hyper-V host.
.DESCRIPTION
    Gets the Process ID and I/O statistics of each virtual machine running on the Hyper-V host.
    Currently only works for VMs using virtual IDE controllers.
    Requires Powershell 3 at a minimum.
.LINK
    http://myotherpcisacloud.com
.NOTES
    Written by Ryan Ries, June 2013.
    [email protected]
#>
    BEGIN
    {
        Try
        {
            $VMProcesses = Get-CimInstance -Query "Select ProcessId,CommandLine From Win32_Process Where Name ='vmwp.exe'" -ErrorAction Stop
        }
        Catch
        {
            Write-Error $_.Exception.Message
            Return
        }
    }
    PROCESS
    {

    }
    END
    {
        Foreach($_ In $VMProcesses) 
        {
            $VMName = $((Get-VM | Where Id -EQ $_.CommandLine.Split(' ')[-1]).Name)            
            [PSCustomObject]@{PID=$_.ProcessId;
                              VMName=$VMName; 
                              ReadBytesPerSec=[Math]::Round($(Get-Counter "\Hyper-V Virtual IDE Controller (Emulated)($VMName`:Ide Controller)\Read Bytes/sec").CounterSamples.CookedValue, 2);
                              WriteBytesPerSec=[Math]::Round($(Get-Counter "\Hyper-V Virtual IDE Controller (Emulated)($VMName`:Ide Controller)\Write Bytes/sec").CounterSamples.CookedValue, 2); }
        }

    }
}
Ryan Ries
źródło
To nie jest błąd, zobacz komentarze w mojej odpowiedzi.
Chris S
Zastanawiam się więc, dlaczego liczniki wydają się działać sporadycznie? (Goście Windows z pełnymi usługami integracji). Dlaczego zamiast tego wybierają znacznie mniej użyteczny poziom abstrakcji liczników na VHD? :(
Ryan Ries
Nie jestem pewien, dlaczego miałby pokazywać cokolwiek z przerwami. Jeśli chodzi o to, dlaczego tak działa pamięć w Hyper-V. Zasadniczo istnieje tylko jeden kontroler pamięci dla wszystkich maszyn wirtualnych. Używając „kontrolera IDE” w konfiguracji, po prostu włączasz emulację IDE dla pamięci wystawionej na tę maszynę wirtualną (w przeciwieństwie do „kontrolera SCSI”, który nie ma nic wspólnego z SCSI, a jedynie wyłącza emulację kontrolera pamięci) . Maszyny wirtualne obsługujące usługi integracji pomijają emulację IDE. Liczniki kontrolera pamięci nie dbają dokładnie o to, jaka maszyna wirtualna jest podłączona do każdego dysku VHD, stąd sposób, w jaki działa.
Chris S
Niesamowite. Dzięki za informację. Jestem bardzo zainteresowany przeczytaniem więcej na ten temat, ale trudno mi znaleźć dobrą dokumentację techniczną. Myślę, że byłoby dobrze, gdyby stwardnienie rozsiane (MS) demistyfikowało dla nas wiele z tych rzeczy. Będziemy w stanie zaufać ich rozwiązaniom. Chcę tylko książkę o Hyper-V Internals . Czy to zbyt wiele, aby zapytać? :)
Ryan Ries
1

Obie pozostałe odpowiedzi są przydatne. Ale okazuje się, że otrzymuję to, czego szukasz o wiele łatwiej (kiedy dyski VHD są przechowywane na lokalnych lub lokalnie udostępnianych dyskach zamiast na serwerze plików), otwierając „Monitor zasobów” i patrząc na kartę Dysk. Spójrz na „Aktywność dysku” i sortuj według „Razem (B / s)”. Wyświetlone zostaną dyski VHD w kolejności ich aktywności.

Oczywiście moją strategią jest luźne przybliżenie maszyn, do których jesteś zalogowany lokalnie, co czyni ją mniej użyteczną w dużym, bezgłowym środowisku.

Jake Oshins
źródło
1
Jake, dziękuję za poświęcenie czasu na odpowiedź. Chciałbym naprawdę kochać się tylko patrzeć na monitorze zasobów, jednak nie jest dostępna, gdy serwer nie pracuje pełną graficzną instalacji, a jedynie wydanie Hyper-V lub Server Core. Co mam
the-wabbit
1

Napisałem narzędzie GUI programu PowerShell gromadzące dane o wydajności gościa dla wszystkich maszyn wirtualnych znalezionych na wybranych hostach Hyper-V. Zbieranie i dopasowywanie danych odbywa się za pomocą informacji WMI get-counter i Hyper-V. Uruchom z dowolnego serwera członkowskiego, nie wymaga modułów. Mam nadzieję, że pomoże to w szybkim rozwiązywaniu problemów z wydajnością na hostach Hyper-V i maszynach wirtualnych.

Pokaż statystyki wydajności gościa maszyny wirtualnej Hyper-V (PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54

Ruud Borst
źródło
0

Możesz wypróbować narzędzie innej firmy, które może pomóc w wykryciu maszyny wirtualnej, która powoduje wysokie We / Wy, a także ma możliwość ostrzegania o tak wysokich We / Wy. Możesz to sprawdzić tutaj - Monitor VM ApexSQL .

To narzędzie może monitorować duże spektrum liczników dysków dla hosta i maszyny wirtualnej, a oprócz predefiniowanych liczników można je skonfigurować do monitorowania i wyświetlania graficznej prezentacji liczników z monitora wydajności.

Mam nadzieję, że pomogłem.

McRobert
źródło