Compartir a través de


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íficos 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:

Fondo

En esta sección se describe cómo se administran los recursos de CPU en Windows 10.

Herramientas de Windows ADK

En esta sección se explica cómo ver e interpretar la información de CPU en el kit de herramientas de Windows ADK.

Técnicas

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.

Información previa

Esta sección contiene descripciones sencillas y una explicación básica sobre el rendimiento de la CPU. Para 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ísico, cada uno capaz de procesar uno o dos flujos de instrucción independientes simultáneamente. El sistema operativo Windows administra estos procesadores de flujos de instrucciones individuales 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, el equilibrio del 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 el Administrador de Energía de Windows. 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 energía progresivamente inferiores. Estos estados incluyen C1 (detenido pero el reloj todavía está 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 activamente instrucciones. Los estados P definen las frecuencias de reloj y los niveles de voltaje que admite el procesador. Los estados de T no cambian directamente la frecuencia del reloj, pero pueden reducir la velocidad del reloj efectiva omitiendo la actividad de procesamiento en alguna fracción de tics de reloj. Juntos, los estados P y T actuales determinan la frecuencia de funcionamiento efectiva del procesador. Las frecuencias más bajas corresponden al menor rendimiento y al 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 procedimientos diferidos (DPC) y rutinas de servicio de interrupción (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 configuración y entorno

  • Al menos un subproceso

Aunque los procesos contienen los módulos de 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 están programados para ejecutarse en un procesador.

Un subproceso mantiene 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 es 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 el subproceso que 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 prioridad más alta 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 está programado que se ejecute un subproceso determinado. 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 que se ejecute 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 procesadores concretos.

Quantum

Los modificadores de contexto son operaciones costosas. Windows generalmente permite que cada subproceso se ejecute durante un período de tiempo que se denomina cuántico 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 minimizando la sobrecarga de 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.

State

Cada subproceso existe en un estado de ejecución determinado en un momento dado. Windows usa tres estados que son relevantes para el rendimiento; estos son: En ejecución, listo y en espera.

Los subprocesos que se están ejecutando actualmente están 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 están en estado Waiting .

Una transición de estado a estado se muestra en la figura 1 Transiciones de estado de subproceso:

figura 1 transición de estado del subproceso

Figura 1 Transiciones de estado de subproceso

La figura 1 Transiciones de estado de subproceso se explica de la siguiente manera:

  1. Un subproceso en estado Running inicia una transición al estado Waiting llamando a una función de espera como WaitForSingleObject o Sleep(> 0).

  2. Una operación de subproceso o kernel en ejecución prepara un subproceso en estado Waiting (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ácil puede cambiar directamente al estado En ejecución. De lo contrario, se coloca en el estado Listo.

  3. El distribuidor programa un subproceso en estado Listo para su procesamiento cuando un subproceso en ejecución espera, produce (Sleep(0)) o llega al final de su quantum.

  4. Un subproceso en 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.

DPC 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 se 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 del procesador que se usa para ejecutar DPC e ISR impide que estos subprocesos reciban tiempo de procesamiento suficiente, es posible que el subproceso no logre su rendimiento necesario ni complete sus elementos de trabajo a tiempo.

Herramientas de Windows ADK

Windows ADK escribe información de hardware y evaluaciones en archivos de resultados de 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étrico, 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 sobre 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 este estado es compatible con el procesador.

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)

Tiempo invertido en el estado de inactividad (agregación predeterminada:máximo).

Min:Duration(ms)

Tiempo que se invierte en el estado inactivo (agregación predeterminada:mínimo).

Siguiente estado

Estado al que el procesador ha pasado después del estado actual.

Estado de desarrollo previo

Estado desde el que el procesador ha pasado antes del estado actual.

State

Estado de inactividad actual.

Estado (numérico)

Estado de inactividad actual como un número (por ejemplo, 0 para C0).

Sum:Duration(ms)

El tiempo que se invierte en el estado inactivo (aggregation: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 gráfico: Estado por tipo, CPU y Diagrama de estado por tipo, CPU.

Estado por tipo, CPU

Los estados objetivo y real de cada CPU se representan junto con el número de estado del eje Y en el gráfico estado por tipo, CPU . En la figura 2 Estado de inactividad de CPU por tipo, la CPU muestra el estado real de la CPU a medida que fluctúa entre los estados inactivos activo y de destino.

Figura 2 estado de inactividad de cpu por tipo cpu

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 Estado de inactividad de CPU por tipo, CPU, en una vista de escala de tiempo.

Figura 3 diagrama de estado de estado inactivo de cpu por tipo cpu

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 Frequency (MHz) contiene un número limitado de frecuencias que corresponden a los estados P y T admitidos por 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)

La frecuencia de la CPU durante el tiempo en que se encuentra en estado P.

Max:Duration(ms)

El tiempo que se invierte en el estado P (agregación predeterminada:máximo).

Min:Duration(ms)

El tiempo que se invierte en el estado P (agregación predeterminada:mínimo).

Sum:Duration(ms)

Tiempo dedicado al estado P (agregación:suma predeterminado).

Tabla

No utilizado

Tipo

Información adicional sobre el estado P.

El perfil predeterminado define la frecuencia por valor preestablecido de 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

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

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 están bien representadas 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.

Todos los recuentos

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, excluyendo 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.

Display Name (Nombre para mostrar)

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 subproceso

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

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 grafo:

  • Uso por CPU

  • Uso por prioridad

  • Uso por proceso

  • Uso por proceso y subproceso

Uso por CPU

El gráfico Uso del 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

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. La figura 7 Uso de CPU (muestreado) por prioridad muestra este gráfico:

figura 7 uso muestreado de uso de cpu por prioridad

Figura 7 Uso de CPU (muestreado) por prioridad

Uso por proceso

Uso de CPU agrupado por proceso muestra el uso relativo de los procesos. La figura 8 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 por proceso

Figura 8 Uso de CPU (muestreado) 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. La figura 9 Uso de CPU (muestreado) por proceso y subproceso muestra este valor preestablecido. Los subprocesos de un único proceso se seleccionan en este gráfico.

figura 9 uso de cpu muestreado por proceso

Figura 9 Uso de CPU (muestreado) 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 conmutación de contexto. Cada fila representa un conjunto de datos que está asociado a un único modificador de contexto; es decir, cuando un subproceso comenzó a ejecutarse. Los datos se recopilan para la siguiente secuencia de eventos:

  1. El nuevo subproceso se apaga.

  2. El nuevo subproceso está listo para ejecutarse mediante el subproceso listo.

  3. El nuevo subproceso se cambia, con lo que se cambia un subproceso antiguo.

  4. El nuevo subproceso se vuelve a apagar.

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

Figura 10 Diagrama preciso de uso de CPU

Los saltos de la escala de tiempo de la figura 10 Diagrama preciso de uso de CPU dividen la escala de tiempo en regiones que pueden producirse simultáneamente en diferentes CPU. Estas escalas de tiempo se pueden superponer siempre y cuando 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 subproceso nuevo y, a continuación, vuelve a estar en Processor-1).

La información se registra para los cuatro destinos siguientes en la escala de tiempo:

  • Nuevo subproceso, que es el subproceso en el que se cambió. Es el enfoque 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 cambiarlo. 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. Esto siempre es 1 para filas individuales.

Count:Waits

Número de esperas representadas por la fila. Esto 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 cambio 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 la que se cambió 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 desactiva.

NewPrevOutPri

Prioridad del nuevo subproceso cuando se cambió anteriormente.

NewPrevState

Estado del nuevo subproceso después de que se haya cambiado previamente.

NewPrevWaitMode

Modo de espera del nuevo subproceso cuando se cambió 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.

NewProcess Name

Nombre del proceso del nuevo subproceso, incluido PID.

NewQnt

Sin usar.

NewState

Estado del nuevo subproceso después de que se cambie.

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)

