Syneticon-dj, ho scritto qualcosa per te questo pomeriggio. Ho pensato che questo problema fosse interessante, quindi questo semplice script ti fornirà le statistiche IO di lettura e scrittura su ogni VM in esecuzione sull'host Hyper-V. Come bonus aggiuntivo associa ogni VM all'ID processo del suo vmwp.exe.
Puoi eseguirlo sul tuo server Hyper-V, perché non ha bisogno di una GUI.
Il rovescio della medaglia è che mentre stavo lavorando su questo, ho notato che i contatori delle prestazioni funzionavano alla grande per un po ', e quindi, per nessuna ragione evidente, hanno deciso di rimanere tutti a zero. Beh, forse non è un bug, come dice Chris S ... ma questi contatori potrebbero purtroppo non essere molto utili dopo tutto. Indipendentemente da ciò, sarebbe molto facile modificare lo script per usare la Virt. Contatori dispositivo di archiviazione invece.
L'output è simile al seguente:
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); }
}
}
}