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.
ryan@myotherpcisacloud.com
#>
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); }
}
}
}