Limiter durablement l’affinité CPU d’audiodg.exe sous Windows 11

Sous Windows 11, audiodg.exe se relance et perd l’affinité CPU définie. Voici un guide concret pour l’obliger à rester sur un seul cœur : explications, limites, pas‑à‑pas avec Process Lasso, script PowerShell + tâche planifiée, et conseils pour réduire la charge audio.

Sommaire

Problème posé

Vous souhaitez que audiodg.exe (Windows Audio Device Graph Isolation) n’utilise qu’un seul cœur CPU et conserve ce réglage dans le temps. Or, dès qu’il est recréé, le processus revient à son affinité par défaut (tous les cœurs). Le besoin : rendre durable un « 1 cœur » pour audiodg.exe sur Windows 11.

Pourquoi l’affinité se réinitialise

  • audiodg.exe est enfant du service Windows Audio : il est recréé à la moindre perturbation (changement de périphérique audio, mise à jour de pilote, redémarrage du service Audio, déconnexion/reconnexion de session, mise en veille/réveil…). À chaque renaissance, il repart avec l’affinité par défaut (tous les cœurs).
  • Protection d’intégrité du code : les exécutables système signés ne se patchent plus durablement. Même si vous modifiez l’en‑tête PE (type ImageCFG), Windows rétablit l’original ou refuse l’exécution.

Ce qui a été essayé et constaté

MéthodePrincipeRésultat constaté
ImageCFG (outil hérité)Modifier l’en‑tête PE pour imposer une affinité au lancementInopérant sur Windows 10/11 : l’exécutable signé refuse la modification ou est restauré.
Process Lasso (tierce partie)Surveiller le démarrage des processus et réappliquer automatiquement affinité/prioritéFonctionne, mais requiert un logiciel résident.
Gestionnaire des tâchesClic droit › Définir l’affinitéÀ refaire après chaque recréation du processus.
start /affinityLancer un programme avec un masque CPU prédéfiniNon applicable ici : audiodg.exe est lancé par Windows Audio, pas manuellement.

Conclusion opérationnelle

On ne peut pas figer l’affinité d’audiodg.exe directement dans le binaire ni via le Registre. La stratégie gagnante consiste à réappliquer automatiquement l’affinité dès que le processus réapparaît :

  • Solution confortable : Process Lasso.
  • Solution native : script PowerShell + Planificateur de tâches (déclenchement au logon et sur création de processus).

Solution recommandée : Process Lasso

Process Lasso est un utilitaire réputé qui surveille les processus et applique automatiquement vos politiques d’affinité et de priorité.

Étapes suggérées

  1. Lancer Process Lasso et vérifier qu’il s’exécute au démarrage de Windows.
  2. Attendre qu’audiodg.exe soit présent (lecture de musique, test de son…).
  3. Dans la liste des processus, clic droit sur audiodg.exeAffinité CPUToujoursDéfinir l’affinité…, puis cocher uniquement le CPU 0 (ou celui visé).
  4. Optionnel : régler la Priorité sur Below Normal si vous observez des concurrences CPU.

Avantages : pas de script à maintenir, réapplication quasi instantanée à chaque résurrection d’audiodg.exe. Inconvénient : un service résident supplémentaire.


Solution native : PowerShell + Planificateur de tâches

Cette approche n’ajoute pas de logiciel tiers. L’idée : un script idempotent qui fixe l’affinité, déclenché automatiquement au bon moment.

Script minimal

$mask = 1    # cœur 0
Get-Process audiodg -ErrorAction SilentlyContinue |
  ForEach-Object { $_.ProcessorAffinity = [IntPtr]$mask }

Ce script :

  • gère toutes les instances d’audiodg.exe présentes,
  • peut être relancé sans risque (idempotent),
  • fonctionne avec une latence d’environ 1 seconde après la création du processus (selon le déclencheur).

Script robuste prêt à l’emploi

param(
  [UInt64]$Mask = 1  # 0x1 = CPU 0
)

$procs = Get-Process -Name audiodg -ErrorAction SilentlyContinue
if ($null -eq $procs) { return }

foreach ($p in $procs) {
try {
$current = [UInt64]$p.ProcessorAffinity
if ($current -ne $Mask) {
$p.ProcessorAffinity = [IntPtr]$Mask
}
} catch {
# En cas d'échec (droits insuffisants ou timing), on ignore et on réessaiera au prochain déclencheur
}
} 

Conseil droits : exécuter la tâche avec les plus hauts privilèges pour pouvoir modifier un processus de service.

