การพิจารณา VM ที่ทำ I / O บนโฮสต์ Hyper-V


13

ฉันจะทราบได้อย่างไรว่า VM ชนิดใดที่รับผิดชอบต่อ I / OI ส่วนใหญ่ที่เห็นด้วย Hyper-V

สถานการณ์: ฉันมีโฮสต์ Hyper-V ที่มี VM จำนวนหนึ่ง (ประมาณ 30 ต่อโฮสต์) ที่ฉันเห็นการใช้งานดิสก์เป็นระยะเวลานาน ฉันอยากจะรู้ว่า VM เป็นสาเหตุของสิ่งนี้

ฉันพยายามใช้ Process Explorer แต่รายงานว่า I / O ที่เกี่ยวข้องกับ Hyper-V ทั้งหมดได้รับการจัดการโดยกระบวนการ "ระบบ" ดังนั้นจึงไม่มีความช่วยเหลือใน:

สำรวจกระบวนการ

มันจะช่วยให้มีการสลายโดยการเข้าถึงไฟล์ การติดตั้ง GUI เต็มรูปแบบของ Windows Server มีการตรวจสอบทรัพยากรซึ่งให้ข้อมูลนี้ อย่างไรก็ตาม Resmon ดูเหมือนจะไม่สามารถใช้งานได้ในการติดตั้ง Core และ Hyper-V


@ RyanRies ไม่ฉันไม่เห็น vmwp.exe เกี่ยวข้องกับ I / O ใด ๆ ขณะที่ฉันไม่ทราบว่าจะโหลดดิสก์ใดฉันไม่สามารถบอกได้ว่ากำลังใช้ IDE หรือเส้นทางโค้ด SCSI ซึ่งทั้งคู่ดูเหมือนจะเท่ากัน
the-wabbit

คำตอบ:


9

เปิดการตรวจสอบประสิทธิภาพ (เรียกใช้ในฐานะผู้ดูแล) บนเวิร์กสเตชันท้องถิ่นของคุณ เพิ่มตัวนับเลือกตัวนับจากเครื่อง hyper-v, ตัวควบคุม IDE เสมือน Hyper-V หรืออุปกรณ์จัดเก็บข้อมูลเสมือน Hyper-V, เลือกตัวนับและอินสแตนซ์ (VMs) ตามที่เหมาะสม คุณอาจต้องตกปลาสักหน่อยเพื่อหาเคาน์เตอร์ที่เหมาะสมกับคุณมากที่สุด

มีคำแนะนำที่ดีเกี่ยวกับตัวนับที่จะมองหาในการตรวจสอบประสิทธิภาพ Hyper-V


อืมฉันพยายามทำอย่างนั้น มันไม่ได้ผลลัพธ์ที่มีประโยชน์และฉันก็ไม่รู้ว่าทำไมมันถึงเป็นเช่นนั้น ตอนแรกฉันมีปัญหาในการค้นหาตัวนับอุปกรณ์เก็บข้อมูลเสมือน - ดูเหมือนว่าพวกเขาจะไม่ปรากฏในการติดตั้งของฉัน เนื่องจากดิสก์ส่วนใหญ่ของฉันเป็น IDE ฉันจึงให้ Virtual IDE Controller ยิง แต่ด้วยเหตุผลบางอย่างที่คาดเดาไม่ได้มันจะไม่คืนสิ่งใดนอกจากค่าศูนย์สำหรับอินสแตนซ์ที่ก่อให้เกิดการโหลดจริง (ซึ่งฉันบังเอิญไปโดยบังเอิญ) ดูเหมือนว่าจะสร้างค่าสติ
the-wabbit

2
หากคุณติดตั้ง VM Integration แล้วคุณไม่ได้ใช้ IDE (ไม่ว่าหน้าจอการตั้งค่าจะเป็นอย่างไรอย่าให้ฉันเริ่มต้นกับตัวเลือกหน้าจอ config MS ที่แย่) ดังนั้นคุณต้องใช้เคาน์เตอร์ Virt Stor Dev ส่วนหลังเป็นแบบ VHD ไม่ใช่ต่อ VM ดังนั้นจึงมีความเกี่ยวข้องเล็กน้อย
Chris S

สิ่งนี้จะล้างมัน ในที่สุดฉันก็พบอุปกรณ์จัดเก็บข้อมูลเสมือนดูเหมือนว่าจะส่งคืนค่าสติสำหรับดิสก์เสมือน
the-wabbit

Chris S พูดถูก ชื่อที่แน่นอนของตัวนับการตรวจสอบประสิทธิภาพที่เขาอ้างถึงคือ "อุปกรณ์จัดเก็บข้อมูลเสมือน Hyper-V" เช่น "ความยาวคิว" ในหมวดหมู่นี้ให้ข้อมูลเชิงลึกที่ดีเกี่ยวกับไฟล์ VHD (X) ของคุณที่มีเวลาแฝงอยู่มากที่สุดในการสื่อสารกับดิสก์ของคุณ
Koen Zomers

2

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); }
        }

    }
}

นั่นไม่ใช่ข้อผิดพลาดดูความคิดเห็นในคำตอบของฉัน
Chris S

