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