Pregunta

Esta pregunta se refiere a xperf y xperfview, utilidades que son parte de la Performance Toolkit de Windows (a su vez parte de Windows SDK 7.1).

La comparación de dos tablas, "muestreo de la CPU por hilo" y "de la CPU por hilo", hay varias diferencias que no entiendo. Voy a usar audiodg.exe como un ejemplo.

  1. En el pulldown Hilos, sólo hay un hilo para audiodg en el gráfico de CPU de muestreo; tabla de uso de la CPU muestra varios hilos audiodg.

  2. Ambos gráficos tienen un eje Y marcado "% Uso", pero las mediciones difieren. Normalmente, el uso% para un hilo dado es más bajo en la CPU diagrama de muestreo que en la tabla de uso de la CPU.

  3. La CPU de muestreo de tablas de resumen muestra el peso y% en peso para cada módulo / proceso. Si se me carga símbolos, puedo cavar muy profundo en el proceso audiodg. La CPU Scheduling Aggregate Tabla resumen (lanzado desde la CPU gráfico uso) muestra el uso de CPU y el uso% CPU - Peso no está disponible. (Por el contrario, el uso de CPU no está disponible en la tabla de resumen de la CPU de muestreo.) No puedo cavar tan profundo en audiodg -. Sólo veo el hilo principal y unos cuantos hilos ntdll.dll

  4. Los números para cualquier proceso en las columnas uso% de la CPU y el% de peso son siempre diferentes. A veces difieren en más de 75%.

Así que mis preguntas ... ¿cuál es la medida fiable del uso de la CPU aquí? no son los números de uso de la CPU derivadas de muestras de CPU? No deberían los números se relacionan de alguna manera?

¿Fue útil?

Solución

Xperf hace hacer esto un poco confuso, pero es mi comprensión de lo que está pasando:

  • datos de la muestra de la CPU, habilitadas con la bandera PERFIL núcleo. datos de la muestra CPU se recoge en algún intervalo regular, y los registros de información acerca de lo que la CPU estaba haciendo en ese momento (por ejemplo, el proceso, el hilo Id, y pila de llamadas en el momento de la muestra.)
  • datos de cambio de contexto, habilitadas con la bandera cDesconecte núcleo. Registra los datos sobre cada cambio de contexto que ocurre (por ejemplo, que se cambió de entrada / salida y los callstacks.)

muestreo CPU por hilo muestra el número de eventos de perfil que se registraron para cada hilo, agregados durante algún intervalo de tiempo para la duración de la traza. Por ejemplo, si audiodg estaba ejecutando 10% del tiempo durante 2 segundos, esperaríamos ver cerca de 10 "% de uso" durante ese tiempo. Sin embargo, debido a esto se basa en el muestreo, es posible que en cada evento de muestra, sucedieron las discusiones de otro proceso a ejecutar -. En otras palabras, el 10% era 'perdió' por los sucesos de ejemplo

Uso de la CPU por hilo se calcula utilizando los datos de conmutación de contexto. El 'Uso' es la cantidad de tiempo entre ser contexto cambia en y luego más tarde (y por supuesto, estos datos se agrega sobre algún intervalo pequeño).

Hay beneficios a cada dato:

  • de muestreo de la CPU en realidad le dirá lo que el hilo es hacer en el momento de la muestra, ya que recoge las pilas de llamadas durante la ejecución de la amenaza. La información de cambio de contexto sólo le dirá cuando un hilo se enciende dentro o fuera, pero no hay nada entre ellos.
  • información de cambio de contexto le dirá exactamente cuánto tiempo cada hilo tiene que ejecutar. Estos datos son correctos. El muestreo, por supuesto, sólo es probabilística.

Así que para responder a su pregunta, la tabla de uso de la CPU es "más precisa" para entender cuánto tiempo cada hilo estaba ejecutando. Sin embargo, no se descarta el uso de los datos de muestreo, ya que puede ser mucho más útil para la comprensión de dónde están sus hilos en realidad estaban gastando su tiempo! Para los datos de muestreo de la CPU, la tabla de resumen es más valioso, ya que le mostrará las pilas. Para los datos de uso de la CPU, el gráfico es probablemente más útil que la tabla de resumen.

Espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top