Syirecton-dj, tôi đã viết một cái gì đó cho bạn chiều nay. Tôi nghĩ vấn đề này rất thú vị, vì vậy tập lệnh đơn giản này sẽ cung cấp cho bạn các chỉ số IO đọc và ghi trên mỗi VM đang chạy trên máy chủ Hyper-V. Là một phần thưởng bổ sung, nó liên kết mỗi VM với ID tiến trình của vmwp.exe.
Bạn có thể chạy nó trên máy chủ Hyper-V của mình, vì nó không cần GUI.
Nhược điểm là trong khi tôi đang làm việc này, tôi nhận thấy rằng các bộ đếm hiệu suất đã hoạt động rất tốt trong một thời gian, và sau đó không có lý do rõ ràng nào mà họ quyết định giữ nguyên số 0. Có lẽ đó không phải là một lỗi, như Chris S nói ... nhưng thật ra, những quầy này có thể không hữu ích lắm. Bất kể, sẽ rất dễ dàng để sửa đổi tập lệnh để sử dụng Virt. Thiết bị lưu trữ quầy thay thế.
Đầu ra trông như thế này:
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); }
}
}
}