ถ้าอย่างนั้นฉันก็สงสัยว่าทำไมตัวนับดูเหมือนทำงานเป็นระยะ? (แขกของ Windows ที่มีบริการการรวมอย่างสมบูรณ์) และทำไมพวกเขาถึงเลือกระดับที่มีประโยชน์น้อยกว่าอย่างมีนัยสำคัญของการนับต่อ VHD แทน? :(
Ryan Ries

ไม่แน่ใจว่าทำไมมันจะแสดงอะไรเป็นระยะ ๆ สำหรับเหตุผลมันเป็นวิธีการจัดเก็บข้อมูลทำงานใน Hyper-V โดยพื้นฐานแล้วจะมีเพียงคอนโทรลเลอร์ควบคุมเดียวสำหรับ VMs ทั้งหมด ด้วยการใช้ "IDE Controller" ในการกำหนดค่าคุณเพียงแค่เปิดใช้งาน IDE Emulation สำหรับที่เก็บข้อมูลที่เปิดเผยกับ VM นั้น (ซึ่งตรงกันข้ามกับ "SCSI Controller" ที่ไม่มีส่วนเกี่ยวข้องกับ SCSI และเพียงปิดการจำลองการควบคุมคอนโทรลเลอร์หน่วยเก็บข้อมูล) . VM ที่สนับสนุน Integration Services เพียงข้ามการจำลอง IDE ตัวควบคุมหน่วยเก็บข้อมูลไม่สนใจสิ่งที่ VM เชื่อมต่อกับแต่ละ VHD ดังนั้นวิธีการทำงาน
Chris S

น่ากลัว ขอบคุณสำหรับข้อมูล. ฉันสนใจที่จะอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ แต่ฉันมีปัญหาในการเปิดเอกสารทางเทคนิคที่ดี ฉันคิดว่ามันน่าจะเป็น MS ที่จะทำให้ demystify สิ่งนี้มากมายสำหรับเรา เราสามารถสร้างความมั่นใจให้กับโซลูชั่นของพวกเขาได้มากขึ้น ผมเพียงแค่ต้องการHyper-V Internalsหนังสือ มันมากเกินไปที่จะถาม? :)
Ryan Ries

1

คำตอบอื่น ๆ ทั้งสองมีประโยชน์ แต่ฉันพบว่าฉันได้รับสิ่งที่คุณกำลังมองหาได้ง่ายขึ้น (เมื่อ VHDs ถูกเก็บไว้ในดิสก์ที่ใช้ร่วมกันในพื้นที่หรือภายในเครื่องแทนที่จะเป็นไฟล์เซิร์ฟเวอร์) โดยเปิด "Resource Monitor" และดูที่แท็บดิสก์ ดูที่ "กิจกรรมของดิสก์" และเรียงลำดับตาม "รวม (B / วินาที)" คุณจะเห็น VHD แสดงตามลำดับกิจกรรม

เห็นได้ชัดว่ากลยุทธ์ของฉันคือการประมาณหลวมสำหรับเครื่องจักรที่คุณลงชื่อเข้าใช้ในพื้นที่ซึ่งทำให้มีประโยชน์น้อยกว่าในสภาพแวดล้อมที่ใหญ่และไม่มีหัว


1
เจคขอบคุณที่สละเวลาตอบ ฉันชอบที่จะดูการตรวจสอบทรัพยากร แต่ไม่สามารถใช้งานได้เมื่อเซิร์ฟเวอร์ไม่ได้ติดตั้งแบบกราฟิกเต็มรูปแบบ แต่เฉพาะรุ่น Hyper-V หรือ Server Core ซึ่งเป็นสิ่งที่ฉันมี
the-wabbit

1

ฉันเขียนเครื่องมือ PowerShell GUI รวบรวมข้อมูลประสิทธิภาพการทำงานของผู้เยี่ยมชมสำหรับ VM ทั้งหมดที่พบในโฮสต์ Hyper-V ที่เลือก การรวบรวมและการจับคู่ข้อมูลทำได้ด้วยข้อมูลตัวนับและ Hyper-V WMI เรียกใช้จากเซิร์ฟเวอร์สมาชิกใด ๆ โดยไม่ต้องใช้โมดูล ฉันหวังว่านี่จะช่วยในการแก้ไขปัญหาประสิทธิภาพการทำงานอย่างรวดเร็วในโฮสต์ Hyper-V และ VM

แสดงสถิติประสิทธิภาพการทำงานสำหรับบุคคลทั่วไปของ Hyper-V Virtual Machine (PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54


0

คุณอาจต้องการลองใช้เครื่องมือของบุคคลที่สามที่สามารถช่วยเหลือเกี่ยวกับเครื่องเสมือน detecintg ที่ทำให้เกิด I ​​/ O สูงและยังมีความสามารถในการแจ้งเตือนเกี่ยวกับ I / O ที่สูงเช่นนั้น คุณสามารถตรวจสอบได้ที่นี่ - ApexSQL VM จอภาพ

เครื่องมือนี้สามารถตรวจสอบ spectre ขนาดใหญ่ของตัวนับดิสก์สำหรับโฮสต์และเครื่องเสมือนและข้างตัวนับที่กำหนดไว้ล่วงหน้าสามารถตั้งค่าให้ตรวจสอบและแสดงการนำเสนอแบบกราฟิกของตัวนับจาก Performance monitor

หวังว่าฉันช่วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.