Latence DPC : quand c'est le pilote qui saccade

Un pilote à l'intérieur d'une interruption s'exécute au-dessus de tous les threads de la machine, donc il n'apparaît dans aucun gestionnaire de tâches et dans aucun graphique de temps d'image — ce que ça coûte, comment le mesurer honnêtement, quel fichier correspond à quel périphérique, et la seule correction qui marche.

Tu as parcouru toute la liste. Rien ne tourne, les températures sont bonnes, le disque est rapide, le jeu est sur un SSD, et la machine sursaute quand même. Le Gestionnaire des tâches montre un système au repos. Le graphique des temps d'image montre bien l'image en retard, mais ne dit rien sur la raison de ce retard.

Il existe une cause qui explique exactement cette forme-là, et elle est invisible dans tous les outils que la plupart des gens ouvrent, parce qu'elle se produit en dessous d'eux.

D'abord, la phrase honnête. La correction d'un pilote qui garde un cœur, c'est ce pilote, chez son fabricant. La part de w0a, c'est la mesure, le nom du fichier, et la réparation des valeurs laissées par d'anciens outils. Le seul interrupteur qu'il proposait dans ce voisinage, orienter les interruptions d'un périphérique vers des cœurs choisis, est en lecture seule depuis le 8 octobre 2026, parce qu'aucun test A/B dans un jeu n'a jamais montré une image gagnée grâce à lui.

Ce qui se passe vraiment

Un périphérique — une carte réseau, un contrôleur de disque, une puce audio, un contrôleur USB — a besoin de l'attention du processeur. Il lève une interruption, et Windows exécute immédiatement la routine d'interruption du pilote (ISR). Cette routine s'exécute au-dessus de toutes les priorités de thread qui existent : pas en « priorité haute », mais complètement en dehors de l'ordonnanceur de threads. Rien d'autre ne peut être placé sur ce cœur tant qu'elle n'a pas rendu la main.

Comme c'est un endroit coûteux, les pilotes sont censés y faire le minimum et différer le reste dans un appel de procédure différée — un DPC — qui s'exécute un instant plus tard, toujours devant tous les threads de ce cœur.

Pendant que l'un ou l'autre s'exécute, ce cœur ne dessine rien et ne lit aucune entrée. Si ton thread de rendu était dessus, ton image est en retard. Si le rapport de ta souris attendait derrière, ton entrée est en retard. Et aucun de ces deux événements n'apparaît dans un gestionnaire de tâches, parce qu'il n'y a aucun processus auquel les attribuer.

Pourquoi une milliseconde, c'est beaucoup ici

C'est l'arithmétique qui rend la chose digne d'être traquée :

Le mesurer, et les deux façons dont la mesure échoue

Le Test de latence de w0a ouvre une session de traçage noyau et enregistre, pendant douze secondes de vrai mouvement de souris, combien de temps chaque pilote a gardé un cœur. Il demande les droits administrateur. Pourquoi le test demande 12 secondes de mouvement de souris explique la durée ; Lire le test de latence explique les couleurs.

Deux résultats ne sont pas des réponses, et tous les deux sont rapportés comme tels au lieu d'être arrondis vers « propre » :

Il y en a un troisième, plus subtil : une session qui a perdu des événements a pu manquer complètement la pire exécution, donc la page prévient que le chiffre n'est peut-être pas le vrai maximum. C'est le principe que le scan des saccades applique partout — une règle qui n'a pas pu s'exécuter est comptée comme non vérifiée, jamais comme propre.

Les chiffres, exactement

ChiffreLa règle
Durée du testDouze secondes par défaut : assez long pour attraper un pilote qui se comporte mal une fois par seconde, assez court pour que tu continues vraiment à bouger la souris pendant tout ce temps.
Assez de données de sourisDeux secondes des propres rapports du périphérique, et jamais moins de 250 échantillons ; pour une souris à 1000 Hz, ça fait 2 000. En dessous, le 99e percentile est le deuxième ou le troisième pire échantillon, pas une statistique.
Verdict sur le piloteLa pire exécution isolée d'un pilote est marquée comme avertissement à partir de 1 ms et comme critique à partir de 4 ms. Ce sont les seuils que ce domaine utilise depuis deux décennies ; c'est une convention, pas une mesure que w0a a faite sur ta machine.
Une mesure complèteLes chiffres des pilotes ne comptent comme complets que quand la session de traçage noyau a tourné et n'a perdu aucun événement. Un compteur qui refuse de répondre est traité comme un run avec pertes, pas comme un run propre.
Plancher systèmeLe 99e percentile de la souris, plus un demi-intervalle de rafraîchissement, plus la pire exécution d'un pilote — cette dernière seulement quand le côté noyau a été mesuré, parce qu'ajouter zéro pour un noyau non mesuré afficherait un chiffre plus flatteur justement quand l'outil en sait le moins. C'est un plancher, jamais un total : l'échantillonnage des entrées propre au jeu, sa file de rendu, le travail du GPU et la réponse de la dalle restent tous en dehors. La latence d'entrée qu'aucun logiciel ne corrige, c'est le reste de la chaîne.

