Détermination de la machine virtuelle faisant des E / S sur un hôte Hyper-V

13

Comment savoir quelle VM est responsable de la majorité des E / S que je vois avec Hyper-V?

La situation: j'ai des hôtes Hyper-V avec un certain nombre de machines virtuelles (environ 30 par hôte) où je vois parfois des périodes prolongées d'utilisation élevée du disque. Je voudrais savoir quelle VM est à l'origine de cela.

J'ai essayé d'utiliser Process Explorer, mais il a signalé que toutes les E / S liées à Hyper-V devaient être gérées par le processus "Système", donc aucune aide:

Explorateur de processus

Il serait déjà utile d'avoir une ventilation par fichiers accédés. L'installation GUI complète de Windows Server dispose du moniteur de ressources qui fournit ces informations. Cependant, Resmon ne semble pas être disponible dans les installations Core et Hyper-V.

le-wabbit
la source
@RyanRies non, je ne vois pas vmwp.exe impliqué dans les E / S. Comme je ne sais pas sur quels disques la charge va aller, je ne peux pas dire si elle prend l'IDE ou le chemin du code SCSI, les deux semblent également possibles.
le-wabbit

Réponses:

9

Ouvrez l'Analyseur de performances (exécuté en tant qu'administrateur) sur votre poste de travail local. Ajoutez un compteur, sélectionnez les compteurs de la machine hyper-v, du contrôleur IDE virtuel Hyper-V ou du périphérique de stockage virtuel Hyper-V, sélectionnez les compteurs et les instances (VM) comme cela semble approprié. Vous devrez peut-être pêcher un peu pour trouver le compteur qui vous convient le mieux.

Il existe de bons conseils sur les compteurs à rechercher dans la surveillance des performances Hyper-V

Chris S
la source
Mmh, j'ai essayé ça. Cela n'a pas donné de résultats utiles et je ne sais pas pourquoi. Au début, j'ai eu du mal à localiser les compteurs de périphériques de stockage virtuels - il semble qu'ils ne soient pas présents sur mes installations. Étant donné que la plupart de mes disques sont IDE, j'ai donné un coup de pouce au contrôleur IDE virtuel, mais pour des raisons insondables, il ne renvoie rien d'autre que des zéros pour l'instance causant réellement la charge (sur laquelle je suis tombé par hasard entre-temps) - tandis que d'autres instances semblent produire des valeurs sensées.
le-wabbit
2
Si vous avez installé VM Integration, vous n'utilisez pas IDE (indépendamment de ce que dit l'écran de configuration; ne me lancez pas sur les mauvais choix d'écran de configuration de MS), vous devez donc utiliser les compteurs Virt Stor Dev. Ces derniers sont par VHD, pas par VM, donc il y a un peu de déréférencement impliqué.
Chris S
Cela clarifie les choses. J'ai finalement trouvé le périphérique de stockage virtuel, il semble renvoyer des valeurs sensées pour les disques virtuels.
the-wabbit
Chris S a raison. Le nom exact du compteur du moniteur de performances auquel il se réfère est «périphérique de stockage virtuel Hyper-V». C'est-à-dire que la «longueur de la file d'attente» dans cette catégorie donne un bon aperçu de celui de vos fichiers VHD (X) qui a le plus de latence pour communiquer avec votre disque.
Koen Zomers du
2

Syneticon-dj, j'ai écrit quelque chose pour vous cet après-midi. Je pensais que ce problème était intéressant, donc ce script simple vous donnera les statistiques d'E / S en lecture et en écriture sur chaque machine virtuelle en cours d'exécution sur l'hôte Hyper-V. En prime, il associe chaque machine virtuelle à l'ID de processus de son vmwp.exe.

Vous pouvez l'exécuter sur votre serveur Hyper-V, car il n'a pas besoin d'une interface graphique.

L'inconvénient est que pendant que je travaillais sur cela, j'ai remarqué que les compteurs de performance fonctionnaient très bien pendant un certain temps, puis sans raison apparente, ils ont décidé de rester tous à zéro. Eh bien, ce n'est peut-être pas un bug, comme le dit Chris S ... mais ces compteurs pourraient malheureusement ne pas être très utiles après tout. Quoi qu'il en soit, il serait très facile de modifier le script pour utiliser Virt. Compteurs de périphériques de stockage à la place.

