41 votes

Comment puis-je arriver à la cause profonde de hauts appels de procédures différés?

J'ai un processeur Dual core, et l'un des deux est constamment à 100 %. En regardant dans ProcessExplorer, je vois que ce sont les Appels de Procédures Différés. En cherchant sur internet, je trouve des réponses très différentes.

Est-il possible de définir quelques étapes pour tenter de cerner quel pourrait être le problème dans mon cas ?

Mise à jour 1 : Pour information, le problème persiste même en Mode sans échec.

Mise à jour 2 : J'ai débranché tout ce que je pouvais à l'arrière de l'ordinateur, ce qui m'a permis de libérer 40 % de processeur supplémentaire. J'ai également téléchargé l'outil RATTV3, mais pour une raison quelconque, sur mon ordinateur, il ne me donne pas de détail pilote par pilote. Il y a une bonne description de DPCLatencyChecker et RATTV3 ici.

Mise à jour 3 :, LatencyMon (voir ma réponse ci-dessous) me dit que c'est nvstor32.sys - qui est le pilote SATA de NVidia - avec des temps d'environ 5300 µs.

Mise à jour 4 : L'intrigue s'épaissit, tout en réfléchissant à essayer de démarrer à partir d'un disque de récupération (pour voir si ce sont vraiment les pilotes, et non un problème matériel), j'ai remarqué que le lecteur DVD/CD ne fonctionnait pas (c'est-à-dire n'ouvrant pas la porte même lorsque j'appuie sur le bouton). Étant donné que la machine venait de revenir après avoir remplacé la carte mère, j'ai pensé qu'ils avaient peut-être oublié de le brancher. J'ai ouvert le boîtier, tout semblait bien, mais je l'ai débranché et rebranché. Au redémarrage, tout allait bien - plus de DPC (le plus élevé maintenant à 300µs)!

Mise à jour 5 : Le lendemain, le problème est revenu, le lecteur CD ne fonctionnant plus, même le curseur dans le champ de mot de passe clignote au ralenti... J'ai essayé de débrancher tout ce à quoi je pouvais penser, et au deuxième redémarrage, ça a fonctionné à nouveau (comme à la Mise à jour 2). La prochaine fois, je vais essayer de débrancher complètement le lecteur CD...

Mise à jour 6 : Je viens de remarquer que le journal d'événements système indique que nvstor32.sys signale une erreur disant Erreur de parité détectée dans \Device\RaidPort0, suivi d'un avertissement concernant l'envoi d'une réinitialisation. Maintenant, il me reste à trouver qui est RaidPort0... (notez que je n'ai pas de configuration RAID, c'est juste un Acer standard). Oh, et mon installation Avast a apparemment été supprimée lorsque j'ai effectué un Retour système (ou quoi que ce soit que ça s'appelle), car il refuse de démarrer (erreur RPC), refuse de se désinstaller (une erreur setiface est survenue).

Mise à jour 7 : J'ai enfin eu le temps de redémarrer en débranchant le DVD. Plus de problèmes de DPC ! (beaucoup de fautes de pages cependant, mais ce sera pour plus tard). Prochaine étape : déterminer si c'est le câble ou le lecteur DVD.

