Syneticon-dj ฉันเขียนอะไรบางอย่างให้คุณบ่ายนี้ ฉันคิดว่าปัญหานี้น่าสนใจดังนั้นสคริปต์ง่ายๆนี้จะให้สถิติการอ่านและการเขียน IO แก่คุณในการรัน VM บนโฮสต์ Hyper-V โบนัสเพิ่มเติมจะเชื่อมโยง VM แต่ละตัวกับ ID กระบวนการของ vmwp.exe
คุณสามารถเรียกใช้สิ่งนี้บนเซิร์ฟเวอร์ Hyper-V ของคุณเพราะมันไม่จำเป็นต้องมี GUI
ข้อเสียคือในขณะที่ฉันกำลังทำสิ่งนี้ฉันสังเกตเห็นว่าตัวนับประสิทธิภาพได้ทำงานได้ดีในขณะนั้นและด้วยเหตุผลที่มองไม่เห็นพวกเขาตัดสินใจที่จะอยู่ในศูนย์ทั้งหมด อาจจะไม่ใช่ข้อผิดพลาดอย่างที่ Chris S บอก ... แต่เคาน์เตอร์เหล่านี้อาจไม่ได้มีประโยชน์มากนัก ไม่ว่าจะเป็นการง่ายมากที่จะแก้ไขสคริปต์เพื่อใช้ Virt เคาน์เตอร์อุปกรณ์เก็บข้อมูลแทน
ผลลัพธ์มีลักษณะดังนี้:
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); }
}
}
}