Créer la tâche planifiée (GUI)

  1. Ouvrir Planificateur de tâchesCréer une tâche.
  2. Général : nommer « Fix audiodg Affinity », cocher Exécuter avec les autorisations les plus élevées.
  3. Déclencheurs :
    • À l’ouverture de session (tout utilisateur).
    • Sur un événement : Journal = Sécurité, ID = 4688 (création de processus), puis passer en Filtre personnalisé › XML et coller la requête ci‑dessous.
  4. Actions : Démarrer un programme :
    • Programme/script : powershell.exe
    • Ajouter des arguments : -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Set-AudiodgAffinity.ps1" -Mask 0x1
  5. Conditions : décocher « Démarrer la tâche uniquement si l’ordinateur est en courant alternatif » si nécessaire.
  6. Paramètres : cocher « Autoriser l’exécution de la tâche à la demande » et « Exécuter la tâche dès que possible après un démarrage planifié manqué ».

Filtre XML pour l’événement 4688 (Sécurité)

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[System[EventID=4688]]
      and
      *[EventData[Data[@Name='NewProcessName'] and (contains(., '\audiodg.exe') or contains(., '/audiodg.exe'))]]
    </Select>
  </Query>
</QueryList>

Remarque : si vous ne voyez pas d’événements 4688, activez l’audit de création de processus :

auditpol.exe /set /subcategory:"Process Creation" /success:enable

Variante WMI (expert)

Pour une réaction immédiate sans passer par le journal Sécurité, on peut surveiller WMI depuis un script résident (lancé par une tâche « À l’ouverture de session »). Le script reste en mémoire et applique la règle à chaud :

$mask = [UInt64]1  # CPU 0
Register-WmiEvent -Query "SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName='audiodg.exe'" -SourceIdentifier "AudiodgWatch" -Action {
  Start-Sleep -Milliseconds 300
  try {
    $pid = $Event.SourceEventArgs.NewEvent.ProcessID
    $p = Get-Process -Id $pid -ErrorAction Stop
    $p.ProcessorAffinity = [IntPtr]$mask
  } catch { }
}
# Empêche la fermeture du script
Wait-Event

Avantage : quasi instantané. Inconvénient : le script reste résident (mais sans logiciel tiers).


Réduire la charge d’audiodg.exe avant de brider les cœurs

  • Désactiver les effets : Paramètres › Système › Son › votre périphérique › Améliorations audio = Désactivé. Dans le Panneau de configuration › Son › Propriétés du périphérique › onglet Améliorations : désactiver.
  • Format par défaut : privilégier 44,1 kHz/48 kHz en 16 bits, éviter 96/192 kHz si inutile.
  • Pilotes : mettre à jour (ou revenir à une version stable) du pilote audio si des pics CPU sont apparus après une mise à jour.
  • Applications d’effets : equalizers, spatialisation, APO tiers peuvent s’injecter dans audiodg.exe et alourdir le mixage ; tester avec ces modules désactivés/désinstallés.

Choisir le bon cœur : masques d’affinité

Un masque d’affinité est un nombre dont chaque bit correspond à un processeur logique. Pour imposer un seul cœur n, utilisez 2^n. Exemples :

CPU logiqueMasque (décimal)Masque (hex)
010x1
120x2
240x4
380x8
4160x10
5320x20
6640x40
71280x80
82560x100
95120x200
101 0240x400
112 0480x800
124 0960x1000
138 1920x2000
1416 3840x4000
1532 7680x8000

Pour plusieurs cœurs, additionnez : ex. CPU 0 + 1 => 0x3, CPU 2 + 3 => 0xC.

Calculer un masque depuis une liste de cœurs

function Get-AffinityMask([int[]]$Cpus) {
  $mask = [UInt64]0
  foreach ($c in $Cpus) { $mask = $mask -bor (1 -shl $c) }
  return $mask
}
Get-AffinityMask -Cpus 0     # 1  (0x1)
Get-AffinityMask -Cpus 3     # 8  (0x8)
Get-AffinityMask -Cpus 0,1   # 3  (0x3)

Hybride P‑cores/E‑cores et Hyper‑Threading

  • Sur CPU hybrides (P/E‑cores), vous pouvez cibler un type de cœur en choisissant le bon index logique. Vérifiez l’indexation dans le Gestionnaire des tâches (onglet Performance › CPU › Graphique par processeur logique).
  • Avec l’Hyper‑Threading/SMT, les cœurs logiques 0/1 appartiennent souvent au même cœur physique : si vous ne voulez qu’un seul contexte d’exécution, restez sur un unique processeur logique (ex. 0x1).
  • Sur des machines > 64 processeurs logiques, Windows utilise des groupes de processeurs. ProcessorAffinity agit dans le groupe courant du processus. Pour audiodg.exe, se limiter à un cœur du groupe 0 suffit généralement (ex. 0x1).

