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

28 Ene 2008
Posted by fjyaniez

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.

Tags:

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

windows xp dpcs

Excelente la forma de arreglar el problema.

LLevo casi dos años buscando porque ahora casi no consigo escuchar una cancion completa sin que se me bloquee o se escuchen cortes.

con procexp.exe de sysinternalsuite solo conseguia averiguar que deferred procedure calls pasa de una media de 2 % a cerca de un 20 % en el momento puntual que se cortan las canciones pero no conseguai pasar de aqui

despues de miles de paginas por fin consigo una que me explique como averiguar cuales son los procesos que se ejecuten para llegar a eses cortes

Ejecutando perfmon como usted indica 

% de tiempo de Dcp promedio 2.5  maximo 21 (un solo pico)

% de tiempo de procesador promedio 5.8  maximo 31.25

 asi que ahora solo me falta aplicar estos conocimientos tan valiosos al windows xp

realmente muchisimas gracias