Análisis de CPU
En esta guía se proporcionan técnicas detalladas que puede usar para investigar los problemas relacionados con las unidades de procesamiento central (CPU) que afectan a las métricas de evaluación.
Las secciones de métricas o problemas individuales de las guías de análisis específicas de la evaluación identifican problemas comunes para la investigación. En esta guía se proporcionan técnicas y herramientas que puede usar para investigar esos problemas.
Las técnicas de esta guía usan windows Analizador de rendimiento (WPA) del Kit de herramientas de rendimiento de Windows (WPT). WPT forma parte del Windows Assessment and Deployment Kit (Windows ADK) y se puede descargar desde el Programa Windows Insider. Para obtener más información, consulte Referencia técnica del Kit de herramientas de rendimiento de Windows.
Esta guía se organiza en las tres secciones siguientes:
En esta sección se describe cómo se administran los recursos de CPU en Windows 10. |
|
En esta sección se explica cómo ver e interpretar la información de CPU en el kit de herramientas de Windows ADK. |
|
Esta sección contiene una colección de técnicas que puede usar para investigar y resolver problemas comunes relacionados con el rendimiento de la CPU. |
Fondo
Esta sección contiene descripciones sencillas y una explicación básica sobre el rendimiento de la CPU. Para obtener un estudio más completo sobre este tema, se recomienda el libro Windows Internals, Quinta edición.
Los equipos modernos pueden contener varias CPU instaladas en sockets independientes. Cada CPU puede hospedar varios núcleos de procesador físicos, cada uno capaz de procesar uno o dos flujos de instrucción independientes simultáneamente. Estos procesadores de flujos de instrucción individuales se administran mediante el sistema operativo Windows como procesadores lógicos.
En esta guía, tanto el procesador como la CPU hacen referencia a un procesador lógico, es decir, un dispositivo de hardware que el sistema operativo puede usar para ejecutar instrucciones de programa.
Windows 10 administra activamente el hardware del procesador de dos maneras principales: la administración de energía, equilibrar el consumo de energía y el rendimiento; y el uso, para equilibrar los requisitos de procesamiento de programas y controladores.
Administración de energía del procesador
Los procesadores no siempre existen en un estado operativo. Cuando no haya instrucciones listas para ejecutarse, Windows colocará un procesador en un estado inactivo de destino (o C),según lo determinado por windows Power Manager. En función de los patrones de uso de CPU, el estado C de destino de un procesador se ajustará con el tiempo.
Los estados inactivos son estados numerados de C0 (activo; no inactivo) a través de estados de potencia progresivamente inferiores. Estos estados incluyen C1 (detenido pero el reloj sigue habilitado), C2 (detenido y el reloj está deshabilitado), etc. La implementación de estados inactivos es específica del procesador. Sin embargo, un número de estado mayor en todos los procesadores refleja un menor consumo de energía, pero también un tiempo de espera más largo antes de que el procesador pueda volver al procesamiento de instrucciones. El tiempo invertido en estados inactivos afecta significativamente al uso de energía y a la duración de la batería.
Algunos procesadores pueden funcionar en estados de rendimiento (P-) y limitación (T-), incluso cuando están procesando instrucciones activamente. Los estados P definen las frecuencias de reloj y los niveles de voltaje que admite el procesador. Los estados T no cambian directamente la frecuencia del reloj, pero pueden reducir la velocidad del reloj efectiva omitiendo la actividad de procesamiento en algunas fracciones de tics de reloj. Juntos, los estados actuales P y T determinan la frecuencia de funcionamiento efectiva del procesador. Las frecuencias más bajas se corresponden con un menor rendimiento y un menor consumo de energía.
Windows Power Manager determina un estado P y T adecuado para cada procesador, en función de los patrones de uso de CPU y la directiva de energía del sistema. El tiempo dedicado a los estados de alto rendimiento frente a los estados de bajo rendimiento afecta significativamente al uso de energía y a la duración de la batería.
Administración del uso del procesador
Windows usa tres abstracciones principales para administrar el uso del procesador.
Procesos
Subprocesos
Llamadas a procedimiento diferido (DPC) e interrumpir rutinas de servicio (ISR)
Procesos y subprocesos
Todos los programas en modo de usuario de Windows se ejecutan en el contexto de un proceso. Un proceso incluye los siguientes atributos y componentes:
Un espacio de direcciones virtuales
Clase Priority
Módulos de programa cargados
Información de entorno y configuración
Al menos un subproceso
Aunque los procesos contienen los módulos del programa, el contexto y el entorno, no están programados directamente para ejecutarse en un procesador. En su lugar, los subprocesos que pertenecen a un proceso se programan para ejecutarse en un procesador.
Un subproceso mantiene la información de contexto de ejecución. Casi todos los cálculos se administran como parte de un subproceso. La actividad de subprocesos afecta fundamentalmente a las medidas y al rendimiento del sistema.
Dado que el número de procesadores de un sistema está limitado, no se pueden ejecutar todos los subprocesos al mismo tiempo. Windows implementa el uso compartido de tiempo del procesador, lo que permite que un subproceso se ejecute durante un período de tiempo antes de que el procesador cambie a otro subproceso. El acto de cambiar entre subprocesos se denomina conmutador de contexto y lo realiza un componente de Windows denominado distribuidor. El distribuidor toma decisiones de programación de subprocesos en función de la prioridad, el procesador ideal y la afinidad, el cuántico y el estado.
Priority
La prioridad es un factor clave en la forma en que el distribuidor selecciona qué subproceso se va a ejecutar. La prioridad del subproceso es un entero comprendido entre 0 y 31. Si un subproceso es ejecutable y tiene una prioridad más alta que un subproceso que se está ejecutando actualmente, el subproceso de prioridad inferior se adelanta inmediatamente y el subproceso de mayor prioridad se cambia de contexto.
Cuando un subproceso se está ejecutando o está listo para ejecutarse, no se pueden ejecutar subprocesos de prioridad inferior a menos que haya suficientes procesadores para ejecutar ambos subprocesos al mismo tiempo, o a menos que el subproceso de mayor prioridad esté restringido a ejecutarse solo en un subconjunto de procesadores disponibles. Los subprocesos tienen una prioridad base que se puede elevar temporalmente a prioridades más altas en determinados momentos: por ejemplo, cuando el proceso posee la ventana de primer plano o cuando se completa una E/S.
Procesador y afinidad ideales
El procesador y la afinidad ideales de un subproceso determinan los procesadores en los que se programa un subproceso determinado para ejecutarse. Cada subproceso tiene un procesador ideal establecido por el programa o automáticamente por Windows. Windows usa una metodología round robin para que se asigne un número aproximado de subprocesos en cada proceso a cada procesador. Cuando sea posible, Windows programa un subproceso para ejecutarse en su procesador ideal; sin embargo, el subproceso puede ejecutarse ocasionalmente en otros procesadores.
La afinidad de procesador de un subproceso restringe los procesadores en los que se ejecutará un subproceso. Se trata de una restricción más fuerte que el atributo de procesador ideal del subproceso. El programa establece la afinidad mediante SetThreadAffinityMask. La afinidad puede impedir que los subprocesos se ejecuten en determinados procesadores.
Quantum
Los modificadores de contexto son operaciones costosas. Por lo general, Windows permite que cada subproceso se ejecute durante un período de tiempo denominado quantum antes de cambiar a otro subproceso. La duración cuántica está diseñada para conservar la capacidad de respuesta del sistema aparente. Maximiza el rendimiento al minimizar la sobrecarga del cambio de contexto. Las duraciones cuánticas pueden variar entre clientes y servidores. Las duraciones cuánticas suelen ser más largas en un servidor para maximizar el rendimiento a costa de la capacidad de respuesta aparente. En los equipos cliente, Windows asigna quantums más cortos en general, pero proporciona un cuanto más largo al subproceso asociado a la ventana de primer plano actual.
Valor
Cada subproceso existe en un estado de ejecución determinado en cualquier momento dado. Windows usa tres estados relevantes para el rendimiento; estos son: En ejecución, listo y en espera.
Los subprocesos que se ejecutan actualmente se encuentran en estado En ejecución . Los subprocesos que se pueden ejecutar, pero que actualmente no se están ejecutando, están en estado Listo . Los subprocesos que no se pueden ejecutar porque están esperando un evento determinado se encuentran en estado De espera .
Una transición de estado a estado se muestra en la figura 1 Transiciones de estado de subproceso:
Figura 1 Transiciones de estado de subproceso
La figura 1 Transiciones de estado de subproceso se explica de la siguiente manera:
Un subproceso en estado En ejecución inicia una transición al estado Waiting mediante una llamada a una función de espera como WaitForSingleObject o Sleep(> 0).
Una operación de kernel o subproceso en ejecución prepara un subproceso en estado De espera (por ejemplo, SetEvent o expiración del temporizador). Si un procesador está inactivo o si el subproceso fácilmente tiene una prioridad más alta que un subproceso en ejecución actualmente, el subproceso fácilmente puede cambiar directamente al estado En ejecución. De lo contrario, se coloca en el estado Listo.
El distribuidor programa un subproceso en estado Listo cuando el distribuidor espera un subproceso en ejecución, produce (Sleep(0)) o llega al final de su quantum.
Un subproceso en el estado En ejecución se cambia y se coloca en el estado Listo por el distribuidor cuando se adelanta por un subproceso de prioridad más alta, produce (Sleep(0)) o cuando finaliza su quantum.
Un subproceso que existe en el estado Waiting no indica necesariamente un problema de rendimiento. La mayoría de los subprocesos pasan un tiempo significativo en el estado En espera, lo que permite a los procesadores entrar en estados inactivos y ahorrar energía. El estado del subproceso se convierte en un factor importante en el rendimiento solo cuando un usuario espera a que un subproceso complete una operación.
DPCs e ISR
Además de procesar subprocesos, los procesadores responden a las notificaciones de dispositivos de hardware, como tarjetas de red o temporizadores. Cuando un dispositivo de hardware requiere atención del procesador, genera una interrupción. Windows responde a una interrupción de hardware suspendiendo un subproceso que se está ejecutando actualmente y ejecutando el ISR asociado a la interrupción.
Durante el tiempo en que ejecuta un ISR, se puede impedir que un procesador controle cualquier otra actividad, incluidas otras interrupciones. Por este motivo, los ISR deben completarse rápidamente o el rendimiento del sistema puede degradarse. Para reducir el tiempo de ejecución, los ISR suelen programar DPC para realizar el trabajo que se debe realizar en respuesta a una interrupción. Para cada procesador lógico, Windows mantiene una cola de DPC programadas. Los DPC tienen prioridad sobre los subprocesos en cualquier nivel de prioridad. Antes de que un procesador vuelva al procesamiento de subprocesos, ejecuta todos los DPC de su cola.
Durante el tiempo en que un procesador ejecuta DPCs e ISR, no se puede ejecutar ningún subproceso en ese procesador. Esta propiedad puede provocar problemas para los subprocesos que deben realizar el trabajo en un rendimiento determinado o con un tiempo preciso, como un subproceso que reproduce audio o vídeo. Si el tiempo de procesador que se usa para ejecutar DPCs e ISR impide que estos subprocesos reciban tiempo de procesamiento suficiente, es posible que el subproceso no logre su rendimiento necesario o complete sus elementos de trabajo a tiempo.
Herramientas de Windows ADK
Windows ADK escribe información de hardware y evaluaciones en los archivos de resultados de las evaluaciones. WPA proporciona información detallada sobre el uso de CPU en varios gráficos. En esta sección se explica cómo usar Windows ADK y WPA para recopilar, ver y analizar datos de rendimiento de CPU.
Archivos de resultados de evaluación de Windows ADK
Dado que Windows solo admite sistemas de multiprocesamiento simétricos, toda la información de esta sección se aplica a todas las CPU y núcleos instalados.
La información detallada del hardware de CPU está disponible en la EcoSysInfo
sección de los archivos de resultados de evaluación en el <Processor><Instance id=”0”>
nodo .
Por ejemplo:
<Processor>
<Instance id="0">
<ProcessorName>The name of the first CPU</ProcessorName>
<TSCFrequency>The maximum frequency of the first CPU</TSCFrequency>
<NumProcs>The total number of processors</NumProcs>
<NumCores>The total number of cores</NumCores>
<NumCPUs>The total number of logical processors</NumCPUs>
...and so on...
Gráficos WPA
Después de cargar un seguimiento en WPA, puede encontrar información de hardware del procesador en las secciones Trace/System Configuration/General y Trace/System Configuration/PnP de la interfaz de usuario WPA.
Nota Todos los procedimientos de esta guía se producen en WPA.
Gráfico de estados inactivos de CPU
Si la información de estado de inactividad se recopila en un seguimiento, el gráfico Estados inactivos de Power/CPU se mostrará en la interfaz de usuario WPA. Este gráfico siempre contiene datos en el estado de inactividad de destino para cada procesador. El gráfico también contendrá información sobre el estado de inactividad real de cada procesador si el procesador admite este estado.
Cada fila de la tabla siguiente describe un cambio de estado inactivo para el estado De destino o Real de un procesador. Las columnas siguientes están disponibles para cada fila del gráfico:
Columna | Detalles |
---|---|
CPU |
Procesador afectado por el cambio de estado. |
Hora de entrada |
Hora a la que el procesador entró en estado inactivo. |
Hora de salida |
Hora a la que el procesador salió del estado inactivo. |
Max:Duration(ms) |
El tiempo que se invierte en el estado de inactividad (agregación predeterminada:máximo). |
Min:Duration(ms) |
El tiempo dedicado al estado de inactividad (agregación predeterminada:mínimo). |
Siguiente estado |
Estado al que el procesador ha pasado después del estado actual. |
Estado previo |
Estado desde el que el procesador ha pasado antes del estado actual. |
Valor |
Estado de inactividad actual. |
Estado (numérico) |
Estado de inactividad actual como un número (por ejemplo, 0 para C0). |
Sum:Duration(ms) |
Tiempo invertido en el estado inactivo (agregación:sum predeterminado). |
Tabla |
No utilizado |
Tipo |
Destino (para el estado de destino seleccionado de Power Manager para el procesador) o Real (para el estado de inactividad real del procesador). |
El perfil WPA predeterminado proporciona dos valores preestablecidos para este grafo: Estado por tipo, CPU y Diagrama de estado por tipo, CPU.
Estado por tipo, CPU
Los estados objetivo y real de cada CPU se grafican junto con el número de estado del eje Y en el gráfico estado por tipo, CPU . Figura 2 Estado de inactividad de CPU por tipo, cpu muestra el estado real de la CPU a medida que fluctúa entre los estados inactivos activos y de destino.
Figura 2 Estados inactivos de CPU por tipo, CPU
Diagrama de estado por tipo, CPU
En este gráfico, los estados Destino y Real de cada CPU se presentan en formato de escala de tiempo. Cada estado tiene una fila independiente en la escala de tiempo. Figura 3 Diagrama de estado de estados inactivos de CPU por tipo, LA CPU muestra los mismos datos que la figura 2 Estados inactivos de CPU por tipo, CPU, en una vista de escala de tiempo.
Figura 3 Diagrama de estado de estados inactivos de CPU por tipo, CPU
Gráfico de frecuencia de CPU
Si se recopilaron datos de frecuencia de CPU en un sistema que admite varios estados P o T, el gráfico frecuencia de CPU estará disponible en la interfaz de usuario WPA. Cada fila de la tabla siguiente representa el tiempo en un nivel de frecuencia determinado para un procesador. La columna Frecuencia (MHz) contiene un número limitado de frecuencias que corresponden a los estados P y T que son compatibles con el procesador. Las columnas siguientes están disponibles para cada fila del gráfico:
Columna | Detalles |
---|---|
% de duración |
La duración se expresa como un porcentaje del tiempo total de CPU durante el período de tiempo visible actualmente. |
Count |
Número de cambios de frecuencia (siempre 1 para filas individuales). |
CPU |
Cpu afectada por el cambio de frecuencia. |
Hora de entrada |
Hora a la que la CPU entró en el estado P. |
Hora de salida |
Hora a la que la CPU salió del estado P. |
Frecuencia (MHz) |
Frecuencia de la CPU durante el tiempo en que se encuentra en estado P. |
Max:Duration(ms) |
Tiempo dedicado al estado P (agregación predeterminada:máximo). |
Min:Duration(ms) |
Tiempo dedicado al estado P (agregación predeterminada:mínimo). |
Sum:Duration(ms) |
Tiempo dedicado al estado P (agregación:sum predeterminado). |
Tabla |
No utilizado |
Tipo |
Información adicional sobre el estado P. |
El perfil predeterminado define el valor preestablecido frecuencia por CPU para este gráfico. La figura 4 Frecuencia de CPU por CPU muestra una CPU a medida que realiza la transición entre tres estados P:
Figura 4 Frecuencia de CPU por CPU
Gráfico de uso de CPU (muestreado)
Los datos que se muestran en el gráfico Uso de CPU (muestreado) representan muestras de actividad de CPU que se toman en un intervalo de muestreo normal. En la mayoría de los seguimientos, se trata de un milisegundo (1 ms). Cada fila de la tabla representa un solo ejemplo.
El peso de la muestra representa la importancia de esa muestra, en relación con otras muestras. El peso es igual a la marca de tiempo de la muestra actual menos la marca de tiempo de la muestra anterior. El peso no siempre es exactamente igual al intervalo de muestreo debido a las fluctuaciones en el estado del sistema y la actividad.
La figura 5 Muestreo de CPU representa cómo se recopilan los datos:
Figura 5 Muestreo de CPU
Este método de muestreo no registra ninguna actividad de CPU que se produzca entre muestras. Por lo tanto, las actividades de muy corta duración, como dpCs e ISR, no se representan bien en el gráfico de muestreo de CPU.
Las columnas siguientes están disponibles para cada fila del gráfico:
Columna | Detalles |
---|---|
% de peso |
El peso se expresa como un porcentaje del tiempo total de CPU que se invierte en el intervalo de tiempo visible actualmente. |
Dirección |
Dirección de memoria de la función que se encuentra en la parte superior de la pila. |
Recuento de todos |
Número de muestras representadas por una fila. Este número incluye ejemplos que se toman cuando un procesador está inactivo. Para las filas individuales, esta columna siempre es 1. |
Count |
Número de muestras representadas por una fila, excepto las muestras que se toman cuando un procesador está inactivo. En el caso de las filas individuales, esta columna siempre es 1 (o 0, en los casos en los que la CPU estaba en un estado de baja potencia). |
CPU |
Índice basado en 0 de la CPU en la que se tomó este ejemplo. |
Nombre |
Nombre para mostrar del proceso activo. |
DPC/ISR |
Indica si el ejemplo mide el uso normal de la CPU, un DPC/ISR o un estado de baja potencia. |
Función |
Función en la parte superior de la pila. |
Módulo |
Módulo que contiene la función en la parte superior de la pila. |
Priority |
Prioridad del subproceso en ejecución. |
Proceso |
Nombre de imagen del proceso que posee el código en ejecución. |
Nombre del proceso |
Nombre completo (incluido el identificador de proceso) del proceso que posee el código en ejecución. |
Pila |
Pila del subproceso en ejecución. |
Id. de subproceso |
Identificador del subproceso en ejecución. |
Función de inicio de subprocesos |
Función con la que se inició el subproceso en ejecución. |
Módulo de inicio de subprocesos |
Módulo que contiene la función de inicio del subproceso. |
TimeStamp |
Hora a la que se tomó la muestra. |
Peso |
La hora (en milisegundos) representada por el ejemplo (es decir, la hora desde la última muestra). |
El perfil predeterminado proporciona los siguientes valores preestablecidos para este gráfico:
Uso por CPU
Uso por prioridad
Uso por proceso
Uso por proceso y subproceso
Uso por CPU
El gráfico Uso de uso de CPU por CPU muestra cómo se distribuye el trabajo entre procesadores. En la figura 6 Uso de CPU por CPU se muestra esta distribución para dos CPU:
Figura 6 Uso de CPU por CPU
Uso por prioridad
El uso de CPU agrupado por prioridad de subprocesos muestra cómo los subprocesos de prioridad alta afectan a los subprocesos de prioridad inferior. En la figura 7 Uso de CPU (muestreado) Por prioridad se muestra este gráfico:
Figura 7 Uso de CPU (muestreado) Uso por prioridad
Uso por proceso
Uso de CPU agrupado por proceso muestra el uso relativo de los procesos. En la figura 8 El uso de CPU (muestreado) por proceso muestra este valor preestablecido. En este gráfico de ejemplo, se muestra un proceso que consume más tiempo de CPU que los demás procesos.
Figura 8 Uso de CPU (muestreado) uso por proceso
Uso por proceso y subproceso
Uso de CPU agrupado por proceso y, a continuación, agrupado por subproceso muestra el uso relativo de los procesos y los subprocesos de cada proceso. En la figura 9 uso de CPU (muestreado) por proceso y subproceso se muestra este valor preestablecido. Los subprocesos de un único proceso se seleccionan en este gráfico.
Figura 9 Uso de CPU (muestreado) uso por proceso y subproceso
Gráfico de uso de CPU (preciso)
El gráfico Uso de CPU (preciso) registra información asociada a eventos de cambio de contexto. Cada fila representa un conjunto de datos que está asociado a un único modificador de contexto; es decir, cuando se inició la ejecución de un subproceso. Los datos se recopilan para la siguiente secuencia de eventos:
El nuevo subproceso se desactiva.
El nuevo subproceso está listo para ejecutarse mediante el subproceso listo.
El nuevo subproceso se cambia y, por tanto, se cambia un subproceso antiguo.
El nuevo subproceso se vuelve a desactivar.
En la figura 10 Diagrama preciso de uso de CPU, el tiempo fluye de izquierda a derecha. Las etiquetas del diagrama corresponden a los nombres de columna del gráfico Uso de CPU (preciso). Las etiquetas de las columnas Timestamp se muestran en la parte superior del diagrama y las etiquetas de las columnas Duración del intervalo se muestran en la parte inferior del diagrama.
Figura 10 Diagrama preciso de uso de CPU
Los saltos en la escala de tiempo de la figura 10 Diagrama preciso de uso de CPU dividen la escala de tiempo en regiones que se pueden producir simultáneamente en diferentes CPU. Estas escalas de tiempo se pueden superponer siempre que no se modifique el orden de los eventos numerados. Por ejemplo, el subproceso listo se puede ejecutar en Processor-2 al mismo tiempo que se desactiva un nuevo subproceso y, a continuación, vuelve a estar en Processor-1).
La información se registra para los cuatro objetivos siguientes en la escala de tiempo:
Nuevo subproceso, que es el subproceso en el que se cambió. Es el foco principal de esta fila en el gráfico.
Subproceso NewPrev, que hace referencia a la hora anterior en la que se cambió el nuevo subproceso.
Subproceso listo, que es el subproceso que preparó el nuevo subproceso que se va a procesar.
Subproceso antiguo, que es el subproceso que se cambió cuando se cambió el nuevo subproceso.
Los datos de la tabla siguiente se relacionan con cada subproceso de destino:
Columna | Detalles |
---|---|
% de uso de CPU |
Uso de CPU del nuevo subproceso después de cambiar. Este valor se expresa como un porcentaje del tiempo total de CPU durante el período de tiempo visible actualmente. |
Count |
Número de modificadores de contexto representados por la fila. Siempre es 1 para las filas individuales. |
Count:Waits |
Número de esperas representadas por la fila. Siempre es 1 para filas individuales, excepto cuando un subproceso cambia a un estado inactivo; en este caso, se establece en 0. |
CPU |
CPU en la que se produjo el modificador de contexto. |
Uso de CPU (ms) |
Uso de CPU del nuevo subproceso después del modificador de contexto. Esto es igual a NewInSwitchTime, pero se muestra en milisegundos. |
IdealCpu |
Cpu ideal seleccionada por el programador para el nuevo subproceso. |
LastSwitchOutTime (s) |
La hora anterior en que se desconectaba el nuevo subproceso. |
NewInPri |
Prioridad del nuevo subproceso en el que se cambia. |
NewInSwitchTime(s) |
NextSwitchOutTime(s) menos SwitchInTime(s) |
NewOutPri |
Prioridad del nuevo subproceso cuando se apaga. |
NewPrevOutPri |
Prioridad del nuevo subproceso cuando se desconectaba anteriormente. |
NewPrevState |
Estado del nuevo subproceso después de que se haya cambiado previamente. |
NewPrevWaitMode |
Modo de espera del nuevo subproceso cuando se desconectaba anteriormente. |
NewPrevWaitReason |
Motivo por el que se ha cambiado el nuevo subproceso. |
NewPriDecr |
Aumento de prioridad que afecta al subproceso. |
NewProcess |
Proceso del nuevo subproceso. |
Nombre de NewProcess |
Nombre del proceso del nuevo subproceso, incluido PID. |
NewQnt |
Sin usar. |
NewState |
Estado del nuevo subproceso después de cambiar. |
NewThreadId |
Identificador de subproceso del nuevo subproceso. |
NewThreadStack |
Pila del nuevo subproceso cuando se cambia. |
NewThreadStartFunction |
Función start del nuevo subproceso. |
NewThreadStartModule |
Módulo de inicio del nuevo subproceso. |
NewWaitMode |
Modo de espera del nuevo subproceso. |
NewWaitReason |
Motivo por el que se ha cambiado el nuevo subproceso. |
NextSwitchOutTime(s) |
Hora a la que se desconecta el nuevo subproceso. |
OldInSwitchTime(s) |
Hora en la que se cambió el subproceso anterior antes de que se apagara. |
OldOutPri |
Prioridad del subproceso anterior cuando se ha cambiado. |
OldProcess |
Proceso que posee el subproceso anterior. |
Nombre de OldProcess |
Nombre del proceso que posee el subproceso anterior, incluido PID. |
OldQnt |
Sin usar. |
OldState |
Estado del subproceso anterior después de que se desactive. |
OldThreadId |
Identificador de subproceso del subproceso anterior. |
OldThreadStartFunction |
Función start del subproceso anterior. |
OldThreadStartModule |
Módulo de inicio del subproceso antiguo. |
OldWaitMode |
Modo de espera del subproceso antiguo. |
OldWaitReason |
Motivo por el que se ha cambiado el subproceso anterior. |
PrevCState |
CState anterior del procesador. Si no es 0 (activo), el procesador estaba en un estado inactivo antes de que el nuevo subproceso se cambiara de contexto. |
Listos |
SwitchInTime(s) minusReadyTime (s) |
Preparación de ThreadId |
Identificador de subproceso del subproceso listo. |
Preparación de ThreadStartFunction |
Función start del subproceso de preparación. |
Preparación de ThreadStartModule |
Módulo de inicio del subproceso de preparación. |
ReadyingProcess |
Proceso que posee el subproceso de preparación. |
ReadyingProcess Name |
Nombre del proceso que posee el subproceso de preparación, incluido PID. |
ReadyThreadStack |
Pila del subproceso listo. |
ReadyTime (s) |
Hora en la que se probó el nuevo subproceso. |
SwitchInTime(s) |
Hora en la que se cambió el nuevo subproceso. |
TimeSinceLast (s) |
SwitchInTime(s) menos LastSwitchOutTime (s) |
Esperas (s) |
ReadyTime (s) menos LastSwitchOutTime (s) |
El perfil predeterminado usa los siguientes valores preestablecidos para este gráfico:
Escala de tiempo por CPU
Escala de tiempo por proceso, subproceso
Uso por prioridad en el modificador de contexto Begin
Uso por CPU
Uso por proceso, subproceso
Escala de tiempo por CPU
Uso de CPU en una escala de tiempo por CPU muestra cómo se distribuye el trabajo entre los procesadores. Figura 11 Escala de tiempo de uso de CPU (precisa) por CPU muestra la escala de tiempo en un sistema de ocho procesadores:
Figura 11 Escala de tiempo de uso de CPU (precisa) por CPU
Escala de tiempo por proceso, subproceso
Uso de CPU en una escala de tiempo por proceso, por subproceso, muestra qué procesos tenían subprocesos que se ejecutaban en determinados momentos. Figura 12 Escala de tiempo de uso (precisa) por proceso, subproceso muestra esta escala de tiempo en varios procesos:
Figura 12 Escala de tiempo de uso (precisa) por proceso, subproceso
Uso por prioridad en el modificador de contexto Begin
Este gráfico identifica las ráfagas de actividad de subproceso de alta prioridad en cada nivel de prioridad. En la figura 13 Uso de CPU (preciso) uso por prioridad en El inicio del conmutador de contexto se muestra la distribución de prioridades:
Figura 13 Uso de CPU (preciso) por prioridad en el inicio del conmutador de contexto
Uso por CPU
En este gráfico, el uso de CPU se agrupa y grafo por CPU para mostrar cómo se distribuye el trabajo entre los procesadores. En la figura 14 Uso de CPU (preciso) uso por CPU se muestra este gráfico para un sistema que tiene ocho procesadores.
Figura 14 Uso de CPU (preciso) por CPU
Uso por proceso, subproceso
En este gráfico, el uso de CPU se agrupa primero por proceso y, a continuación, por subproceso. Muestra el uso relativo de los procesos y los subprocesos de cada proceso Figura 15 Uso de CPU (preciso) uso por proceso, subproceso muestra esta distribución entre varios procesos:
Figura 15 Uso de CPU (preciso) por proceso, subproceso
Gráfico DPC/ISR
El gráfico DPC/ISR es el origen principal de la información de DPC/ISR en WPA. Cada fila del gráfico representa un fragmento, que es un período de tiempo durante el cual un DPC o ISR se ejecutó sin interrupciones. Los datos se recopilan al principio y al final de los fragmentos. Los datos adicionales se recopilan cuando se completa un DPC/ISR. En la figura 16 diagrama DPC/ISR se muestra cómo funciona esto:
Figura 16 Diagrama DPC/ISR
En la figura 16 diagrama DPC/ISR se describen los datos recopilados durante las actividades siguientes:
DPC/ISR-A comienza a ejecutarse.
Una interrupción del dispositivo que tiene un nivel de interrupción mayor que DPC/ISR-A hace que ISR-B interrumpa DPC/ISR A, finalizando así el primer fragmento de DPC/ISR-A.
ISR-B finaliza y, por tanto, finaliza el fragmento de ISR-B. DPC/ISR-A reanuda la ejecución en un segundo fragmento.
DPC/ISR-A finaliza, finalizando así el segundo fragmento de DPC/ISR-A.
En la tabla de datos se muestra una fila para cada fragmento. Los fragmentos de DPC/ISR-A comparten información idéntica con columnas que no son de fragmento.
Las columnas del gráfico DPC/ISR describen información de nivel de fragmento o columnas de nivel DPC/ISR. Cada fragmento disimilar de datos en columnas de nivel de fragmento y datos idénticos en columnas DPC/ISR.
Columna | Detalles |
---|---|
% de duración (fragmentada) |
Duración (fragmentada) que se expresa como un porcentaje del tiempo total de CPU durante el período de tiempo visible actualmente. |
% de duración exclusiva |
Duración exclusiva que se expresa como un porcentaje del tiempo total de CPU durante el período de tiempo visible actualmente. |
% de duración inclusiva |
Duración inclusiva que se expresa como un porcentaje del tiempo total de CPU durante el período de tiempo visible actualmente. |
Dirección |
Dirección de memoria de la función DPC o ISR. |
Recuento (DPCs/ISR) |
Recuento de DPCs/ISR representados por esta fila. Esto siempre es 1 para las filas que representan el fragmento final de un DPC/ISR; de lo contrario, este recuento es 0. |
Recuento (fragmentos) |
Número de fragmentos representados por la fila. Siempre es 1 para las filas individuales. |
CPU |
Índice del procesador lógico en el que se ejecutó el DPC o ISR. |
Tipo DPC |
Para DPC, el tipo de DPC, ya sea Regular o Timer. Este valor está en blanco para un ISR. |
Tiempo de entrada (s) de DPC/ISR |
Hora en el seguimiento cuando se inició el DPC/ISR. |
Tiempo de salida de DPC/ISR (s) |
Hora desde el principio del seguimiento hasta el momento en que se completó el DPC/ISR. |
Duración (fragmentada) (ms) |
Tiempo de salida del fragmento (s) menos tiempo de entrada de fragmento (s) en milisegundos. |
Duración exclusiva (ms) |
Suma de duraciones fragmentadas en ms. para todos los fragmentos de este DPC/ISR. |
Fragmento |
Si el DPC/ISR de esta fila tenía varios fragmentos, este valor es True; de lo contrario, es False. |
Fragmento |
Si no era el único fragmento de este DPC/ISR, este valor es True; en caso contrario, es False. |
Tiempo de entrada del fragmento (s) |
Hora a la que se inició la ejecución del fragmento. |
Tiempo de salida del fragmento (s) |
Hora en que el fragmento dejó de ejecutarse. |
Función |
Función DPC o ISR que se ejecutó. |
Duración inclusiva (ms) |
Tiempo de salida de DPC/ISR (s) menos DPC/ISR Entrar tiempo (s) en milisegundos. |
MessageIndex |
Índice de interrupción de las interrupciones señaladas por mensaje. |
Módulo |
Módulo que contiene la función DPC o ISR. |
Valor devuelto |
Valor devuelto de DPC/ISR |
Tipo |
Tipo de evento; esto es: DPC o Interrupción (ISR). |
Vector |
Valor del vector de interrupción en el dispositivo. |
El perfil predeterminado usa los siguientes valores preestablecidos para este gráfico:
[DPC,ISR,DPC/ISR] Duración por CPU
[DPC,ISR,DPC/ISR] Duración por módulo, función
[DPC,ISR,DPC/ISR] Escala de tiempo por módulo, función
[DPC,ISR,DPC/ISR] Duración por CPU
Los eventos DPC/ISR se agregan mediante la CPU en la que se ejecutaron y se ordenan por duración. En este gráfico se muestra la asignación de la actividad DPC entre CPU. En la figura 17 DPC/ISR Duration by CPU (Duración de DPC/ISR por CPU), se muestra este gráfico para un sistema que tiene ocho procesadores.
Figura 17 Duración de DPC/ISR por CPU
[DPC,ISR,DPC/ISR] Duración por módulo, función
Los eventos DPC/ISR se agregan en este gráfico mediante el módulo y la función de las rutinas DPC/ISR, y se ordenan por duración. Esto muestra qué rutinas DPC/ISR consumieron la mayor parte de la figura 18 DPC/ISR Duration by Module, Function muestra un período de tiempo que incurre en la actividad DPC/ISR en dos módulos:
Figura 18 Duración de DPC/ISR por módulo, Función
[DPC,ISR,DPC/ISR] Escala de tiempo por módulo, función
Los eventos DPC/ISR se agregan en este grafo mediante el módulo y la función de las rutinas DPC/ISR. Se grafican como una escala de tiempo. Este gráfico proporciona una vista detallada del período de tiempo durante el cual se ejecutaron dpCs/ISR. Este gráfico también puede mostrar cómo se puede fragmentar un único DPC/ISR. Figura 19 Escala de tiempo DPC/ISR por módulo, La función muestra una escala de tiempo de actividad en tres módulos:
Figura 19 Escala de tiempo de DPC/ISR por módulo, Función
Árboles de pila
Los árboles de pila se muestran en las tablas Uso de CPU (muestreado), Uso de CPU (preciso) e DPC/ISR en WPA y en problemas que se notifican en los informes de evaluación. Los árboles de pila representan las pilas de llamadas asociadas a varios eventos durante un período de tiempo. Cada nodo del árbol representa un segmento de pila compartido por un subconjunto de los eventos. El árbol se construye a partir de las pilas individuales y se muestra en la figura 20 Pilas de tres eventos:
Figura 20 Pilas de tres eventos
En la figura 21 Segmentos comunes identificados se muestra cómo se identifican las secuencias comunes para este gráfico:
Figura 21 Segmentos comunes identificados
En la figura 22 Árbol creado a partir de pilas se muestra cómo se combinan los segmentos comunes para formar los nodos de un árbol:
Figura 22 Árbol creado a partir de pilas
La columna Pilas de la interfaz de usuario WPA contiene un expansador para cada nodo no hoja. En los problemas notificados por la evaluación, el árbol se muestra junto con los pesos agregados. Algunas ramas se pueden quitar del gráfico si sus pesos no cumplen un umbral especificado. En la pila de ejemplo siguiente se muestra cómo se muestran los eventos representados anteriormente como parte de un problema notificado por la evaluación.
5ms ModuleA!Function1
5ms ModuleA!Function2
5ms ModuleA!Function3
|
4ms |-ModuleA!Function4
4ms | ModuleB!Function1
| |
1ms | |-ModuleB-Function2
1ms | | ModuleB-Function3
| |
3ms | |-ModuleB!Function3
3ms | ModuleB!Function4
|
1ms |-ModuleA!Function5
1ms ModuleC!Function1
1ms ModuleC!Function2
El <itself>
nodo de una pila representa el momento en que una función está en la parte superior de la pila. El <itself>
nodo no incluye el tiempo dedicado a las funciones a las que llama la función primaria. Esa duración se denomina tiempo exclusivo invertido en la función.
Por ejemplo, Function1 llama a Function2. Function2 pasó 2 ms en un bucle intensivo de CPU y llamó a otra función que se ejecutó para 4 ms. Esto se puede representar mediante la siguiente pila:
6ms ModuleA!Function1
|
2ms |-<itself>
4ms |-ModuleA!Function2
4ms ModuleB!Function3
4ms ModuleB-Function4
Técnicas
En esta sección se describe un enfoque estándar para el análisis de rendimiento. Proporciona técnicas que puede usar para investigar problemas comunes de rendimiento relacionados con la CPU.
El análisis de rendimiento es un proceso de cuatro pasos:
Defina el escenario y el problema.
Identifique los componentes implicados y el intervalo de tiempo pertinente.
Cree un modelo de lo que debería haber ocurrido.
Use el modelo para identificar problemas e investigar las causas principales.
Definir el escenario y el problema
El primer paso en el análisis de rendimiento es definir claramente el escenario y el problema. Muchos problemas de rendimiento afectan a escenarios medidos por métricas de evaluación. Por ejemplo:
Escenario 1: Un recurso físico no se está utilizando completamente. Por ejemplo, un servidor no puede usar completamente una conexión de red porque no puede cifrar los paquetes lo suficientemente rápido.
Escenario 2: se está utilizando un recurso físico más de lo que debería ser. Por ejemplo, un sistema usa recursos significativos de CPU durante un período de inactividad que usa energía de batería.
Escenario 3: Las actividades no se completan a una velocidad necesaria. Por ejemplo, los fotogramas se quitan durante la reproducción de vídeo porque los fotogramas no se descodifican rápidamente.
Escenario 4: se ha retrasado una actividad. Por ejemplo, el usuario inició Internet Explorer, pero tardó más de lo esperado en abrir una pestaña.
En esta guía se tratan los escenarios 3 y 4 relacionados con los recursos de CPU. Los escenarios 1 y 2 están fuera del ámbito y no están cubiertos. Para analizar estos problemas, puede empezar con una observación ambigua, como "es demasiado lenta" y formular preguntas adicionales para identificar el escenario y el problema exacto.
Identificar los componentes y el período de tiempo
Una vez identificado el escenario y el problema, puede identificar los componentes implicados y el período de tiempo de interés. Los componentes incluyen recursos de hardware, procesos y subprocesos.
A menudo puede encontrar el intervalo de tiempo de interés mediante la identificación de la actividad asociada en la guía de análisis. Una actividad es un intervalo entre un evento de inicio y un evento de detención que puede seleccionar y acercar, en WPA. Si no se define una actividad, puede encontrar el intervalo de tiempo buscando eventos genéricos específicos asociados al escenario o buscando cambios en el uso de recursos que podrían marcar el principio y el final de un escenario. Por ejemplo, si la CPU estaba inactiva durante dos segundos y, a continuación, se usaba completamente durante cuatro segundos y, a continuación, inactiva de nuevo durante dos segundos, los cuatro segundos de uso completo podrían ser el área de interés en un seguimiento que captura la reproducción de vídeo.
Creación de un modelo
Para comprender las causas principales de un problema, debe tener un modelo de lo que debería haber ocurrido. El modelo comienza con el problema o cualquier objetivo asociado para la métrica; por ejemplo, "Esta operación debe haberse completado en menos de 5 segundos".
Un modelo más completo contiene información sobre cómo deben realizarse los componentes. Por ejemplo, ¿qué comunicación se espera entre los componentes? ¿Qué uso de recursos es típico? ¿Cuánto tiempo tardan normalmente las operaciones?
La información del modelo se puede encontrar a menudo en la guía de análisis de evaluación. Si ese recurso no está disponible, puede generar un seguimiento a partir de hardware y software similares que no muestren el problema de rendimiento, para crear un modelo.
Use el modelo para identificar problemas y, a continuación, investigar las causas principales.
Después de tener un modelo, puede comparar un seguimiento con el modelo para identificar problemas. Por ejemplo, un modelo para una actividad determinada denominada Suspender dispositivos podría sugerir que toda la actividad debería completarse en tres segundos, mientras que cada instancia de una sub-actividad denominada Suspender <nombre> del dispositivo no debería tardar más de 100 ms. Si dos instancias de la sub-actividad Suspend Device Name (Suspender <nombre> de dispositivo) cada una toman 800 ms, debe investigar esas instancias.
Cada desviación del modelo se puede analizar para encontrar una causa principal. Debe examinar el estado de los subprocesos implicados y buscar causas principales comunes. A continuación se describen algunas causas principales relacionadas con la CPU, para las actividades que no se completan a una velocidad requerida o se retrasan:
Uso directo de CPU: los subprocesos adecuados recibieron recursos completos de CPU, pero el programa necesario no se ejecutó lo suficientemente rápido. Esto puede deberse a un mal funcionamiento del programa o por hardware lento.
Interferencia de subprocesos: un subproceso no obtuvo suficiente tiempo de ejecución porque otros subprocesos se estaban ejecutando en su lugar. En este caso, el subproceso se considera inactivo o adelantado.
Interferencia de DPC/ISR: los subprocesos no tenían suficiente tiempo de ejecución porque las CPU estaban ocupadas procesando DPCs o ISR.
En muchos casos, una de estas causas raíz no afecta notablemente al subproceso y el subproceso pasa la mayor parte de su tiempo en estado de espera. En este caso, debe identificar e investigar el evento para el que el subproceso está esperando. Este tipo recursivo de investigación se denomina análisis de espera y comienza identificando la ruta de acceso crítica.
Técnica avanzada: Análisis de espera y ruta de acceso crítica
Una actividad es una red de operaciones, algunas secuenciales y algunas paralelas, que fluyen desde un evento de inicio a un evento final. Cualquier par de eventos de inicio y fin en un seguimiento se puede ver como una actividad. La ruta de acceso más larga a través de esta red de operaciones se conoce como la ruta de acceso crítica. Reducir la duración de cualquier operación en la ruta crítica reduce directamente la duración de la actividad general, aunque también puede cambiar la ruta de acceso crítica.
La figura 23 Operaciones de actividad muestra la actividad de tres subprocesos. Thread-1 envía el evento de inicio de actividad y espera a que Thread-2 y Thread-3 completen sus tareas. Thread-2 completa primero su tarea, seguida de Thread-3. Cuando ambos subprocesos han completado sus tareas, Thread-1 se prepara y completa el evento de actividad.
Figura 23 Operaciones de actividad
En este escenario, la ruta de acceso crítica incluye partes de Thread-3 y Thread-1. Estos se trazan en la figura 24 Ruta crítica. Dado que Thread-2 no está en la ruta de acceso crítica, el tiempo necesario para completar su tarea no afecta al tiempo de actividad general.
Figura 24 Ruta crítica
La ruta crítica es una respuesta literal de bajo nivel a la pregunta de por qué una actividad tardó tanto tiempo como lo hizo. Una vez conocidos los segmentos clave de la ruta de acceso crítica, se pueden analizar para encontrar los problemas que contribuyen al retraso general.
Enfoque general para encontrar la ruta crítica
El primer paso para encontrar la ruta de acceso crítica es revisar el modelo de escenario para comprender el propósito y la implementación de la actividad.
Comprender una actividad puede ayudar a identificar operaciones, procesos y subprocesos específicos que podrían estar en la ruta de acceso crítica. Por ejemplo, un retraso en la actividad Init del Explorador de reanudación de inicio rápido puede deberse a las aplicaciones RunOnce y al proceso de inicialización del Explorador, ambos requieren una cantidad significativa de E/S.
Después de revisar el modelo de escenario, compruebe si la evaluación notificó algún problema para la actividad afectada. Muchas veces, se incluye una aproximación de la ruta crítica en los problemas de retraso notificados por la evaluación. La ruta de acceso crítica se muestra como una secuencia de esperas y acciones listas. Se puede leer de principio a fin como una secuencia de eventos, con el segmento principal retrasado de la ruta de acceso crítica en el centro de la lista. La última entrada de la lista es la acción que ha fácilmente el subproceso que completó la actividad.
Si debe buscar manualmente la ruta de acceso crítica, se recomienda identificar el proceso y el subproceso que completó la actividad y trabajar hacia atrás desde el momento en que se completó la actividad. Puede identificar el proceso y el subproceso que iniciaron una actividad, así como el proceso y el subproceso que completaron una actividad, a través del gráfico Activities (Actividades ) en WPA.
El gráfico Activities (Actividades) se muestra cuando el seguimiento se carga a través de un archivo XML de resultados de evaluación. Para identificar el proceso y el subproceso que están asociados a una actividad determinada, expanda el gráfico a la actividad de interés y, a continuación, cambie la vista a Graph+Table. Establezca el modo de grafo en Tabla. Las columnas Iniciar proceso, Identificador de subproceso inicio, Proceso final e Id. de subproceso final se muestran para cada actividad de la tabla.
Después de conocer el proceso de inicio y finalización, el subproceso y la implementación de la actividad, la ruta de acceso crítica se puede realizar un seguimiento hacia atrás. Empiece por analizar el subproceso que completó la actividad para determinar cómo el subproceso pasó la mayor parte de su tiempo: en ejecución, listo o en espera.
El tiempo de ejecución significativo indica que el uso directo de la CPU podría haber contribuido a la duración de la ruta de acceso crítica. El tiempo invertido en el modo listo indica que otros subprocesos contribuyen a la duración de la ruta crítica evitando que se ejecute un subproceso en la ruta crítica. Tiempo dedicado a la espera de puntos de E/S, temporizadores u otros subprocesos y procesos en la ruta crítica para la que estaba esperando el subproceso actual.
Cada subproceso que haya fácilmente el subproceso actual es probablemente otro vínculo en la ruta de acceso crítica y también se puede analizar hasta que se tenga en cuenta la duración de la ruta crítica.
Procedimiento: Buscar la ruta crítica en WPA
En el procedimiento siguiente se supone que ha identificado una actividad en el gráfico Actividades para la que desea encontrar la ruta de acceso crítica.
Para identificar el proceso que completó la actividad, mantenga el puntero sobre la actividad en el gráfico Actividades .
Agregue el gráfico Uso de CPU (preciso). Acercar la actividad afectada y aplicar el valor preestablecido Uso por proceso.
Haga clic con el botón derecho en los encabezados de columna y haga visibles las columnas ReadyThreadStack y Uso de CPU (ms). Quite las columnas Ready (us) [Max] y Waits (us) [Max].
Expanda el proceso de destino y ordene respectivamente por uso de CPU (ms), Listo (us) [Sum]y Esperas (us) [Sum].
Busque newThreadIds en el proceso que tenga la mayor cantidad de tiempo invertido en estado en ejecución, listo o en espera.
Los subprocesos que pasan un tiempo significativo en los estados En ejecución o Listo pueden representar el uso directo de la CPU en la ruta de acceso crítica. Tenga en cuenta que sus identificadores de subproceso.Threads que pasan un tiempo significativo en estado De espera podrían estar esperando en E/S, un temporizador o en otro subproceso en la ruta de acceso crítica.
Para detectar lo que esperaban los subprocesos, expanda el grupo NewThreadId para mostrar ReadyThreadStack.
Expanda [Raíz].
Las pilas que comienzan con KiDispatchInterrupt no están relacionadas con otro subproceso. Para determinar qué estaba esperando el subproceso en estas pilas, expanda KiDispatchInterrupt y vea las funciones de la pila secundaria. IopfCompleteRequest indica que el subproceso fácil estaba esperando E/S. KiTimerExpiration indica que el subproceso fácil estaba esperando un temporizador.
Expanda pilas que no comiencen con KiDispatchInterrupt hasta que vea readyingProcess y readyingThread. Si el proceso ya está expandido, expanda newThreadId que corresponde a ReadyingThread. Repita este paso hasta que encuentre un subproceso que se está ejecutando, listo, esperando otro motivo o esperando un proceso diferente. Si el subproceso está esperando un proceso diferente, repita este procedimiento mediante ese proceso.
Ejemplo
En este ejemplo se presenta un retraso en la actividad Init del Explorador de reanudación de inicio rápido. Una búsqueda en el panel Problemas muestra que se notifican siete problemas de tipo de retraso para esta actividad. Cada uno de estos problemas se puede revisar como un segmento de la ruta de acceso crítica. Se identifican los siguientes segmentos clave:
El subproceso 3872 del proceso TestBootStrapper.exe (3024) se adelanta durante 2,1 segundos.
El subproceso 3872 del proceso TestBootStrapper.exe (3024) usa 1 segundo de tiempo de CPU.
El subproceso 3872 del proceso TestBootStrapper.exe (3024) vacía un subárbol del Registro para 544 milisegundos.
El subproceso 3872 del proceso TestBootStrapper.exe (3024) se suspende durante 513 milisegundos.
Subprocesos 4052 y 4036 de Explorer.exe lectura del disco, lo que provoca un retraso de 461 milisegundos.
El subproceso 3872 del proceso TestBootStrapper.exe (3024) se muere por 187 milisegundos.
Subproceso 3872 de proceso TestBootStrapper.exe escribe 3,5 MB en disco, lo que provoca un retraso de 178 milisegundos.
Los problemas muestran que esta actividad se retrasó en 5,2 segundos. Estos retrasos contribuyen a una gran proporción de las actividades de duración total de 6,3 segundos. La aplicación TestBootStrapper.exe es principalmente responsable del retraso, principalmente porque adelantó otras tareas de procesamiento.
Investigar problemas en la ruta de acceso crítica
Zoom a la región afectada y agregue las columnas ReadyThreadStack y Uso de CPU (ms).
En este caso, Explorer.exe es el proceso que completa la actividad. Expanda el proceso de explorer.exe y ordene el proceso respectivamente por uso de CPU (ms), Listo (us) [Sum]y Esperas (us) [Sum], como se muestra en las cifras siguientes:
Figura 25 Actividad por uso de CPU (ms)
Figura 26 Actividad por listo (nosotros)
Figura 27 Actividad por esperas (nosotros)
La ordenación por la columna Uso de CPU (ms) muestra una fila secundaria superior de 299 milisegundos. La ordenación por la columna Ready (us) [Sum] muestra una fila secundaria superior de 46 ms. La ordenación por la columna Waits (us) [Sum] muestra una fila secundaria superior de 5749 milisegundos y una segunda fila de 4902 milisegundos. Dado que estas filas contribuyen significativamente al retraso, debe investigarlas aún más.
Expanda las pilas para mostrar los subprocesos listos, como se muestra en las figuras siguientes:
Figura 28 Proceso de preparación y subproceso listo para un subproceso
Figura 29 Proceso de preparación y subproceso listo para otro subproceso
En este ejemplo, el primer subproceso pasa la mayor parte de su tiempo esperando a que el proceso de RunOnce.exe salga. Debe investigar por qué el proceso de RunOnce.exe tarda tanto tiempo en completarse. El segundo subproceso está esperando el primer subproceso y probablemente es un vínculo insignificante en la misma cadena de espera.
Repita los pasos descritos en este procedimiento para RunOnce.exe. La columna de contribución principal es Waits (us) y tiene cuatro posibles colaboradores.
Expanda cada colaborador para ver que los tres primeros colaboradores están esperando al cuarto colaborador. Esta situación hace que los tres primeros colaboradores no son significativos para la cadena de espera. El cuarto colaborador está esperando otro proceso, TestBootStrapper.exe.
Este escenario se muestra en la figura 30 Proceso de preparación y Subproceso listo para un subproceso en RunOnce.exe:
Figura 30 Proceso de preparación y subproceso listo para un subproceso en RunOnce.exe
Repita los pasos de este procedimiento para TestBootStrapper.exe. Los resultados se muestran en las tres cifras siguientes:
Figura 31 Subprocesos por uso de CPU (ms)
Figura 32 Subprocesos listos (nosotros)
Figura 33 Subprocesos por esperas (nosotros)
El subproceso 3872 pasó aproximadamente 1 segundo en ejecución, 2 segundos listos y 1,3 segundos en espera. Dado que este subproceso también es el subproceso de preparación para el subproceso 3872, los tiempos de ejecución y de preparación probablemente contribuyen al retraso. La evaluación notifica los siguientes problemas cuyas horas coinciden con los retrasos:
El subproceso 3872 del proceso TestBootStrapper.exe (3024) se adelanta durante 2,1 segundos.
El subproceso 3872 del proceso TestBootStrapper.exe (3024) se muere por 187 milisegundos.
El subproceso 3872 del proceso TestBootStrapper.exe (3024) usa 1 segundo de tiempo de CPU.
Para encontrar otros problemas de contribución, vea el evento para el que el subproceso 3872 estaba esperando. Expanda ReadyThreadStack para ver los colaboradores a los 1,3 segundos de espera, como se muestra en la figura 34 Colaboradores en tiempo de espera:
Figura 34 Colaboradores al tiempo de espera
KiRetireDpcList suele estar relacionado con E/S y KiTimerExpiration es un temporizador. Puede ver cómo se iniciaron las E/S y el temporizador quitando ReadyThreadStack y viendo NewThreadStack. En esta vista se muestran tres funciones relacionadas, como se muestra en la figura 35 E/S y temporizador en NewThreadStack:
Figura 35 E/S y temporizador en NewThreadStack
Esta vista revela los detalles siguientes:
El subproceso 3872 del proceso TestBootStrapper.exe (3024) vacía un subárbol del Registro para 544 milisegundos.
El subproceso 3872 del proceso TestBootStrapper.exe (3024) se suspende durante 513 milisegundos.
Subproceso 3872 de proceso TestBootStrapper.exe escribe 3,5 MB en disco, lo que provoca un retraso de 178 milisegundos.
Al empezar a investigar la ruta de acceso crítica, ha analizado la causa de espera más importante en Explorer.exe y ha descartado todas las partes de la ruta crítica que se produjo después de esa causa de espera. Para capturar esta sección anteriormente ignorada de la ruta de acceso crítica, debe examinar la escala de tiempo. Agregue uso de CPU (preciso) y aplique la escala de tiempo por proceso, valor preestablecido de subproceso .
Filtre para incluir solo los procesos identificados como parte de la ruta de acceso crítica. El gráfico resultante se muestra en la figura 36 Escala de tiempo de ruta crítica:
Figura 36 Escala de tiempo de ruta crítica
En la figura 36 Escala de tiempo de ruta crítica se muestra que Explorer.exe realizaron más trabajo después de dejar de esperar RunOnce.exe. Acercar el período de tiempo después de la cadena de espera analizada previamente y realizar otro análisis. En este caso, el análisis revela un gran número de subprocesos internos para Explorer.exe y ningún seguimiento claro a través de la ruta de acceso crítica. En este caso, es probable que el análisis adicional genere información procesable.
Uso directo de CPU
Las actividades suelen retrasarse porque un subproceso en la ruta de acceso crítica usa un tiempo de CPU significativo. Mediante el modelo de estado de subproceso, puede ver que este problema se caracteriza por un subproceso en la ruta de acceso crítica que pasa una cantidad excepcional de tiempo en estado En ejecución. En algún hardware, este uso intensivo de la CPU puede contribuir a retrasos.
Identificación del problema
Muchas evaluaciones usan heurística para identificar problemas relacionados con el uso directo de la CPU. El uso significativo de la CPU en la ruta de acceso crítica se notifica como un problema de la forma siguiente:
El uso de CPU por proceso P retrasa la actividad afectada A durante x segundos
Donde P es el proceso que se está ejecutando, A es la actividad y x es el tiempo en segundos.
Si estos problemas se notifican para una actividad que incurre en retrasos, el uso directo de la CPU podría ser la causa.
Investigación del uso directo de CPU
Puede identificar manualmente el problema buscando CPU individuales que incurren en un uso de CPU del 100 % en el gráfico Uso de CPU (muestreado).
Acercar un área de interés en el gráfico y seleccionar el valor preestablecido Uso por proceso y subproceso .
De forma predeterminada, la tabla muestra filas en la parte superior que tienen el uso de CPU agregado más alto. Estos subprocesos también se muestran en la parte superior del gráfico Uso de CPU (muestreado).
Nota En un sistema que tiene varios procesadores, parece que un subproceso que usa el 100 % de un solo procesador consumirá 100/(número de procesadores lógicos). En este tipo de sistema, solo el subproceso inactivo virtual (PID 0, TID 0) puede mostrar un mayor uso del procesador que 100/(número de procesadores lógicos). Si los procesos y subprocesos que consumen la mayor parte de la CPU corresponden a los subprocesos de la ruta crítica, el uso directo de la CPU probablemente es un factor.
Ejemplo de problema de uso directo de CPU notificado por la evaluación
El uso de CPU por el proceso de TestUM.exe (4024) retrasa la actividad afectada, el proceso de apagado rápido de inicio TestIM.exe, durante 2,1 segundos. Este ejemplo se muestra en la figura 37 Subproceso 3208:
Figura 37 Subproceso 3208
Investigación
Después de detectar que el uso directo de la CPU contribuye a un retraso en la ruta de acceso crítica, debe identificar los módulos y funciones específicos que contribuyen al retraso.
Técnica: Revisión de un problema de uso directo de CPU notificado por la evaluación
Puede expandir un problema de uso directo de CPU notificado por la evaluación para mostrar la ruta de acceso crítica que se ve afectada por el uso directo de la CPU. Si expande el nodo asociado al uso de cpu, se mostrarán las pilas asociadas con el uso de CPU y los módulos asociados. Esta vista se muestra en la figura 38 Segmento de uso de CPU expandido:
Figura 38 Segmento de uso ampliado de CPU
Técnica: Explorar manualmente las pilas de un problema de uso directo de CPU
Si la evaluación no ha informado de un problema o si necesita una comprobación adicional, puede usar el gráfico Uso de CPU (muestreado) para recopilar manualmente información sobre los módulos y funciones implicados en un problema de uso de CPU. Para ello, debe acercar el área de interés y ver las pilas ordenadas por uso de CPU.
Exploración manual de las pilas de un problema de uso directo de CPU
En el menú Seguimiento, haga clic en Cargar símbolos.
Acercar la escala de tiempo para mostrar solo la parte de la ruta de acceso crítica afectada por el problema de CPU.
Aplique el valor preestablecido Uso por proceso y subproceso .
Agregue la columna Pila a la pantalla y arrastre esta columna a la derecha del identificador de subproceso (a la izquierda de la barra).
Expanda el proceso y el subproceso para mostrar los árboles de pila.
Las filas de la pila se ordenan en orden descendente por % peso del uso de CPU. Esto coloca las pilas más interesantes en la parte superior. A medida que expande las pilas, observe la columna % weight para asegurarse de que el foco permanece en las filas que tienen el uso más alto.
Para extraer una copia de la pila, seleccione todas las filas, haga clic con el botón derecho y haga clic en Copiar selección.
Solución
Puede aplicar soluciones en los niveles de configuración y componente para resolver un uso elevado de la CPU.
El uso directo de cpu tiene un mayor impacto en los equipos que tienen procesadores de gama inferior. En estos casos, puede agregar más potencia de procesamiento al equipo. O bien, es posible que pueda quitar los módulos de problemas de la ruta de acceso crítica o del sistema. Si puede cambiar los componentes, considere un esfuerzo de rediseño para lograr uno de los siguientes resultados:
Eliminación del código intensivo de CPU de la ruta de acceso crítica
Uso de algoritmos más eficientes para cpu
Aplazar o almacenar en caché el trabajo
Interferencia de subprocesos
El uso de CPU por subprocesos que no están en la ruta de acceso crítica (y que podría no estar relacionado con la actividad), puede hacer que los subprocesos que se encuentren en la ruta de acceso crítica se retrasen. El modelo de estado del subproceso muestra que este problema se caracteriza por subprocesos en la ruta de acceso crítica que pasa una cantidad inusual de tiempo en el estado Listo.
Identificación del problema
Muchas evaluaciones usan heurística para identificar problemas relacionados con la interferencia. Estos se notifican en una de las dos formas siguientes:
El proceso P está muerto. El colapso provoca un retraso en la actividad afectada A de x ms.
Se adelantó el proceso P . El adelantamiento provoca un retraso en la actividad afectada A de x ms.
Donde P es el proceso, A es la actividad y x es la hora en ms.
El primer formulario refleja la interferencia de los subprocesos en el mismo nivel de prioridad que el subproceso en la ruta crítica. El segundo formulario refleja la interferencia de los subprocesos que están en un nivel de prioridad más alto que el subproceso en la ruta de acceso crítica.
Si estos tipos de problemas se notifican para una actividad retrasada, la interferencia de subprocesos puede ser la causa. Puede usar el gráfico Uso de CPU (preciso) para identificar manualmente el problema.
Identificación de problemas de interferencia de subprocesos
Acercar el intervalo y aplicar el valor preestablecido de uso por CPU . Un uso del 100 % en todas las CPU indica un problema de interferencia.
Aplique el valor preestablecido Uso por proceso, subproceso y ordene por la primera columna Ready (us). (Esta es la columna que incluye el Suma de agregación).)
Expanda el proceso de la actividad que se ve afectada y examine el tiempo de preparación de los subprocesos en la ruta de acceso crítica. Este valor es el tiempo máximo que se puede reducir el retraso mediante la resolución de cualquier problema de interferencia de subproceso. Un valor con una magnitud significativa en relación con el retraso que se está investigando indica que existe un problema de interferencia de subprocesos.
La figura 39 Uso de CPU está cerca del 100 % y la figura 40 Problema de interferencia de subprocesos representa este escenario:
Figura 39 El uso de CPU está cerca del 100 %
Figura 40 Problema de interferencia de subprocesos
Investigación
Una vez identificado el problema, debe determinar por qué el subproceso afectado pasó tanto tiempo en estado Listo.
Técnica: Determinar por qué un subproceso pasó tiempo en estado listo
Puede usar el gráfico Uso de CPU (preciso) para determinar por qué un subproceso ha invertido tiempo en el estado Listo. Primero debe determinar si el subproceso está restringido a determinados procesadores. Aunque no puede obtener directamente esta información, puede examinar el historial de uso de CPU de un subproceso durante períodos de uso elevado de la CPU. Este es el período en el que los subprocesos tienden a cambiar con frecuencia entre procesadores.
Determinar las restricciones de procesador de un subproceso
Acercar la región afectada.
Agregue el gráfico Uso de CPU (preciso) y aplique el valor preestablecido Uso por proceso y subproceso .
Use el cuadro de diálogo Avanzado para agregar una columna cpu que tenga un modo de agregación Recuento único a la derecha de NewThreadId.
Filtre el gráfico para mostrar solo los subprocesos en los que está interesado.
El valor de la columna Cpu refleja el número de procesadores en los que se ejecutó el subproceso durante el intervalo de tiempo actual. Durante períodos de uso de CPU del 100 %, este número se aproxima al número de procesadores en los que se permite ejecutar este subproceso. Si el valor es menor que el número de procesadores disponibles, es probable que el subproceso esté restringido a determinadas CPU.
En la figura 41 Subprocesos restringidos se proporciona un ejemplo de este gráfico:
Figura 41 Subprocesos restringidos
Después de conocer las restricciones de procesador de un subproceso, puede determinar qué adelantó o desintempleó el subproceso. Para ello, debe identificar los intervalos que el subproceso pasó en estado Listo y, a continuación, examinar qué otros subprocesos o procesos se estaban ejecutando durante esos intervalos.
Determinar qué adelantó o desintempleó el subproceso
Construya un gráfico que muestre cuándo el subproceso estaba en estado Listo y aplique el valor preestablecido De uso por proceso y subproceso .
Abra el Editor de vistas, haga clic en Avanzadas y seleccione la pestaña Configuración de Graph.
Establezca Hora de inicio en ReadyTime (s) y establezca La duración en Listo (us),como se muestra en la figura 42 Columnas de tiempo listo. Haga clic en OK.
Figura 42 Columnas de tiempo listo
En el Editor de vistas, reemplace la columna Uso de CPU (%) por la columna Ready (us) [Sum].
Seleccione el subproceso de interés para generar un gráfico similar a la figura 43 Gráfico de tiempo listo:
Figura 43 Gráfico de tiempo listo
En este caso, el subproceso pasó un tiempo significativo en el estado Listo. Para determinar su prioridad típica, agregue una agregación Average a la columna NewInPri .
En este caso, la prioridad media del subproceso es exactamente 8. Este número indica que probablemente es un subproceso en segundo plano que nunca recibe elevaciones de prioridad.
Una vez conocida la prioridad media, examine la actividad de CPU de las CPU en las que se permite ejecutar el subproceso.
En este caso, el subproceso se determinó que solo tenía afinidad con la CPU 1.
Agregue otro gráfico uso de CPU (preciso) y aplique el valor de Uso por valor preestablecido de CPU . Seleccione las CPU pertinentes.
Abra la vista Avanzadas y agregue un filtro para la prioridad que encontró anteriormente para filtrar ese subproceso. Este escenario se muestra en la figura 44 Filtro de subprocesos:
Figura 44 Filtro de subprocesos
En la figura 45 Uso de CPU, Tiempo de preparación y Otra actividad de subprocesos, el gráfico superior muestra el uso de CPU del subproceso 3548. El gráfico central muestra la hora en que el subproceso estaba listo y el gráfico inferior muestra la actividad en las CPU en las que se permitió que se ejecutara el subproceso (en este caso, Cpu1).
Figura 45 Uso de CPU, tiempo de preparación y otra actividad de subproceso
Acercar una región en la que el subproceso estaba listo, pero no se ejecutó, durante la mayor parte del tiempo durante ese intervalo.
En el gráfico Uso de CPU, agregue NewInPri a la izquierda de la barra y examine los resultados.
Los subprocesos o procesos que tienen prioridades iguales a la prioridad del subproceso de destino muestran el tiempo que el subproceso se ha agotado. Los subprocesos o procesos que tienen mayor prioridad que la prioridad del subproceso de destino muestran el tiempo que se adelantó el subproceso. Puede calcular el tiempo total que adelantó el subproceso agregando las horas de todos los subprocesos y acciones preferentes.
La figura 46 Uso por prioridad Cuando el subproceso de destino estaba listo muestra que 730 ms del tiempo del subproceso se han adelantado y se han agotado los 300 ms del tiempo del subproceso. (Esta figura se acerca a un intervalo de 1192 ms).
Figura 46 Uso por prioridad Cuando el subproceso de destino estaba listo
Para determinar qué subprocesos son responsables del adelantamiento y el colapso de este subproceso, agregue la columna NewProcess a la derecha de la columna NewInPri y revise los niveles de prioridad en los que se estaban ejecutando los procesos. En este caso, el adelantamiento y el hambre fueron causados principalmente por otro subproceso en el mismo proceso y por TestResidentApp.exe. Puede suponer que estos procesos reciben elevaciones de prioridad periódicas por encima de su prioridad base.
Solución
Puede resolver problemas de adelantamiento o de hambre cambiando la configuración o los componentes. Considere la posibilidad de usar las siguientes correcciones:
Quite los procesos problemáticos del sistema.
Ajuste la prioridad base de los procesos problemáticos...
Cambiar la hora en que se ejecutan los procesos problemáticos; Por ejemplo, retrase la hora de inicio para que se produzca cuando se reinicie el equipo.
Si se pueden cambiar los componentes del problema, vuelva a diseñarlos para que sean menos intensivos en la CPU o para que se ejecuten con una prioridad menor.
Interferencia de DPC/ISR
Cuando se consume demasiado tiempo de procesador mediante la ejecución de DPCs e ISR, es posible que no haya suficiente tiempo de CPU disponible para ejecutar subprocesos. Esta situación puede provocar retrasos similares en la interferencia del subproceso. Cuando los subprocesos deben completar operaciones con una frecuencia regular de alta frecuencia, como en la reproducción de vídeo o la animación, las interferencias de los DPCs e ISR pueden causar problemas operativos.
Identificación del problema
Muchas evaluaciones usan heurística para identificar problemas relacionados con DPC/ISR. La actividad DPC/ISR se identifica como sospechosa cuando se notifica como un problema de la forma siguiente:
DPC D supera el umbral de milisegundos x veces durante P. Las n instancias de este DPC se ejecutan para un total combinado de milisegundos .
Donde D es el DPC, m es el número de milisegundos que establece el umbral, x es el número de veces que el DPC superó el umbral, P es el proceso actual, n es el número de instancias que ejecutó el DPC y t es el tiempo total en milisegundos que el DPC ejecutó sobre el umbral.
Por ejemplo, una evaluación notifica el siguiente problema:
DPC sdbus.sys! SdbusWorkerDpc supera el objetivo de 3,0 milisegundos 153 veces durante la duración del motor multimedia. Las 153 instancias de este DPC se ejecutan para un total combinado de 864 milisegundos
Si se notifica este problema para una actividad que muestra eventos o retrasos del problema, la actividad DPC/ISR podría ser la causa.
Identificación manual de la interferencia de DPC/ISR
Para identificar manualmente la interferencia DPC/ISR, abra un seguimiento en WPA e identifique los eventos de problema de interés. Estos son eventos genéricos específicos de la evaluación, como Microsoft-Windows-Dwm-Core:SCHEDULE_GLITCH o Microsoft-Windows-MediaEngine:DroppedFrame.
Junto al gráfico de eventos, agregue el gráfico Duración de DPC/ISR por CPU . Si los picos de la duración de DPC/ISR por gráfico de CPU se alinean con los eventos del problema, DPC/ISR podría ser un factor para causar los problemas.
En el caso de datos adicionales, acerque el período de tiempo que se produce a 100 ms antes de que se muestren varios eventos de problema. Si la actividad DPC/ISR significativa se muestra en uno o varios procesadores de la región de 100 ms antes de que se produjeran los eventos del problema, puede concluir que los eventos del problema fueron causados por la actividad DPC/IRS.
Para determinar si la interferencia DPC/ISR está causando retrasos, zoom a una región que muestra un subproceso en ejecución. Anote la CPU o las CPU en las que se ejecuta este subproceso.
En el gráfico DPC/ISR, aplique la duración de DPC/ISR por valor preestablecido de CPU y vea la actividad DPC/ISR en las CPU pertinentes de ese intervalo de tiempo.
En la figura 47 Eventos de problemas y actividad DPC/ISR se muestra que el subproceso 864 de iexplore.exe es relevante para la actividad afectada. El subproceso 864 está en estado En ejecución en CPU2 para el 10,65 % del intervalo de tiempo en la vista. Sin embargo, el gráfico DPC/ISR muestra que CPU2 estaba ocupado ejecutando DPC/ISR durante el 10 % de ese tiempo.
Nota La mayoría de DPC/ISR no tienen un impacto tan alto como se muestra en este ejemplo.
Figura 47 Eventos de problemas y actividad DPC/ISR
En la figura 48 DPC/ISR No relacionado con los eventos de problema, se muestran DPC/ISR que no están relacionados con los problemas de rendimiento:
Figura 48 DPC/ISR No relacionada con los eventos de problema
En la figura 49 Retraso causado por la interferencia DPC/ISR, se muestran DPC/ISR para causar problemas de rendimiento:
Figura 49 Retraso causado por la interferencia DPC/ISR
Investigación
Después de determinar que los DPCs/ISR están relacionados con problemas o retrasos, debe determinar qué DPC/ISR específicos están implicados y por qué se producen con frecuencia o de ejecución durante un período excesivo de tiempo.
Técnica: Revisión de un problema de DPC/ISR notificado por la evaluación
En los problemas de DPC/ISR notificados por la evaluación, puede expandir el problema que muestra los procesos principales que se adelantan a DPC o ISR. Expanda la pila para ver la actividad DPC del proceso más relacionado con la actividad afectada, como se muestra en, expanda la pila para comprender lo que hacía el DPC. La figura 50 Pila DPC expandida muestra la pila expandida:
Figura 50 Pila DPC expandida
Técnica: Busque los DPC/ISR de mayor duración y revise las pilas.
Si una evaluación no notifica que DPC/ISR sea un problema, puede usar los gráficos DPC/ISR y uso de CPU (muestreado) para obtener información de pila para los DPC más relevantes. Se recomienda encontrar un DPC/ISR de interés, anotar su módulo y función y, a continuación, buscar los ejemplos en el gráfico Uso de CPU (muestreado) para obtener información completa de la pila.
Busque los DPCs/ISR de mayor duración y revise las pilas.
Acercar el intervalo de interés.
En el gráfico DPC/ISR, seleccione la duración preestablecida de DPC/ISR por módulo, Función.
Si se cargan símbolos, los eventos DPC/ISR se ordenan por duración total y, a continuación, se desglosan por Módulo y Función. Las primeras filas de la lista contienen los eventos DPC/ISR que probablemente causaron problemas de evento. Anote los nombres de módulo y función.
En el gráfico Uso de CPU (muestreado), seleccione el valor preestablecido Uso por proceso . De forma predeterminada, este valor preestablecido oculta la actividad DPC/ISR.
Abra el Editor de vistas y haga clic en Avanzado.
En la pestaña Filtro , cambie la opción Ocultar filas que coincidan con la configuración de filtro a Mantener filas que coincidan con el filtro. Esto permitirá que se muestren las actividades DPC/ISR.
Quite la columna Proceso y agregue la columna Stack para ver dpCs/ISR ordenados por pila.
Desactive la selección de fila actual.
Haga clic con el botón derecho en una celda de la columna Pila y, a continuación, haga clic en Buscar en esta columna.
Escriba un módulo y una función que anotó en el paso 2 de este procedimiento.
Active Agregar a la selección actual y haga clic en Buscar todo para seleccionar todas las instancias de la función.
Una vez seleccionadas todas las filas, haga clic con el botón derecho y haga clic en Mariposas/Ver calles.
Esta vista muestra las actividades de esta función determinada, ordenadas por duración total. La vista es similar a una visualización de pilas en la vista detallada de un problema notificado por la evaluación. La columna Weight aproxima el tiempo inclusivo que dedica cada función de la pila, en milisegundos.
Esta vista se muestra en la figura 51 Callees de un DPC ordenados por duración aproximada:
Figura 51 Calles de un DPC ordenados por duración aproximada
Técnica: Revisión de DPCs/ISR de larga duración
La duración total de dpCs/ISR es importante, pero es más probable que los DPC/ISR individuales de larga duración provoquen retrasos. En el gráfico DPC/ISR, la columna Duración inclusiva (ms), ordenada en orden descendente, muestra las duraciones máximas de DPC/ISR individuales. Los DPCs/ISR long preestablecidos que están disponibles en algunos perfiles de evaluación le permiten filtrar esta vista para mostrar solo DPCs/ISR que tengan una duración inclusiva superior a 1 ms.
Nota Si este valor preestablecido no está disponible, puede abrir la sección Editor de vistas, Opciones avanzadas , para agregar un filtro.
Solución
La actividad DPC/ISR suele reflejar un problema de hardware o software que se debe corregir en el nivel de hardware o componente. En un nivel de configuración, puede reemplazar el hardware o actualizar el controlador relacionado a una versión fija. En un nivel de componente, el hardware y los controladores deben seguir los procedimientos recomendados para DPCs/ISR de MSDN y deben usar dpCs en subprocesos siempre que sea posible. Los DPC en subprocesos no se ejecutan en el nivel de distribución en las ediciones de cliente de Windows. Para obtener más información sobre los procedimientos recomendados para DPCs/ISR, vea Directrices sobre el comportamiento de ISR y DPC e Introducción a los DPC en subprocesos.
Temas relacionados
Introducción a los DPC en subprocesos
Administración de energía y ACPI: arquitectura y compatibilidad con controladores
PPM en Windows Vista y Windows Server 2008
Programación, contexto de subproceso e IRQL
Windows Internals, Sexta Edición
Referencia técnica del Kit de herramientas de rendimiento de Windows