Lire la liste

Chaque pilote apparaît avec son nom de fichier, son plus long blocage isolé, sa part du temps mesuré et son nombre d'exécutions. Trie par plus long blocage ; c'est ce chiffre-là qui te coûte une image.

Deux lectures que les gens font de travers :

Quel fichier correspond à quoi, et quoi faire dans chaque cas

Le nom du fichier, c'est tout l'indice, et c'est la famille à laquelle il appartient qui décide de la solution :

FamilleCe que c'estCe qui aide vraiment
Réseau sans filLe pilote de l'adaptateur Wi-FiLe pilote du fabricant lui-même plutôt que le pilote générique fourni par Windows Update. Un câble fait disparaître la ligne complètement.
Réseau filaireCarte mère ou carte réseau ajoutéeLe pilote du fabricant de la carte mère. Couper la modération d'interruptions ne règle pas cette ligne : sans elle, les paquets ne sont plus regroupés, chaque paquet reçu déclenche sa propre interruption et le pilote s'exécute plus souvent, pas moins. C'est pourquoi la page Connexion Internet ne touche pas à la modération d'interruptions sur les machines de moins de six cœurs physiques — voir Tweaks réseau.
StockageLe contrôleur sur le chemin de ton disqueEn NVMe, essaie le pilote de Windows et celui du fabricant, et garde celui avec lequel le test de latence affiche la valeur la plus basse. Un pilote de stockage tiers mérite d'être retiré.
USBContrôleur hôteLes pilotes de chipset, et déplacer la souris vers un port de la carte mère plutôt que derrière un hub.
AudioLe codec, et tout ce qui se superpose dessusLe pilote du fabricant ; si ça persiste, le pilote audio générique de Windows fait en général baisser le chiffre. Les utilitaires RGB et audio passent par ce chemin.
AffichageLe pilote graphiqueLe site du fabricant lui-même. Si ça a commencé après une mise à jour, reviens à la version précédente.
Les composants de Windows eux-mêmesDu temps passé pour le compte d'un autre piloteRien à « mettre à jour » là-dedans — corriger les pilotes ci-dessus fait baisser cette ligne aussi.
Gestion de l'alimentationLe chemin qui change les fréquences et les états de reposMonter l'état minimal du processeur et réduire la profondeur des états C dans le firmware raccourcissent tous les deux cette ligne, et augmentent tous les deux la consommation au repos. C'est un compromis, pas une correction.

Un pilote de filtre mérite sa propre ligne ici. Les outils de mise en forme du trafic et de routage de connexion font passer chaque paquet par un pilote à eux, et des à-coups réseau de plusieurs secondes sont leur effet secondaire le plus connu ; le scan des saccades les nomme quand il les trouve. Ça vaut aussi pour les suites de macros et les logiciels d'éclairage qui installent un filtre sur le chemin de la souris et du clavier.

La solution, et les fausses solutions

La solution, c'est de mettre à jour ce pilote-là, chez le fabricant du matériel. Pas tout le système, pas via un outil de mise à jour de pilotes, et pas en réinstallant Windows. La page nomme le fichier précisément pour que tu puisses chercher à quel périphérique il appartient.

Ce qui ne corrige rien, et qui est refusé ici pour cette raison : les forçages de résolution du timer, les valeurs de gestion mémoire du noyau (DisablePagingExecutive, LargeSystemCache) et les listes de registre qui circulent sous le mot « latence ». Aucune ne change la durée pendant laquelle un pilote garde un cœur, parce que c'est le code du pilote qui le garde. Désactiver des périphériques au hasard n'est pas non plus un diagnostic — même si désactiver un périphérique à titre de test, avec une mesure avant et après, est une très bonne expérience. Il en va de même pour les valeurs au niveau du périphérique qui circulent avec ces listes : MSISupported change le mode d'interruption d'un périphérique et, mal réglé, le résultat peut être un écran noir, donc w0a ne l'écrit jamais, et la carte de réparation d'orientation des interruptions plus bas n'y touche pas.

Les deux réglages voisins auxquels w0a touche

Stratégie d'interruption du périphérique : lecture seule, avec une carte de réparation

Où Windows la garde : par périphérique, sous HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\<device>\<instance>\Device Parameters\Interrupt Management\Affinity Policy. DevicePolicy (DWORD) choisit comment les interruptions du périphérique sont placées ; quand elle vaut 4, « processeurs spécifiés », AssignmentSetOverride est le masque des processeurs qu'elles peuvent utiliser.

Valeur par défaut de Windows : aucune des deux valeurs n'existe. Windows calcule alors le placement lui-même, et Microsoft recommande la stratégie par défaut partout où elle s'applique.

Ce que fait w0a : il lit ces valeurs et ne les écrit pas. Depuis le 8 octobre 2026, l'orientation qu'il proposait depuis la page Test de latence n'existe plus, pour trois raisons : aucun test A/B dans un jeu n'a montré une image gagnée grâce à elle, Microsoft recommande le placement que calcule Windows, et un masque erroné, c'est un périphérique qui ne démarre pas.

