Determinación de VM haciendo E / S en un host Hyper-V

13

¿Cómo puedo saber qué VM es responsable de la mayoría de las E / S que veo con Hyper-V?

La situación: tengo hosts Hyper-V con varias máquinas virtuales (alrededor de 30 por host) donde ocasionalmente veo períodos prolongados de alta utilización del disco. Me gustaría saber qué VM está causando esto.

Intenté usar Process Explorer, pero informó que todas las E / S relacionadas con Hyper-V serían manejadas por el proceso "Sistema", por lo que no hay ayuda:

explorador de procesos

Ya ayudaría tener un desglose por archivos accedidos. La instalación completa de la GUI de Windows Server tiene el Monitor de recursos que proporciona esta información. Sin embargo, Resmon parece no estar disponible en las instalaciones Core e Hyper-V.

el wabbit
fuente
@RyanRies no, no veo vmwp.exe involucrado en ninguna de las E / S. Como no sé a qué discos irá la carga, no puedo decir si está tomando la ruta de código IDE o SCSI, ambos parecen igualmente posibles.
the-wabbit

Respuestas:

9

Abra el Monitor de rendimiento (ejecutar como administrador) en su estación de trabajo local. Agregue el contador, seleccione los contadores de la máquina hyper-v, el Controlador virtual IDE de Hyper-V o el Dispositivo de almacenamiento virtual Hyper-V, seleccione los contadores e instancias (VM) según corresponda. Puede que tenga que pescar un poco para encontrar el mostrador que tenga más sentido para usted.

Hay algunos buenos consejos sobre qué contadores buscar en Supervisión del rendimiento de Hyper-V

Chris S
fuente
Mmh, lo intenté. No arrojó resultados útiles y no tengo idea de por qué es así. Al principio, tuve problemas para localizar los contadores del dispositivo de almacenamiento virtual; parece que no están presentes en mis instalaciones. Dado que la mayoría de mis discos son IDE, le di una oportunidad al Controlador Virtual IDE, pero por algunas razones insondables, no devuelve nada más que ceros para la instancia que realmente causa la carga (que tropecé por accidente mientras tanto), mientras que otras instancias Parecen producir valores sanos.
the-wabbit
2
Si tiene instalado el material de integración de VM, entonces no está utilizando IDE (independientemente de lo que diga la pantalla de configuración; no empiece con las malas opciones de pantalla de configuración de MS), por lo que debe usar los contadores Virt Stor Dev. Estos últimos son por VHD, no por VM, por lo que hay un poco de desreferenciación involucrada.
Chris S
Esto lo aclara. Finalmente encontré el dispositivo de almacenamiento virtual, parece devolver valores razonables para los discos virtuales.
the-wabbit
Chris S tiene razón. El nombre exacto del contador del monitor de rendimiento al que se refiere es "Dispositivo de almacenamiento virtual Hyper-V". Es decir, la "longitud de la cola" en esta categoría ofrece una buena idea de cuál de sus archivos VHD (X) tiene la mayor latencia en la comunicación con su disco.
Koen Zomers
2

Syneticon-dj, escribí algo para ti esta tarde. Pensé que este problema era interesante, por lo que este simple script le dará las estadísticas de lectura y escritura de E / S en cada VM en ejecución en el host Hyper-V. Como beneficio adicional, asocia cada VM a la ID de proceso de vmwp.exe.

Puede ejecutar esto en su servidor Hyper-V, porque no necesita una GUI.

La desventaja es que mientras estaba trabajando en esto, noté que los contadores de rendimiento funcionaban muy bien por un tiempo, y luego, sin razón aparente, decidieron permanecer en cero. Bueno, tal vez no sea un error, como dice Chris S ... pero estos contadores podrían no ser muy útiles después de todo. De todos modos, sería muy fácil modificar el script para usar Virt. Dispositivo de almacenamiento de contadores en su lugar.

El resultado se ve así:

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.
    [email protected]
#>
    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); }
        }

    }
}
Ryan Ries
fuente
Eso no es un error, vea los comentarios en mi respuesta.
Chris S
Entonces me pregunto por qué los contadores parecen funcionar intermitentemente. (Invitados de Windows con servicios de integración completa). ¿Y por qué elegirían el nivel de abstracción significativamente menos útil de los contadores por VHD? :(
Ryan Ries
No estoy seguro de por qué mostraría algo de forma intermitente. En cuanto a por qué, es la forma en que funciona el almacenamiento en Hyper-V. Básicamente, solo hay un controlador de almacenamiento para todas las máquinas virtuales. Al usar un "Controlador IDE" en la configuración, solo está habilitando la Emulación IDE para el almacenamiento expuesto a esa VM (a diferencia del "Controlador SCSI" que no tiene nada que ver con SCSI, y simplemente desactiva cualquier tipo de emulación del controlador de almacenamiento) . Las máquinas virtuales que admiten Integration Services simplemente omiten la emulación IDE. A los contadores de la controladora de almacenamiento no les importa exactamente qué VM está conectada a cada VHD, de ahí la forma en que funciona.
Chris S
Increíble. Gracias por la info. Estoy extremadamente interesado en leer más sobre esto, pero estoy teniendo dificultades para encontrar una buena documentación técnica. Creo que a MS le corresponde desmitificar muchas de estas cosas para nosotros. Podríamos poner más confianza en sus soluciones. Solo quiero un libro de Hyper-V Internals . es mucho para preguntar? :)
Ryan Ries
1

Las otras dos respuestas son útiles. Pero descubro que obtengo lo que está buscando con mucha más facilidad (cuando los VHD se almacenan en discos locales o compartidos localmente en lugar de un servidor de archivos) abriendo el "Monitor de recursos" y mirando la pestaña Disco. Mire "Actividad de disco" y ordene por "Total (B / seg)". Verá los VHD enumerados en orden de actividad.

Obviamente, mi estrategia es una aproximación flexible para las máquinas en las que está conectado localmente, lo que lo hace menos útil en un entorno grande y sin cabeza.

Jake Oshins
fuente
1
Jake, gracias por tomarte el tiempo de responder. Realmente me encantaría solo mirar el monitor de recursos, sin embargo, no está disponible cuando el servidor no está ejecutando una instalación gráfica completa, sino solo la edición Hyper-V o Server Core. Que es lo que tengo.
the-wabbit
1

Escribí una herramienta PowerShell GUI que recopila datos de rendimiento de Guest para todas las máquinas virtuales encontradas en hosts Hyper-V seleccionados. La recopilación y coincidencia de datos se realiza con información de get-counter y Hyper-V WMI. Ejecutar desde cualquier servidor miembro, no se requieren módulos. Espero que esto ayude a solucionar rápidamente los problemas de rendimiento en hosts Hyper-V y máquinas virtuales.

Mostrar estadísticas de rendimiento de invitados de máquina virtual Hyper-V (PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54

Ruud Borst
fuente
0

Es posible que desee probar una herramienta de terceros que pueda ayudarlo a detectar la máquina virtual que está causando E / S altas, y también tiene la capacidad de alertar sobre E / S tan altas. Puede consultarlo aquí: ApexSQL VM Monitor .

Esta herramienta puede monitorear grandes espectros de contadores de disco para host y máquina virtual, y además de los contadores predefinidos, se puede configurar para monitorear y mostrar la presentación gráfica de los contadores desde el monitor de rendimiento.

Espero haber ayudado.

McRobert
fuente