La hora en 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 antiguo.

Nombre de OldProcess

Nombre del proceso que posee el subproceso anterior, incluido PID.

OldQnt

Sin usar.

OldState

El estado del subproceso anterior después de que se apague.

OldThreadId

Identificador de subproceso del subproceso anterior.

OldThreadStartFunction

Función start del subproceso anterior.

OldThreadStartModule

Módulo de inicio del subproceso anterior.

OldWaitMode

Modo de espera del subproceso anterior.

OldWaitReason

La razón por la que se cambió 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)

Readying 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.

Nombre de ReadyingProcess

Nombre del proceso que posee el subproceso de preparación, incluido EL PID.

ReadyThreadStack

Pila del subproceso de preparación.

ReadyTime (s)

Hora en la que se ha fácil 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 inicio del conmutador de contexto

  • 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. La 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 precisa de uso de cpu por cpu

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 precisa de uso por subproceso de proceso

Figura 12 Escala de tiempo de uso (precisa) por proceso, subproceso

Uso por prioridad en el inicio del conmutador de contexto

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) por prioridad en Context Switch Begin se muestra la distribución de prioridades:

figura 13 uso preciso del uso de cpu por prioridad en c

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) por CPU se muestra este gráfico para un sistema que tiene ocho procesadores.

figura 14 uso preciso del uso de cpu por cpu

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 Ilustración 15 Uso de CPU (preciso) por proceso, Subproceso muestra esta distribución entre varios procesos:

