Corriger la Latence DPC et optimiser les performances
Latence DPC
DPC ( appel de procédure différée ) permet aux tâches de haute priorité de gérer l’exécution ultérieure de tâches moindre priorité avec des pilotes de périphériques et autres événements de bas niveau réalisant des opérations de haute priorité ou les traitements et la planification supplémentaire d’une exécution à une priorité inférieure, et si Windows gère l'efficacité du pilote et que celui-ci à un traitement prenant plus de temps cela aurait pour conséquence un décalage dans la chaîne de traitement d’autre pilote provoquant par exemple dans l’audio des clics, des pops, distorsion et des abandons, car nos applications audio fournissent des données au «sous-système» et au matériel dans les tampons ( + fois/S ) évoluant avec un traitement en temps réel alors que Windows n’est pas un système d’exploitation en temps réel, il peut ainsi arriver que ces tampons puissent manquer leurs délais occasionnant ces fameux clics, pops et abandons audio, l’application ne pouvant ainsi fournir les mémoires tampon audio au matériel avec un temps d’exécution trop élevé.
Depuis la version 1703 l’audio dans Windows 10 a été amélioré afin de réduire la latence, et si auparavant le temps de latence du moteur audio était de ~ 12ms à ~ 6ms, avec Windows 10 c’est le pilote audio qui défini la taille de la mémoire tampon, cependant le tampon dans Windows 10 pour les applications est de ~ 10ms par défaut, par ailleurs le nouveau Wasapi ( Windows Audio Session API ) peut traiter de plus petit tampon (<10 ms) tout comme la nouvelle API AudioGraph, aussi l’amélioration du pilote audio Windows profite aux utilisateurs Asio4LL offrant de meilleure latence avec WaveRT, et pour les autres possédant une interface audio externe, Windows 10 1703 introduit un pilote USB Audio 2.0 qui est un miniport de port audio WaveRT ( usbaudio2.sys, usbaudio2.inf ) il est aussi à noter que les périphériques audio USB utilisent le système de donnée entre les tampons d'application et des tampons de matériel ou le mode exclusif permet d’améliorer les performances comme Wasapi augmentant automatiquement la priorité des threads du système et utilisant MMCSS.
Windows 10 a développé le DPC ( Deferred Procedure Call ) une notion de liste d’attente des priorités pour chaque processeur, alors que le pilote a créé une tâche avec différente priorité ( haute, moyenne, basse ) le processeur doit aussi rencontrer le processus des tâches/DPC d’une interruption, par exemple IRQL : Interrupt Request Level, en consultant la liste d’attente des procédures d’appels, et dans la gestion des priorités, les threads de Windows sont intéressants à évoquer car avec le séparateur de threads ( ordonnanceur ) il exécute les threads selon des priorités ou une priorité plus élevée occasionnera un temps d’exécution plus long que ceux possédants une priorité plus faible, aussi lors de la seconde rédaction du dossier Windows 10 MAO j’ai mentionné deux procédés ( AdditionalDelayedWorkerThreads AdditionalCriticalWorkerThreads ) pouvant permettre d’augmenter et d’affecter le nombre de threads afin d’augmenter le traitement de travail des threads retardés ( un nombre restreint de threads réduira la vitesse de traitement ) et améliorant les performances E/S des systèmes, cependant il est aussi nécessaire de prendre en compte les temps longs d'exécution des routines ISR ou une interruption peut être produite sur un même processeur que l’application audio comme une carte son car le périphérique connecté peut s’interrompre sur un processeur connecté provoquant l’exécution des routines ISR ou tout thread tournant sur le processeur sur lequel une interruption s’est produite sera temporairement arrêté, aussi pour que le système soit suffisamment réactif ISR et DPC doivent s’exécuter le plus rapidement possible.
Si l’Optimisation de base pour un PC Audio/vidéo Windows 10 et l’Optimisationde la Gestion de l’énergie et performance optimisent déjà la relation entre l’énergie, la performance et la latence DPC, permettant d’asseoir une meilleure stabilité du système d’exploitation dans l’utilisation du traitement audio en temps réel, en cas de latence élevée il est encore possible de tenter d’aller chercher une amélioration des performances, néanmoins comme pour la minuterie d'événement haute précision (HPET) développé plus bas, les résultats ne sont pas forcément synonyme de pertinence ou la recherche de stabilité est avant tout une nécessité dans un environnement PC audio et d’usage différents entre chaque Stan ( Station de travail audionumérique ).
A noter que ce chapitre peut s’appliquer en mode base, néanmoins si la machine PC est stable et ne présente pas de latence particulière il apparaît ou apparaîtrait pour la plupart des configurations une étape quasiment inutile s’adressant avant tout à une catégorie de configuration ou la recherche de performance et de correction de latence est exigée.
Sous Windows 10, avec la version 1903, la mise à jour KB4505903 corrige le bug dans DPC latency provoquant des pics de latence DPC et occasionnant des bruits parasites sur certaines machines.
Désactiver des périphériques Système ( recommandé en mode base )
Adaptateur réseau
Port Bluetooth
Port Infrarouge
Carte Wifi
Caméra vidéo
Carte graphique
- dans certains cas c’est la carte graphique qui est en cause, dans ce cas il semble nécessaire de désactiver le Device Manager
Dans la globalité mettre à jours les drivers et Windows permettent de corriger les problèmes de latence DPC
Désactivez le protocole Internet version 6
( Windows + R tapez ncpa.cpl dans Réseau et Internet Cliquez sur Centre Réseau et partage dans l'option Modifier les paramètres de l'adaptateur ]
HPET (High Precision Event Timer) ( améliorer les performances de votre PC )
La minuterie d'événement haute précision (HPET) est développée par Intel et Microsoft, HPET étant un timer possédant la capacité de gérer la minuterie, chronomètre, métronome, horloge, etc... permettant d’informer le processeur d’un temps écoulé suite à une interruption de comparateur, aussi le réglage des temporisateurs peut améliorer les performances du PC notamment les activités en temps réel.
Cependant, il y a plusieurs informations contradictoires sur la réussite de HPET activé ou pas, ou en définitive il ne s’agit pas temps de contradiction que d’élément de Windows et d’environnement matériel et logiciel complexifiant la possibilité d’établir une norme de performance ou pas, ou chaque différence et spécificité matériel et ou logiciel entrant dans le champs de Windows créé un environnement de performance particulier, ainsi il ne peut y avoir un seul rapport positif ou négatif, mais plusieurs.
Optimiser la résolution du minuteur sous Windows dépend avant tout de la solution matériel, ou certaines carte mère imposent le blocage de HPET activé ou sans possibilité de changer dans le Bios comme avec les portables PC, aussi les dernières générations multicores Intel ou AMD utilisent davantage le TSC (compteur d'horodatage) accédant plus rapidement à une horloge que le HPET, il y aurait donc un débat entre HPET vs TSC comme le montre cet échange [Copie du courrier électronique à partir d'un ingénieur logiciel sur les TSC vs HPET https://pastebin.com/MjsbgiC9 ] donnant un exemple de configuration serveur avec de multiples horloges n’étant pas toutes synchronisées sur tous les nœuds pouvant conduire à des problèmes de performances notamment lorsque le TSC est la source d’horloge par défaut alors que Windows utilise une source d’horloge unique, mais il est possible de contourner ce problème sur certains environnements notamment de serveur avec la commande bcdedit / set useplatformclock true qui n’améliore pas la performance mais stabilise en vue de compatibilité pouvant ainsi améliorer la performance TSC.
Autre confirmation, celle d’application pouvant comme AMD Cool'n'Quiet technologie sous SQL server ou les valeurs peuvent être incorrects car modifiant les fréquences du processeur ceci pouvant démontrer que des logiciels et ou drivers peuvent perturber la stabilité d’un PC.
Windows possède un minuteur par défaut de 15,6 ms signifiant que toutes les 15,6 ms le système d'exploitation reçoit une interruption d'horloge du matériel du minuteur du système, et des programmes peuvent augmenter la fréquence de minuterie augmentant la consommation d’énergie, l'efficacité énergétique du système sont influencées par la quantité d'activité du processeur, y compris l'activité périodique des applications et des pilotes de périphérique, aussi les dernières fonctionnalités Windows et CPU d’économie d’énergie sont des possibles problèmes de latence audio, ou les derniers processeurs et Chipsets utilisent le temps d'inactivité entre les intervalles de temporisation du système pour réduire la consommation d'énergie du système en plaçant divers composants dans des états inactifs de faible puissance entre les intervalles de temporisation, l’application pouvant appeler timeBeginPeriod augmentant la résolution de la minuterie affectant la résolution globale du minuteur système car Windows utilisera la résolution la plus élevée, malheureusement certaines applications peuvent augmenter la fréquence d'horloge élevée et s’il est possible de vérifier les événements permettant d’analyser les performances en enregistrant les traces ETW ou s’affiche les valeurs définissant l’intervalle de minuterie, il est ainsi possible de savoir quels sont les processus changeant la fréquence d’horloge, par ailleurs Microsoft recommande justement de désactiver le minuteur si la lecture audio ou vidéo haute résolution est interrompue.
En finalité pour des environnements spécialisés comme la MAO, création et montage Vidéo/Audio, PAO, jeux, ils peut être nécessaire d’inverser la tendance matériel et logiciel de réduction de la consommation d’énergie et de maintenir un état actif de performance permanent afin d’éviter qu’une résolution de la minuterie puisse engendrer ces phénomènes de latence, aussi dans certains environnements exigeants le réglage des temporisateurs peut apporter davantage des performances dans les activités en temps réelle ou la désactivation HPET avec l'hyperthreading et la désactivation de la fonction CPU Core Parking peuvent être significative.
Activer ou Désactiver HPET
Avant d’intervenir avec bcdedit il est nécessaire de vérifier dans la configuration du BIOS du mode avancé ou de l'UEFI la prise en charge de HPET et la possibilité d’activer ou désactiver la minuterie HPET.
Rendez-vous ensuite:
Touche Windows + R
taper dans CMD ou PowerShell ( en administrateur )
Pour activer HPET exécutez la commande bcdedit / set useplatformclock true
Redémarrer
Pour désactiver HPET exécutez la commande bcdedit / deletevalue useplatformclock
Redémarrer
A noter que ce réglage réduirait la latence DPC sur certains processus
bcdedit / set useplatformclock yes
bcdedit / set tscsyncpolicy Enhanced
bcdedit / set disabledynamictick yes
Redémarrer
Ne pas réaliser ces opérations avec un PC portable avec la batterie
useplatformclock
Force l'utilisation de l'horloge de la plate- forme comme compteur de
performance du système.
disabledynamictick
active et désactive fonction tick timer dynamique.
tscsyncpolicy
contrôle le temps de timbre contre la politique de synchronisation.
Changer les priorités IRQ matériel
Ceci n’est pas une nouveauté mais il peut être utile d’assigner une priorité matériel pouvant ainsi améliorer le traitement de votre périphérique augmentant potentiellement la performance en établissant des priorités.
Le périphérique d’un ordinateur communique avec le processeur lié à une adresse IRQ, et selon les tâches effectuées comme une carte son le périphérique doit pouvoir mobiliser l’attention du processeur, aussi un IRQ possédant un numéro le plus bas possède une plus grande priorité, et il est aussi fréquent qu’un même numéro IRQ soit partagés par plusieurs périphériques pouvant engendrer un conflit IRQ, cependant IRQ Steering permet maintenant de limiter ces problèmes.
Touche Windows + R
Tapez msinfo32.exe
Dans le menu des informations système \ Ressources matérielles \ IRQs, vous pouvez repérer le ou les périphériques à travers la numérotation IRQ,
Touche Windows + R
Tapez regedit.exe
recherchez la clef:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl
puis créer une nouvelle valeur Dword 32b
par exemple
IRQ20priority ( IRQ20 représentant votre matériel )
et ajouter 1 en hexadecimale
Redémarrer
Passer des IRQ en mode MSI ( Message Signaled Interrupts )
Pour des configurations matériels un peu limite, pour tenter de réduire davantage la latence audio, pour éviter le partage IRQ, il peut être intéressant d'envisager le basculement de certains IRQ vers la gestion MSI pouvant apporter une plus faible latence pour la gestion des interruptions traités par deux routines ISR et DPC.
Auparavant, les interruptions étaient gérées par une routine ISR développant un temps long de non-réponse puis est arrivée la division des interruptions avec ISR et DPC, alors que ISR est exécutée à un niveau de priorité très élevé, DPC est exécutée à un niveau inférieur de priorité, et si Windows 10 traite mieux le partage IRQ en cas de problème le mode MSI permet d'arrêter le partage alors qu'en mode IRQ plusieurs périphériques fonctionnant peuvent y partager le même numéro, de plus en mode MSI, il peut exister une amélioration du temps de réponse avec un traitement plus rapide des interruptions périphériques par le CPU bénéficiant à une meilleure communication entre le processeur et les périphériques.
Ce passage peut être envisagé comme HPET, c'est à dire dans l'optique d'améliorer, de corriger, sous entendant également que le résultat n'est pas une donnée de garantie universelle, ou tout dépend de l'architecture de la carte mère, des pilotes disposant d'une compatibilité MSI ou pas, PC fixe ou portable...
Touche Windows + R
devmgmt.msc
Dans le menu du gestionnaire de périphériques,
choisissez dans le menu "Affichage" Ressource Par type, vous pouvez ainsi accéder à la liste des requêtes d'interruption IRQ avec la dénomination du matériel, entre parenthèse vous avez un chiffre positif ( pour IRQ ) et négatif ( pour le mode MSI )
Avec la base de registre
Touche Windows + R
Tapez regedit.exe
recherchez la clef:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI
Vous pouvez ainsi vérifier quelles sont les lignes PCI compatibles avec MSI comme USB 3
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\VEN_8086&DEV_9CB1&SUBSYS_201F1043&REV_03\3&11583659&0&A0\Device Parameters\Interrupt Management\MessageSignaledInterruptProperties\
avec une valeur dword 32 MSISupported sur 1
Des outils
une application permettant de cocher MSI passant d'IRQ en MSI, il est vivement recommandé d’appliquer ce processus périphérique par périphérique, une case à la fois et en redémarrant
Spécial carte graphique Nvidia MSIInturruptEnabler
Lessmsi:view and extract Windows MSI files
Avant d’effectuer le basculement vers MSI, pensez à mettre à jours les pilotes ceci afin de bénéficier par défaut de la compatibilité
Augmenter et affecter le nombre de threads de travail
Dans le thème de l’optimisation et d’amélioration des performances, ces deux astuces peuvent contribuer à augmenter les performances, plus adapté dans un environnement de type serveur, certaines valeurs peuvent participer à améliorer les paramétrages de Windows.
Augmenter le nombre de threads de travail
AdditionalDelayedWorkerThreads
Cette valeur augmente le nombre de threads de travail retardés dans la file d’attente de travail créés spécifiquement, l’ordre de traitement est évalué selon un processus définissant le traitement des éléments de travail n’étant pas considérés comme critique dans le temps, ce qui engendre un retard dans le traitement des threads, les éléments non traités peuvent être mise en attente dans une mémoire paginée, cette valeur permet ainsi d’augmenter le traitement de travail des threads retardés car un nombre restreint de threads réduira la vitesse de traitement, cependant si une valeur est trop élevé ( 20 ) elle va permettre une augmentation de la consommation des ressources système; il faut ainsi trouver le bon équilibre entre performance et gestion optimisées des ressources, le but de l’optimisation.
W
+ R en mode administrateur tapez regedit rechercher la clef :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager
\Executive sur AdditionalDelayedWorkerThreads
mettre 16 0 par défaut
AdditionalCriticalWorkerThreads
Cette valeur permet d’affecter le nombre de threads que le cache du système de fichier peut utiliser pour les lectures anticipées et les écritures, en augmentant la valeur cela peut permettre d’améliorer les performances E/S des systèmes notamment lorsqu’il y a de nombreux processeurs et un matériel de stockage puissant.
W
+ R en mode administrateur tapez regedit rechercher la clef :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Executive
sur AdditionalCriticalWorkerThreads mettre entre 16 et 64
0 par défaut ( aucun thread de travail du noyau critique est ajouté )
Redémarrer
Outils de mesures
Utilitaire analysant les possibles problèmes de tampon en mesurant les latences de la minuterie du noyau et des rapports et des temps DPC, en fournissant un rapport détaillé avec moniteur il est possible d’identifier les processus et modules du noyau causant la latence.
-DPCLatency Checker ( pour Windows 7 )
Dans le même registre que LatencyMon
Est un programme portable affichant des informations relatives à la minuterie. Vous devriez obtenir une valeur d'environ 14,3 MHz si HPET est activé, et moins que cela, généralement 3,9 MHz s'il est désactivé.
TimerResolution est une application pour changer la résolution du minuteur Windows par défaut, pouvant améliorer la réactivité et les performances en réduisant la latence DPC
enregistre et modifie l’horloge système de Windows
-The
HPET bug: What it is and what it isn't ( TimerBench )
infos sur la latence DPC et les interruptions
-enregistrez une trace ETW avec le fournisseur Microsoft-Windows Kernel-Power
UIforETW- Windows Performance Simplification
-La ligne de commande PowerCfg avec l'option / energy ( voir Optimisation de la Gestion de l’énergie et performance
Permet d’afficher un rapport donnant des informations sur l’efficacité énergétique mais également sur la résolution du minuteur.
Le rapport répertorie les instances d'augmentation de la résolution du minuteur de la plateforme et indique si les processus liés à une application ont augmenté la résolution du minuteur. Bien qu'une analyse de code révèle si une application utilise la méthode timeBeginPeriod, les appels à des bibliothèques externes ou à des plug-ins peuvent également modifier la résolution du minuteur. L'exercice d'un large éventail de scénarios d'application pendant que PowerCfg surveille la résolution du minuteur peut être utile pour localiser les problèmes de minuteur.
Liens et Sources:
Gestion de l'alimentation pour les périphériques audio
Présentationdu pilote Port WaveRT
AudioDevice Class Inactivité Application minuterie
ExtraitAudioCreation(AudioGraph):
useplatformclock
disabledynamictick
Acquiringhigh-resolution time stamps
ISRs and DPCs, The Silent Killers
WindowsTimer Resolution: Megawatts Wasted
Timers,Timer Resolution, and Development of Efficient
3 Comments:
nous acceptons de comprendre, comme on dit dans la vie dans les https://telecharger.onl programmes, et maintenant nous percevons tout : Réalisez que vous « ne vivez pas pour rien », mais que vous « vivez » simplement.
I also love the performance of Windows 10. It is so great! heat pump hot water heater denver co
Lovely blog yoou have here
Enregistrer un commentaire