Retour en arrière : si un outil a épinglé les interruptions d'un périphérique et que quelque chose s'est cassé — une souris qui décroche, un « Code 10 » dans le Gestionnaire de périphériques —, la carte Orientation des interruptions matérielles supprime les deux valeurs de tous les périphériques PCI, y compris l'orientation laissée par d'anciennes versions de w0a. Elle ne demande un redémarrage que quand elle a réellement retiré quelque chose, et elle ne touche pas à MSISupported.

« En charge : contrôle de flux, modération d'interruptions, coalescence de segments coupés » (page Connexion Internet)

Ce qu'elle écrit : 0 dans le mot-clé *FlowControl de l'adaptateur réseau, sur chaque adaptateur qui le déclare. *InterruptModeration, *RscIPv4 et *RscIPv6 ne sont écrits que sur les machines d'au moins six cœurs physiques, et seulement sur les adaptateurs dont on sait qu'ils tournent en dessous de 2,5 Gbit/s ; sur ces machines, la case coupe aussi la coalescence de segments au niveau de la pile réseau, sauf si elle est déjà coupée.

Pourquoi la modération reste activée sur les petites machines : avec la modération et la coalescence toutes les deux coupées, chaque paquet reçu devient sa propre interruption au lieu d'une par intervalle de modération, et la charge d'appels différés tombe sur le cœur qui reçoit. Couper la modération n'est donc pas un moyen de raccourcir la ligne du pilote réseau dans le Test de latence : selon la propre description de w0a, ce que ça retire, c'est l'attente de quelques dizaines à quelques centaines de microsecondes qu'un paquet passe dans l'adaptateur jusqu'à l'expiration du minuteur du lot, et ce que ça ajoute, c'est une interruption par paquet. Son effet sur la liste des pilotes n'a pas été mesuré. Si ta ligne est celle du pilote réseau, lance le test avec la case appliquée et sans elle.

Ce que la case promet elle-même : des microsecondes, sur le ping en charge. Son message dit que le ping moyen ne change pas.

Quand ça s'applique : quand l'adaptateur redémarre ; w0a demande un redémarrage dès qu'il a écrit quelque chose.

Retour en arrière : la carte Déchargements de la carte réseau remet les déchargements matériels, la modération des interruptions, l'Energy Efficient Ethernet, la suspension sélective et les tampons de réception aux valeurs par défaut du pilote lui-même, telles que le pilote les déclare.

Vérifie toi-même

Ces commandes ne font que lire. Dans l'invite de commandes ou dans PowerShell :

reg query "HKLM\SYSTEM\CurrentControlSet\Enum\PCI" /s /v DevicePolicy
reg query "HKLM\SYSTEM\CurrentControlSet\Enum\PCI" /s /v AssignmentSetOverride

Une réponse qui dit que la recherche s'est terminée sans aucune correspondance (dans un Windows en anglais, End of search: 0 match(es) found.) veut dire qu'aucun périphérique ne porte de forçage : c'est la valeur par défaut de Windows. Une correspondance est listée sous la clé où elle a été trouvée, et la partie PCI de ce chemin identifie le périphérique.

Dans PowerShell, pour l'adaptateur réseau :

Get-NetAdapterAdvancedProperty -Name "*" -RegistryKeyword "*FlowControl","*InterruptModeration","*RscIPv4","*RscIPv6" -AllProperties

Ça liste, pour chaque adaptateur, le réglage actuel des quatre mots-clés que la case de la page Connexion Internet peut écrire. Un adaptateur qui n'apparaît pas pour un mot-clé ne le déclare pas, et la case n'y écrit rien.

Puis remesure

Même méthode, mêmes douze secondes, même machine. La page compare avec ton run précédent et rapporte un écart inférieur à 5 % comme une absence de changement plutôt que comme une amélioration, parce que deux runs sur une machine à laquelle on n'a pas touché diffèrent de quelques pour cent de toute façon — une main ne bouge jamais deux fois de la même manière.

Si la ligne du pilote a baissé mais pas les saccades, tu as appris quelque chose de réel : ce n'était pas ta cause, et Pourquoi les jeux saccadent sous Windows 11 contient le reste de la liste. Et si ce que tu as, c'est une fréquence d'images qui tombe et reste basse plutôt qu'une secousse, ça n'a jamais été ça — Chutes de FPS soudaines dans les jeux est la liste correspondante.

À lire aussi

Tu joues à CS2 ? Quelles options de lancement font encore quelque chose, et où sont vraiment les images dans le menu vidéo : FPS bas et saccades dans CS2 : une liste de contrôle mesurée

w0a ne change aucun réglage Windows tant que tu ne le lui demandes pas, et un tweak sauvegarde l'ancienne valeur avant d'en écrire une nouvelle. Me prévenir

Cette page t'a-t-elle aidé ?

Qu'est-ce qui manquait, ou qu'est-ce qui n'a pas marché ? Nous lisons chacun de ces messages.

Si cette page n'a pas réglé le problème, écris-nous — dis-nous quel article tu as lu, et nous corrigerons l'article.