figura 15 uso preciso del uso de cpu por proceso

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:

Figura 16 diagrama de isr de dpc

Figura 16 Diagrama de DPC/ISR

En la figura 16 DPC/ISR Diagrama se describen los datos recopilados durante las actividades siguientes:

  1. DPC/ISR-A comienza a ejecutarse.

  2. 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.

  3. ISR-B finaliza y, por tanto, finaliza el fragmento de ISR-B. DPC/ISR-A reanuda la ejecución en un segundo fragmento.

  4. 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 de datos diferentes en columnas de nivel de fragmento y datos idénticos en columnas DPC/ISR.

Columna Detalles

% de duración (fragmentado)

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.

Count (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. Esto siempre es 1 para filas individuales.

CPU

Índice del procesador lógico en el que se ejecutó 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 la finalización del 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; de lo contrario, es False.

Tiempo de entrada de fragmento (s)

Hora a la que se inició la ejecución del fragmento.

Tiempo de salida del fragmento (s)

Hora a la 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 para las interrupciones señaladas por mensajes.

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 grafo:

  • [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 actividad DPC entre CPU. La figura 17 Duración de DPC/ISR por CPU muestra este gráfico para un sistema que tiene ocho procesadores.

figura 17 duración del isr de dpc por cpu

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 del tiempo Figura 18 Duración de DPC/ISR por módulo, Function muestra un período de tiempo que incurre en la actividad DPC/ISR en dos módulos:

figura 18 duración del isr de dpc por función del módulo

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 gráfico 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 que se ejecutaron dpCs/ISR. Este gráfico también puede mostrar cómo se pueden fragmentar los ISR o DPC únicos. Figura 19 Escala de tiempo de 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 isr dpc por función del módulo

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 (precisa) 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

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

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

Figura 22 Árbol creado a partir de pilas

La columna Pilas de la interfaz de usuario WPA contiene un expansivo 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
| &nbsp; |
1ms   |   |-ModuleB-Function2
1ms   |   |    ModuleB-Function3
| &nbsp; |
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 empleado 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:

  1. Defina el escenario y el problema.

  2. Identifique los componentes implicados y el intervalo de tiempo pertinente.

  3. Cree un modelo de lo que debería haber sucedido.

  4. Use el modelo para identificar problemas e investigar las causas principales.

Definir el escenario y el problema

El primer paso del 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 por completo. Por ejemplo, un servidor no puede utilizar 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 la energía de la batería.

Escenario 3: Las actividades no se están completando 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 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 utiliza por completo durante cuatro segundos y, después, 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 sucedido. 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, investigue 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 se completara en tres segundos, mientras que cada instancia de una sub-actividad denominada Suspender <nombre> de 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 las causas principales comunes. Aquí se describen algunas causas principales relacionadas con la CPU, para las actividades que no se completan a una velocidad necesaria 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 DPC o ISR.

En muchos casos, una de estas causas principales no afecta notablemente al subproceso y el subproceso pasa la mayor parte de su tiempo en un 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 se inicia mediante la identificación de la ruta crítica.

Técnica avanzada: Análisis de espera y ruta 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 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 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, a continuación, 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

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 que se tarda en completar su tarea no afecta al tiempo total de actividad.

figura 24 ruta de acceso crítica

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 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 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 crítica. Por ejemplo, un retraso en la actividad Inicialización rápida del Explorador de reanudación de inicio rápido puede deberse a 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 retrasado principal de la ruta de acceso crítica en medio de la lista. La última entrada de la lista es la acción que prepara el subproceso que completó la actividad.

Si debe buscar manualmente la ruta crítica, se recomienda identificar el proceso y el subproceso que completó la actividad y trabajar hacia atrás desde el instante 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. Se muestran las columnas Start Process, Start Thread Id, End Process y End Thread Id 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 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 empleado 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. El tiempo dedicado a esperar apunta a E/S, temporizadores u otros subprocesos y procesos en la ruta crítica para la que el subproceso actual estaba esperando.

Cada subproceso que se preparaba para el subproceso actual probablemente es otro vínculo en la ruta 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.

  1. Para identificar el proceso que completó la actividad, mantenga el puntero sobre la actividad en el gráfico Actividades .

  2. Agregue el gráfico Uso de CPU (preciso). Acercar la actividad afectada y aplicar el valor preestablecido Uso por proceso y subproceso .

  3. 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].

  4. Expanda el proceso de destino y ordenación respectivamente por uso de CPU (ms),Listo (nosotros) [Sum]y Esperas (us) [Sum].

  5. Busque newThreadIds en el proceso que tenga la mayor cantidad de tiempo empleado 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 el estado Waiting podrían estar esperando en E/S, un temporizador o en otro subproceso en la ruta crítica.

  6. Para detectar lo que los subprocesos estaban esperando, expanda el grupo NewThreadId para mostrar ReadyThreadStack.

  7. Expanda [Raíz].

  8. Las pilas que comienzan con KiDispatchInterrupt no están relacionadas con otro subproceso. Para determinar lo que el subproceso estaba esperando 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.

  9. 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 De inicialización rápida del Explorador de reanudación de inicio rápido. Una búsqueda en el panel Problemas muestra que se notifican siete problemas de tipo retraso para esta actividad. Cada uno de estos problemas se puede revisar como un segmento de la ruta crítica. Se identifican los siguientes segmentos clave:

  • El subproceso 3872 del TestBootStrapper.exe de proceso (3024) se adelanta durante 2,1 segundos.

  • El subproceso 3872 de TestBootStrapper.exe de proceso (3024) usa 1 segundo de tiempo de CPU.

  • El subproceso 3872 del TestBootStrapper.exe de proceso (3024) vacía un subárbol del Registro para 544 milisegundos.

  • Subproceso 3872 de TestBootStrapper.exe de proceso (3024) se suspende durante 513 milisegundos.

  • Subprocesos 4052 y 4036 de Explorer.exe lectura del disco, lo que provoca un retraso de 461 milisegundos.

  • Subproceso 3872 de TestBootStrapper.exe de proceso (3024) se muere por 187 milisegundos.

  • Subproceso 3872 del 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 en general de 6,3 segundos de duración. La aplicación TestBootStrapper.exe es principalmente responsable del retraso, principalmente porque adelantó otras tareas de procesamiento.

Investigación de problemas en la ruta de acceso crítica

  1. Zoom a la región afectada y agregue las columnas ReadyThreadStack y Uso de CPU (ms).

  2. En este caso, Explorer.exe es el proceso que completa la actividad. Expanda el proceso de explorer.exe y ordenación respectivamente por uso de CPU (ms),Listo (nosotros) [Sum]y Esperas (nosotros) [Sum], como se muestra en las cifras siguientes:

    figura 25 actividad por uso de cpu ms

    Figura 25 Actividad por uso de CPU (ms)

    figura 26 actividad por listos

    Figura 26 Actividad por listo (nosotros)

    figura 27 actividad por esperas

    Figura 27 Actividad por esperas (nosotros)

  3. La ordenación por la columna Uso de CPU (ms) muestra una fila secundaria superior de 299 milisegundos. La ordenación por la columna Listo (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.

  4. Expanda las pilas para mostrar los subprocesos listos, como se muestra en las figuras siguientes:

    proceso de preparación y subproceso listo

    Figura 28 Proceso de preparación y Subproceso de preparación para un subproceso

    Figura 29 proceso de preparación y subproceso de preparación para

    Figura 29 Proceso de preparación y Subproceso de preparación para otro subproceso

    En este ejemplo, el primer subproceso dedica la mayor parte de su tiempo a esperar a que se cierre el proceso de RunOnce.exe. 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.

  5. Repita los pasos de este procedimiento para RunOnce.exe. La columna de contribución principal es Waits (us) y tiene cuatro posibles colaboradores.

  6. 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 de preparación para

    Figura 30 Proceso de preparación y Subproceso de preparación para un subproceso en RunOnce.exe

  7. Repita los pasos de este procedimiento para TestBootStrapper.exe. Los resultados se muestran en las tres figuras siguientes:

    figura 31 subprocesos por uso de cpu ms

    Figura 31 Subprocesos por uso de CPU (ms)

    figura 32 subprocesos listos

    Figura 32 Subprocesos por listo (nosotros)

    figura 33 subprocesos por esperas

    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 listo para el subproceso 3872, los tiempos de ejecución y listos probablemente contribuyen al retraso. La evaluación notifica los siguientes problemas cuyas horas coinciden con los retrasos:

    • El subproceso 3872 del TestBootStrapper.exe de proceso (3024) se adelanta durante 2,1 segundos.

    • El subproceso 3872 de TestBootStrapper.exe de proceso (3024) muere de hambre durante 187 milisegundos.

    • El subproceso 3872 del TestBootStrapper.exe de proceso (3024) usa 1 segundo de tiempo de CPU.

  8. 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 para el tiempo de espera

    Figura 34 Colaboradores en 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. Esta vista muestra tres funciones relacionadas, como se muestra en la figura 35 E/S y temporizador en NewThreadStack:

    figura 35 ios y temporizador en newthreadstack

    Figura 35 E/S y temporizador en NewThreadStack

    Esta vista divulga los detalles siguientes:

    • El subproceso 3872 del TestBootStrapper.exe de proceso (3024) vacía un subárbol del Registro durante 544 milisegundos.

    • El subproceso 3872 de TestBootStrapper.exe de proceso (3024) se suspende durante 513 milisegundos.

    • El subproceso 3872 del proceso TestBootStrapper.exe escribe 3,5 MB en disco, lo que provoca un retraso de 178 milisegundos.

  9. Cuando comenzó a investigar la ruta de acceso crítica, ha analizado la causa de espera más importante en Explorer.exe y ha ignorado las partes de la ruta crítica que se produjeron 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.

  10. 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 la ruta crítica:

    Figura 36 escala de tiempo crítica de la ruta de acceso

    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 han realizado más trabajo después de dejar de esperar a 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 que son internos de Explorer.exe y que no hay un seguimiento claro a través de la ruta de acceso crítica. En este caso, no es probable que el análisis adicional produzca información procesable.

Uso directo de CPU

Las actividades a menudo se retrasan porque un subproceso en la ruta 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 crítica que pasa una cantidad excepcional de tiempo en estado En ejecución. En algún hardware, este uso intensivo de cpu puede contribuir a retrasos.

Identificación del problema

Muchas evaluaciones usan heurística para identificar problemas directos relacionados con el uso de CPU. El uso significativo de la CPU en la ruta de acceso crítica se notifica como un problema en el siguiente formato:

El uso de CPU por el 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

  1. 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).

  2. Acercar a 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 único procesador consume 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 sea un factor.

Ejemplo de Assessment-Reported problema de uso directo de CPU

La CPU que usa 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

Figura 37 Subproceso 3208

Investigación

Después de detectar que el uso directo de la CPU contribuye a un retraso en la ruta 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 de Assessment-Reported

Puede expandir un problema de uso de CPU directo 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 de cpu expandido

Figura 38 Segmento de uso de CPU expandido

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 las funciones implicadas 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

  1. En el menú Seguimiento, haga clic en Cargar símbolos.

  2. Amplíe la escala de tiempo para mostrar solo la parte de la ruta crítica afectada por el problema de CPU.

  3. Aplique el valor preestablecido Uso por proceso y subproceso .

  4. Agregue la columna Pila a la pantalla y arrastre esta columna a la derecha del identificador de subproceso (izquierda de la barra).

  5. Expanda el proceso y el subproceso para mostrar los árboles de pila.

    Las filas de la pila se ordenan en orden descendente por % de peso del uso de CPU. Esto coloca las pilas más interesantes en la parte superior. A medida que expande las pilas, watch la columna % de peso para asegurarse de que el foco permanece en las filas que tienen el uso más alto.

  6. 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.

Resolución

Puede aplicar soluciones tanto en los niveles de configuración como en los componentes para resolver un uso elevado de la CPU.

El uso directo de la CPU tiene un mayor impacto en los equipos que tienen procesadores de extremo 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 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 subproceso

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 crítica se retrasen. El modelo de estado del subproceso muestra que este problema se caracteriza por subprocesos en la ruta crítica que invierte una cantidad inusual de tiempo en el estado Listo.

Identificación del problema

Muchas evaluaciones usan heurística para identificar problemas relacionados con interferencias. Estos se notifican en una de las dos formas siguientes:

  • El proceso P está hambriento. La inanición 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 crítica.

Si se notifican estos tipos de problemas 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

  1. Amplíe el intervalo y aplique el valor preestablecido uso por CPU . Un uso del 100 % en todas las CPU indica un problema de interferencia.

  2. Aplique el valor de Uso por proceso, valor preestablecido de subproceso y ordene por la primera columna Ready (us). (Esta es la columna que incluye la agregación Sum ).

  3. Expanda el proceso de la actividad que se ve afectada y examine el tiempo listo para subprocesos en la ruta de acceso crítica. Este valor es el tiempo máximo que se puede reducir al resolver 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 %

La figura 39 El uso de CPU está cerca del 100 %

figura 40 problema de interferencia de subprocesos

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 el 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 pasó tiempo en 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 suelen cambiar entre procesadores.

Determinar las restricciones de procesador de un subproceso

  1. Zoom a la región afectada.

  2. Agregue el gráfico Uso de CPU (preciso) y aplique el valor preestablecido Uso por proceso y subproceso .

  3. 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.

  4. 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 aproxima el 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

    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

  1. Construya un gráfico que muestre cuándo el subproceso estaba en estado Listo y aplique el valor preestablecido Uso por proceso y subproceso .

  2. Abra el Editor de vistas, haga clic en Avanzadas y seleccione la pestaña Configuración del grafo .

  3. Establezca Hora de inicio en ReadyTime (s) y establezca La duración en Listo (nosotros), como se muestra en la figura 42 Columnas de tiempo de preparación. Haga clic en OK.

    figura 42 columnas de tiempo preparadas

    Figura 42 Columnas de tiempo de preparación

  4. En el Editor de vistas, reemplace la columna Uso de CPU (%) por la columna Ready (us) [Sum].

  5. Seleccione el subproceso de interés para generar un gráfico similar a la figura 43 Ready Time Graph (Gráfico de tiempo listo):

    figura 43 gráfico de tiempo listo

    Figura 43 Gráfico de tiempo listo

  6. 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.

  7. 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 tenía afinidad solo para la CPU 1.

  8. Agregue otro gráfico uso de CPU (precisa) y aplique el valor predeterminado De uso por CPU . Seleccione las CPU pertinentes.

  9. 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

    Figura 44 Filtro de subprocesos

    En la figura 45 Uso de CPU, Tiempo listo y Otra actividad de subproceso, el gráfico superior muestra el uso de CPU del subproceso 3548. En el gráfico central se muestra el tiempo que el subproceso estaba listo y el gráfico inferior muestra la actividad en las CPU en las que se permitió ejecutar el subproceso (en este caso, Cpu1).

    figura 45 tiempo listo para el uso de cpu y otro subproceso ac

    Figura 45 Uso de CPU, Tiempo listo y Otra actividad de subproceso

  10. Acercar una región en la que el subproceso estaba listo, pero no se ejecutó, durante la mayor parte del tiempo durante ese intervalo.

  11. 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 en que el subproceso se ha agotado. Los subprocesos o procesos que tienen mayor prioridad que la prioridad del subproceso de destino muestran el tiempo en 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 adelantó y 300 ms del tiempo del subproceso se ha agotado. (Esta figura se acerca a un intervalo de 1192 ms).

    figura 46 uso por prioridad cuando el subproceso de destino era

    Figura 46 Uso por prioridad cuando el subproceso de destino estaba listo

  12. Para determinar qué subprocesos son responsables de la adelantación 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.

Resolución

Puede resolver problemas de adelantamiento o de hambre cambiando la configuración o los componentes. Tenga en cuenta las siguientes soluciones:

  • 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 su hora de inicio 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 que se ejecuten con una prioridad más baja.

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 de subprocesos. 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, la interferencia de dpCs e ISR puede 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 en el siguiente formato:

DPC D supera el umbral de m milisegundos x veces durante P. Las n instancias de esta 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 DPC superó el umbral, P es el proceso actual, n es el número de instancias que ejecutó DPC y t es el tiempo total en milisegundos que 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 presenta eventos o retrasos del problema, la actividad DPC/ISR podría ser la causa.

Identificar manualmente la interferencia de DPC/ISR

  1. Para identificar manualmente la interferencia de DPC/ISR, abra un seguimiento en WPA e identifique los eventos problemáticos de interés. Se trata de eventos genéricos específicos de la evaluación, como Microsoft-Windows-Dwm-Core:SCHEDULE_GLITCH o Microsoft-Windows-MediaEngine:DroppedFrame.

  2. Junto al gráfico de eventos, agregue el gráfico duración de DPC/ISR por CPU . Si los picos en 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 en la causa de los problemas.

  3. Para datos adicionales, acerque el período de tiempo que se produce 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.

  4. Para determinar si la interferencia de 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.

  5. 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 en 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 vista. Sin embargo, el gráfico DPC/ISR muestra que CPU2 estaba ocupado ejecutando DPC/ISR durante un 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 problema y actividad dpc isr

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 no está relacionado con los eventos de problema

Figura 48 DPC/ISR no relacionada con eventos de problemas

En la figura 49 Retraso causado por la interferencia de DPC/ISR, se muestran DPC/ISR para causar problemas de rendimiento:

figura 49 retraso causado por la interferencia de dpc isr

Figura 49 Retraso causado por la interferencia de DPC/ISR

Investigación

Después de determinar que los DPC/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 de Assessment-Reported

En los problemas de DPC/ISR notificados por la evaluación, puede expandir el problema que muestra los procesos principales que están adelantados por DPC o ISR. Expanda la pila para ver la actividad DPC del proceso que está 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 de dpc expandida

Figura 50 Pila DPC expandida

Técnica: Buscar los DPC/ISR de mayor duración y revisar 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 DPC/ISR de mayor duración y revise las pilas.

  1. Acercar el intervalo de interés.

  2. En el gráfico DPC/ISR, seleccione el valor preestablecido DPC/ISR Duration by Module( Función).

    Si se cargan los 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 filas principales de la lista contienen los eventos DPC/ISR que probablemente causaron problemas de eventos. Anote los nombres de módulo y función.

  3. 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.

  4. Abra el Editor de vistas y haga clic en Avanzado.

  5. En la pestaña Filtro , cambie la opción Ocultar filas que coincidan con la configuración del filtro a Mantener filas que coincidan con el filtro. Esto permitirá que se muestren las actividades de DPC/ISR.

  6. Quite la columna Proceso y agregue la columna Pila para ver dpCs/ISR ordenados por pila.

  7. Desactive la selección de fila actual.

  8. 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.

  9. Escriba un módulo y una función que anotó en el paso 2 de este procedimiento.

  10. Active Agregar a la selección actual y haga clic en Buscar todo para seleccionar todas las instancias de la función.

  11. Una vez seleccionadas todas las filas, haga clic con el botón derecho y haga clic en Mariposa/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 se aproxima al tiempo inclusivo dedicado por cada función de la pila, en milisegundos.

Esta vista se muestra en la figura 51 Calles de un DPC ordenado por duración aproximada:

figura 51 llamadas de un dpc ordenados por aproximadamente d

Figura 51 Calles de un DPC ordenado por duración aproximada

Técnica: Revisión de Long-Running DPC/ISR

La duración total de dpCs/ISR es importante, pero es más probable que se produzcan retrasos en los DPC/ISR individuales de larga duración. 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 DPC/ISR long preestablecidos que están disponibles en algunos perfiles de evaluación 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, Avanzadas , para agregar un filtro.

Resolució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 el nivel de componente, el hardware y los controladores deben seguir los procedimientos recomendados para dpCs/ISR de MSDN y deben usar los DPC 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 DPC/ISR, vea Directrices sobre el comportamiento de ISR y DPC y Introducción a los DPC en subprocesos.

Introducción a los DPC en subprocesos

Cargar Símbolos

Administración de energía y ACPI: arquitectura y soporte de controladores

PPM en Windows Vista y Windows Server 2008

Prioridades de programación

Programación, contexto de subprocesos e IRQL

Windows Internals, Sexta Edición

Windows Performance Analyzer

Referencia técnica del Kit de herramientas de rendimiento de Windows