Deferred procedure calls (DPCs) e interrupciones (ISRs) en Vista.

Las DPCs e ISRs son un motivo frecuente de pérdida de rendimiento en Windows Vista. Se ejecutan en alta prioridad, y no son "preenmptive". Una señal de que tenemos un problema de rendimiento relacionado con esto es que en el administrador de tareas nuestra CPU siempre está por encima del 0% de uso, con la pérdida de rendimiento (e incluso batería) que esto supone. Otro síntoma son los "saltos" a la hora de reproducir video o audio. A continuación vamos a explicar como monitorizar y tracear DPCs e ISRs.

Monitorizando DPCs e ISRs.

Para monitorizar estos procesos, tendremos que usar el Monitor de confiabilidad y rendimiento: perfmon.exe (Inicio -> Ejecutar). Una vez ejecutado pulsaremos sobre "Monitor de rendimiento" y luego sobre el icono agregar.

A continuación añadiremos los contadores que nos interesan (están todos en la sección Procesador). Son "% de tiempo de DPC", "%de tiempo de interrupciones", "DPC en cola/s", "Interrupciones/s" y "Velocidad de DPC".

En la siguiente captura, ya monitorizando estos parámetros, veremos como en este caso son demasiado elevados y pueden suponer una pérdida de rendimiento del sistema:

El Monitor de confiabilidad y rendimiento no nos permite saber que procesos o módulos activan las DPCs e interrupciones, por lo que si queremos tracearlas necesitaremos otras herramientas.

Traceando DPCs e ISRs.

Lo primero será descargar e instalar el "Windows Vista WDK", que incluye la herramienta Trace Log que es la que usaremos para tracear el origen del problema.

Una vez descargado e instaldo ejecutaremos tracelog.exe desde un ventana de comandos (con privilegios) con la siguiente orden:

tracelog -start "NT Kernel Logger" -f krnl.etl -dpcisr -nodisk -nonet -b 1024 -min 4 -max 16 -ft 10

En la instalación por defecto, tracelog.exe se encuentra en "C:\WinDDK\6001.17121\tools\tracing\i386".

Lo dejamos ejecutar unos segundos y luego lo paramos con:

tracelog –stop

Para formatear la salida haremos lo siguiente:

tracerpt krnl.etl -report isrdpc.xml

El fichero isrdpc.xml contiene toda la información que necesitamos para descubrir el módulo que hace el excesivo uso de DPCs e ISRs. En nuestro caso era:

Con la pista que me da el informe, ndis.sys, descubro que el causante del problema es "NVIDIA nForce networking controller", y cómo sólo uso la red inalámbrica, basta con deshabilitar el dispositivo para solucionar el problema.

Esta es la salida del monitor de rendimiento y confiabilidad una vez resuelto el problema:

Si se trata de un driver, como en este caso, otra solución es buscar actualizaciones del controlador que solucionen el problema.

Si tiene cualquier duda, sugierencia o crítica sobre este artículo, porfavor deje un comentario. Si necesita más información o una explicación más detallada sobre el tema, la podrá encontrar en ISRs and DPCs, The Silent Killers.


Comentarios

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
CAPTCHA
Esta pregunta sirve para comprobar si usted es un visitante humano y prevenir que máquinas automáticas de publicidad puedan entrar en esta sección.
1 + 4 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.