Mise à jour 8 : J'ai emprunté un câble SATA, démarré avec, aucun problème. Le lecteur CD/DVD fonctionne, pas de problèmes de DPC avec nvstor32.sys, aucun processeur bloqué. Fin heureuse... presque : j'ai toujours des problèmes avec Avast, des problèmes apparents de DPC avec storport.sys au démarrage (peut-être normal pour l'USB?), et beaucoup de fautes de page. Mais cela fera l'objet d'autres questions.

Post-scriptum : J'ai récemment commencé à avoir le même problème, et en utilisant la même méthode, j'ai réussi à le remonter à une clé USB (celle que j'utilisais pour le ReadyBoost) défectueuse.

44voto

Remi Despres-Smyth Points 1500

Voici l'histoire de comment j'ai trouvé la cause de ma latence DPC élevée.


Mon système présentait des clics et des pops lors de la lecture audio. Je savais que cela signifiait qu'un processus en mode noyau monopolisait le CPU. Ma première idée a été d'explorer Process Explorer pour voir si quelque chose semblait anormal. La seule chose qui a attiré mon attention était une quantité excessive de temps passé à effectuer des Appels de Procédures Différées (DPC) :

Capture d'écran de Process Explorer montrant un temps DPC élevé

Je savais que les DPC sont des codes exécutés à l'intérieur d'un pilote ; le défi était de découvrir quel pilote. J'ai alors utilisé DPC Latency Checker, qui m'a montré à quel point la latence était mauvaise :

capture d'écran de DPC Latency Checker

DPC Latency Checker suggère de passer en revue les appareils dans le Gestionnaire de périphériques et de désactiver un par un le matériel non essentiel (par exemple, la carte réseau, la carte son), dans l'espoir d'isoler le pilote défectueux. (Si vous désactivez un appareil et que la latence DPC diminue soudainement : vous avez trouvé le coupable !)

capture d'écran de désactivation des appareils

Malheureusement, après avoir désactivé tout ce que je pouvais (tout en étant capable de utiliser l'ordinateur - ne désactivez pas votre disque dur, carte vidéo, souris ou hub USB auquel la souris est connectée !), la latence était toujours élevée. Ensuite, je me suis tourné vers le Windows Performance Toolkit (partie du Windows SDK), et un excellent article de blog de Peter Weiland, "Mesurer le temps de DPC". Après avoir installé le Windows Performance Toolkit :

Capture d'écran de l'installateur Windows SDK, avec le Windows Performance Toolkit sélectionné

J'ai ouvert une invite de commandes élevée et j'ai exécuté :

>xperf -on Latency

Note : Le Latency group est un ensemble prédéfini d'événements qui peuvent être tracés à partir du fournisseur de groupe Kernel :

>xperf -providers kg
   Base           : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+PROFILE+MEMINFO
   Diag           : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER+COMPACT_CSWITCH
   DiagEasy       : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER
   Latency        : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PROFILE
   ...

Dans ce cas, Latency correspond aux drapeaux Kernel :

  • PROC_THREAD Processus et fil créer/supprimer
  • LOADER Chargement/Déchargement de l'image en mode noyau et utilisateur
  • PROFILE Profil d'échantillonnage du CPU
  • CSWITCH Changement de contexte
  • DPC Événements DPC
  • INTERRUPT Événements d'interruption
  • DISK_IO Entrées/Sorties disque
  • HARD_FAULTS Pannes de page matérielles

Après avoir laissé cela s'exécuter pendant une minute, j'ai arrêté la trace et je l'ai enregistrée dans un fichier :

C:\Users\Ian\Desktop\xperf -d thingy1.etl

Ensuite, j'ai visualisé les résultats de la trace avec la commande :

C:\Users\Ian\Desktop\xperf thingy1.etl

Cela charge l'Analyseur de performances Windows. En cliquant avec le bouton droit sur le graphique Utilisation CPU DPC, j'ai sélectionné Tableau Récapitulatif. Cela montre une répartition du temps passé en DPC par pilote :

capture d'écran de la sortie XPerf

Immédiatement, je peux voir qu'un pilote (tsvp.sys) prend en moyenne 2,8 ms par exécution DPC, ce qui est un ordre de grandeur plus lent que tout autre pilote :

capture d'écran

En recherchant tsvp.sys, j'ai obtenu la réponse : CommView, que j'avais récemment installé.

La question maintenant est de savoir comment désactiver ce pilote. En utilisant AutoRuns, je peux voir qu'il est installé en tant que service de pilote :

capture d'écran de autoruns

En utilisant le Gestionnaire de périphériques, je peux désactiver le service qui héberge ce pilote. D'abord, vous devez Afficher les périphériques masqués, puis déployer le nœud Pilotes non-Plug-and-Play :

capture d'écran du Gestionnaire de périphériques

Enfin, j'ai pu arrêter le service du pilote et j'ai changé son mode de démarrage de Système (ce qui signifie que le pilote est une partie essentielle de Windows et que Windows ne peut pas démarrer sans lui) à Demande (ce qui signifie que je peux démarrer le pilote quand je veux) :

capture d'écran du Gestionnaire de périphériques

Arrêter le service du pilote a immédiatement corrigé ma latence DPC :

capture d'écran

Je peux ou non désinstaller complètement CommView, mais pour l'instant j'ai résolu le Cas de la Latence DPC Élevée.


Mise à jour : À partir de Windows 8, vous ne pouvez plus voir les Pilotes non-Plug and Play dans le Gestionnaire de périphériques :

Note À partir de Windows 8 et Windows Server 2012, le gestionnaire de Plug-and-Play ne crée plus de représentations de périphériques pour les appareils non PnP (hérités). Ainsi, il n'y a pas de tels appareils à afficher dans le Gestionnaire de périphériques. Pour inclure les périphériques cachés dans l'affichage du Gestionnaire de périphériques, cliquez sur Affichage et sélectionnez Afficher les périphériques masqués.

Microsoft a supprimé la fonction et ne l'a remplacée par rien. Bien joué.

Dans une rage nerd typique, quelques réponses inutiles :

  • Le gestionnaire de périphériques n'a jamais montré les pilotes non PnP
  • Pourquoi en avez-vous besoin ?

Heureusement, NirSoft a créé un remplacement. ServiWin vous permet de voir, d'arrêter et de démarrer tous les services (même ceux que Microsoft a décidé que les administrateurs ne devraient pas être autorisés à voir) :

capture d'écran de ServiWin

13voto

DisplacedAussie Points 2872

RAPPORT D'AVANCEMENT

Le meilleur outil que j'ai trouvé jusqu'à présent est LatencyMon, qui fait essentiellement tout ce que les deux outils précédents font, sans vous faire réfléchir. La page de téléchargement vous demande de vous inscrire via e-mail - mais rien ne s'est passé pour moi lorsque je l'ai fait - mais vous pouvez quand même faire défiler jusqu'en bas de la page pour télécharger.

texte alternatif

6voto

nougatmachine Points 21

Dans mon cas, j'ai utilisé LatencyMon (à partir de la réponse de Benjol) et j'ai trouvé que le pilote qui gelait la vie, l'univers et tout était (aussi) storport.sys, qui est un pilote Microsoft pour les "bus à haute performance". Cela a confirmé mes soupçons que le problème était lié à l'E/S.

J'ai également consulté mon Observateur d'événements de Windows 7, dossier Journaux Windows -> Application, et j'ai trouvé plusieurs séries d'erreurs provenant de Volume Shadow Copy (VSS) se produisant toutes les 30 minutes à 2 heures. Leurs détails étaient les suivants :

Service de cliché instantané de volume : Erreur lors de l'appel d'une routine sur le fournisseur de cliché instantané {b5946137-7b9f-4925-af80-51abd60b20d5}. La routine a renvoyée E_INVALIDARG. Détails de la routine : GetSnapshot({00000000-0000-0000-0000-000000000000},000000000023C850).

Opération :
   Obtenir les propriétés de cliché instantané

Contexte :
   Contexte d'exécution : Coordinateur

J'ai ensuite commencé à enquêter sur ce qu'est VSS et à quoi il sert. J'ai parcouru plusieurs - pages - à propos de - dépannage VSS. En passant par tout cela, j'avais un gros suspect : mon logiciel de sauvegarde CrashPlan.

En suivant cette piste, j'ai rapidement trouvé une page le reliant à des erreurs VSS. En suivant les instructions là-bas pour désactiver la sauvegarde des fichiers ouverts, qui utilise VSS, les gels, une utilisation élevée du processeur Kernel, etc. ont complètement disparu. Et ne me méprenez pas : CrashPlan est génial ! Juste cette fonctionnalité ne fonctionnait pas sur ma machine.

Au fait, cette page ici a été CELLE qui m'a donné la piste initiale qui m'a aidé à trouver la cause profonde de mes problèmes. Merci beaucoup @Benjol et tous les autres qui ont répondu précédemment ! J'espère que ma réponse aidera aussi d'autres...

4voto

Andomar Points 1381

Il y a probablement un pilote de périphérique qui occupe votre système. Une façon d'analyser cela est d'exécuter DPC latency checker. Ensuite, désactivez un pilote à la fois et voyez si la charge DPC diminue. (Process explorer fonctionne également.)

Vous pouvez désactiver les pilotes de périphériques dans Gestion de l'ordinateur -> Gestionnaire de périphériques.

3voto

Alex Points 175

Je pense que je devrais ajouter ma réponse ici car ce problème est difficile à résoudre et ne dépend pas toujours de mauvais pilotes ou de conflits IRQ.

J'avais une latence RPC élevée qui causait des grésillements dans ma carte son USB grand public. Les outils décrits dans la réponse acceptée n'ont pas permis d'identifier un pilote particulier posant problème. La latence se produisait dans un certain nombre de processus : HAL, USBPORT.SYS et le noyau Windows. Approfondir l'analyse de ces processus n'a pas révélé de coupable évident.

Il s'est avéré dans mon cas que le problème était au niveau le plus bas et spécifique aux cartes mères GigaByte avec certains chipsets et révisions du BIOS. La solution a été de désactiver Intel SpeedStep et toutes les autres fonctionnalités spécifiques à la carte mère qui ajustaient la vitesse de CPU et la tension de manière dynamique. Une fois ces options désactivées, ma latence RPC a été immédiatement résolue.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X