Bonnes pratiques et garde‑fous

  • Stabilité d’abord : réduire la charge d’audiodg.exe (effets, pilotes) avant de le contraindre à un cœur.
  • Ne pas patcher C:\Windows\System32\audiodg.exe : bloqué par la protection de fichiers, l’intégrité de code et la signature.
  • Registre : aucune clé supportée pour forcer l’affinité d’audiodg.exe.
  • Diagnostics : suivez l’utilisation CPU d’audiodg.exe pendant la lecture audio/vidéo, et testez après chaque changement (désactivation d’un APO, mise à jour pilote…).

Procédure express : mise en place en 5 minutes

  1. Créer C:\Scripts\Set-AudiodgAffinity.ps1 avec le script robuste ci‑dessus (Mask=0x1).
  2. Planificateur › Créer une tâche : nom « Fix audiodg Affinity », exécuter avec les autorisations les plus élevées.
  3. Déclencheurs : À l’ouverture de session + Sur événement 4688/Sécurité (filtre XML ci‑dessus).
  4. Action : powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Set-AudiodgAffinity.ps1" -Mask 0x1
  5. Valider, tester en redémarrant le service Audio (ou en changeant de périphérique) ; vérifier l’affinité dans le Gestionnaire des tâches.

FAQ

Est‑ce risqué de forcer un seul cœur ?

Pas pour la stabilité de Windows. En revanche, si audiodg.exe doit resampler/mixer beaucoup de flux avec des effets, lui imposer un seul cœur peut créer des goulots d’étranglement. Surveillez la latence audio et adaptez le masque si nécessaire.

Pourquoi l’affinité se perd après chaque redémarrage ?

Parce que audiodg.exe renaît : nouvelle instance, nouvelles propriétés ; Windows repart sur l’affinité par défaut.

Peut‑on tout faire par GPO/Registre ?

Non : il n’existe pas de clé de Registre ni de stratégie intégrée pour fixer l’affinité d’un processus système. Passez par une réapplication (Process Lasso ou tâche planifiée).

Dois‑je choisir un P‑core ou un E‑core ?

Si vous utilisez un CPU hybride, préférez un P‑core pour des charges audio lourdes. Testez et mesurez ; le bon choix dépend de vos autres processus.


Synthèse rapide

  • L’affinité « 1 cœur » ne peut pas être figée dans le binaire d’audiodg.exe.
  • La voie durable consiste à réappliquer l’affinité :
    • automatiquement avec Process Lasso,
    • ou avec un script PowerShell déclenché par le Planificateur de tâches (logon + événement 4688).
  • Avant de contraindre le CPU, pensez à réduire la charge audio (désactivation des effets, pilotes stables).

Annexe : modèle de script paramétrable

<#
.SYNOPSIS
  Fixe l'affinité d'audiodg.exe au masque spécifié.
.PARAMETER Mask
  Masque d'affinité (hex ou décimal). 0x1 = CPU 0.
.EXAMPLE
  .\Set-AudiodgAffinity.ps1 -Mask 0x1
#>

[CmdletBinding()]
param(
[Parameter(Mandatory=$false)]
[UInt64]$Mask = 0x1
)

function Set-AudiodgAffinity([UInt64]$M) {
$procs = Get-Process -Name audiodg -ErrorAction SilentlyContinue
if ($null -eq $procs) { return $false }
$ok = $false
foreach ($p in $procs) {
try {
if ([UInt64]$p.ProcessorAffinity -ne $M) {
$p.ProcessorAffinity = [IntPtr]$M
}
$ok = $true
} catch { }
}
return $ok
}

# petite temporisation en cas de démarrage très récent

Start-Sleep -Milliseconds 300
[void](Set-AudiodgAffinity -M $Mask) 

Annexe : contrôle visuel

Pour vérifier rapidement :

  1. Ouvrir le Gestionnaire des tâchesDétails, clic droit sur audiodg.exeDéfinir l’affinité.
  2. Les cœurs non cochés confirment que la politique est bien appliquée.

En bref : on ne « force » pas audiodg.exe une fois pour toutes ; on automatise la réapplication de son affinité. C’est simple, fiable et réversible.

Sommaire