La sortie ressemble à ceci:

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
la source
Ce n'est pas un bug, voir les commentaires dans ma réponse.
Chris S
Alors je me demande pourquoi les compteurs semblent fonctionner par intermittence? (Invités Windows avec des services d'intégration complets.) Et pourquoi choisiraient-ils plutôt le niveau d'abstraction nettement moins utile des compteurs par VHD? :(
Ryan Ries
Je ne sais pas pourquoi cela montrerait quoi que ce soit par intermittence. Quant à savoir pourquoi, c'est la façon dont le stockage fonctionne dans Hyper-V. Essentiellement, il n'y a qu'un seul contrôleur de stockage pour toutes les machines virtuelles. En utilisant un "contrôleur IDE" dans la configuration, vous activez simplement l'émulation IDE pour le stockage exposé à cette machine virtuelle (par opposition au "contrôleur SCSI" qui n'a rien à voir avec SCSI et désactive simplement toute sorte d'émulation de contrôleur de stockage) . Les machines virtuelles qui prennent en charge Integration Services ignorent simplement l'émulation IDE. Les compteurs du contrôleur de stockage ne se soucient pas exactement de la machine virtuelle attachée à chaque disque dur virtuel, d'où son fonctionnement.
Chris S
Impressionnant. Merci pour l'info. Je suis extrêmement intéressé à en savoir plus à ce sujet, mais j'ai du mal à trouver une bonne documentation technique. Je pense qu'il appartiendrait à MS de démystifier beaucoup de ces choses pour nous. Nous serions en mesure de faire plus confiance à leurs solutions. Je veux juste un livre Hyper-V Internals . Est-ce trop demander? :)
Ryan Ries
1

Les deux autres réponses sont utiles. Mais je trouve que j'obtiens ce que vous cherchez beaucoup plus facilement (lorsque les disques durs virtuels sont stockés sur des disques locaux ou partagés localement au lieu d'un serveur de fichiers) en ouvrant "Resource Monitor" et en regardant l'onglet Disque. Regardez "Activité du disque" et triez par "Total (B / sec)". Vous verrez les disques durs virtuels répertoriés dans l'ordre de leur activité.

Évidemment, ma stratégie est une approximation lâche pour les machines auxquelles vous êtes connecté localement, ce qui la rend moins utile dans un grand environnement sans tête.

Jake Oshins
la source
1
Jake, merci d'avoir pris le temps de répondre. Je voudrais vraiment aime simplement regarder l'écran des ressources, mais il est disponible lorsque le serveur ne fonctionne pas une installation graphique complète , mais seule l'édition Hyper-V ou Server Core. C'est ce que j'ai.
le-wabbit
1

J'ai écrit un outil GUI PowerShell rassemblant des données de performances invité pour toutes les machines virtuelles trouvées sur les hôtes Hyper-V sélectionnés. La collecte et la mise en correspondance des données sont effectuées avec les informations get-counter et Hyper-V WMI. Exécutez à partir de n'importe quel serveur membre, aucun module requis. J'espère que cela vous aidera à résoudre rapidement les problèmes de performances sur les hôtes Hyper-V et les machines virtuelles.

Afficher les statistiques de performances des invités de la machine virtuelle Hyper-V (PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54

Ruud Borst
la source
0

Vous voudrez peut-être essayer un outil tiers qui peut vous aider à détecter une machine virtuelle qui provoque des E / S élevées, et a également la possibilité d'alerter sur ces E / S élevées. Vous pouvez le vérifier ici - ApexSQL VM Monitor .

Cet outil peut surveiller un large spectre de compteurs de disque pour l'hôte et la machine virtuelle, et à côté des compteurs prédéfinis, il peut être configuré pour surveiller et afficher la présentation graphique des compteurs à partir du moniteur de performances.

J'espère que j'ai aidé.

McRobert
la source