One‑liners PowerShell qui remplacent 10 clics dans l’interface (à utiliser au quotidien)

Chaque fois que vous vous connectez en RDP à une machine Windows juste pour « jeter un coup d’œil rapide », vous payez une taxe invisible : latence, changement de contexte, et la très réelle possibilité de cliquer sur la mauvaise chose sur le mauvais serveur. Les interfaces graphiques sont parfaites pour les démonstrations et catastrophiques pour la réponse aux incidents. Pendant une panne, une GUI est une machine à sous : vous tirez le levier en espérant que la prochaine fenêtre révélera la vérité.

Les one-liners PowerShell ne servent pas à être astucieux. Ils servent à être rapides, reproductibles et audités. Ils transforment « je pense que tout va bien » en « voici ce que dit le système ». Utilisez-les quotidiennement et vous passerez moins de temps à cliquer et plus de temps à prendre des décisions exploitables lors d’un postmortem.

Pourquoi les one-liners gagnent en production

Un bon one-liner fait trois choses : il interroge le système de référence, formate le résultat en quelque chose de raisonné, et rend l’action suivante évidente. C’est tout l’intérêt. Pas du golf de syntaxe.

La version GUI des tâches courantes est généralement :

  • Se connecter à l’hôte approprié (ou au mauvais ; vous ne le saurez pas encore).
  • Ouvrir le snap-in adéquat.
  • Attendre qu’il se charge et rende l’interface.
  • Cliquer, filtrer, trier, cliquer encore.
  • Prendre une capture d’écran parce qu’il est difficile de faire un diff d’un screenshot.

La version PowerShell est :

  • Exécuter une commande qui renvoie des objets structurés.
  • Piper vers le tri, le filtrage, le groupement.
  • Sauvegarder la sortie (ou l’exporter) pour pouvoir la comparer plus tard.

De plus : chaque fois que vous copiez/collez « ce que vous avez vu dans la GUI » dans un ticket, vous traduisez. La traduction introduit des erreurs. Les données les plus sûres sont celles que vous ne réinterprétez pas.

Idée paraphrasée de Gene Kim (auteur DevOps/ops) : les améliorations viennent du raccourcissement des boucles de rétroaction et de la visibilité du travail. Les one-liners font les deux — quand vous les utilisez de façon consistante.

Blague #1 : Cliquer dans Server Manager pendant un incident, c’est comme déboguer avec une lampe de poche : techniquement possible, mais vous allez vous prendre les pieds dans quelque chose.

Faits et contexte historique (court, utile)

  • PowerShell lancé en 2006 sous le nom de « Monad », construit sur des objets .NET plutôt que des flux de texte. C’est pourquoi son pipeline transporte des objets, pas des chaînes.
  • WMI est antérieur à PowerShell ; de nombreuses vérifications PowerShell « modernes » enveloppent encore des classes WMI/CIM présentes depuis les années 1990.
  • WinRM est devenu le cheval de trait du remote pour PowerShell, rapprochant l’administration Windows de workflows de type SSH — sauf avec plus de Kerberos et moins de surprises agréables.
  • PowerShell 5.1 livré avec Windows 10/Server 2016 et reste le défaut sur beaucoup de serveurs ; PowerShell 7+ est séparé et multiplateforme.
  • Get-WmiObject est legacy ; Get-CimInstance est le modèle plus récent (basé sur WS-Man), généralement plus ami des pare-feu et du remoting.
  • Les compteurs de performance sont anciens mais précieux ; ils restent l’un des moyens les plus fiables pour voir la pression CPU, mémoire, disque et réseau sous Windows.
  • Les journaux d’événements sont la chose la plus proche d’un enregistreur de boîte noire pour Windows : imparfaits, mais lorsqu’ils sont utilisés avec des filtres ils valent mieux que « je jure que ça s’est passé ».
  • Hyper-V et Storage Spaces se sont appuyés tôt sur PowerShell ; beaucoup d’actions GUI sont littéralement des wrappers autour de cmdlets.
  • Group Policy et Active Directory disposent de cmdlets qui réduisent les « paramètres mystères » en transformant l’état des politiques en données interrogeables.

One-liners quotidiens : tâches, sorties et décision

Ci-dessous des commandes pratiques et exécutables. Chacune inclut (a) ce qu’elle fait, (b) ce que signifie la sortie, et (c) la décision que vous en tirez. Exécutez-les localement ou à distance (beaucoup acceptent -ComputerName ou fonctionnent via le remoting).

Remarque sur les blocs de code : Je les montre comme si exécutés depuis un shell. En pratique vous les lancerez dans PowerShell. Les commandes sont de vrais PowerShell.

1) Vérifier l’espace disque libre (rapide, triable, sans l’Explorateur)

cr0x@server:~$ powershell -NoProfile -Command "Get-Volume | Where-Object DriveLetter | Select-Object DriveLetter,FileSystemLabel,@{n='SizeGB';e={[math]::Round($_.Size/1GB,1)}},@{n='FreeGB';e={[math]::Round($_.SizeRemaining/1GB,1)}},@{n='FreePct';e={[math]::Round(($_.SizeRemaining/$_.Size)*100,1)}} | Sort-Object FreePct | Format-Table -Auto"
DriveLetter FileSystemLabel SizeGB FreeGB FreePct
----------- -------------- ------ ------ -------
C           OS              127.9   11.8     9.2
E           Logs            500.0  210.5    42.1
F           Data           2048.0 1530.2    74.7

Ce que ça signifie : FreePct est le premier indicateur de triage. En dessous d’environ 10–15 % sur les volumes système, considérez que des choses vont casser de manière étrange (patchs, fichiers temporaires, rotation de logs, dumps).

Décision : Si C: est bas, arrêtez « d’optimiser » et commencez à libérer de l’espace : vider les caches connus, faire la rotation des logs, déplacer les dumps, ou étendre le volume. Si un volume de données est bas, trouvez les plus gros consommateurs ensuite.

2) Trouver les répertoires les plus volumineux (réponse « qu’est-ce qui a mangé mon disque »)

cr0x@server:~$ powershell -NoProfile -Command "Get-ChildItem -Directory 'E:\' -Force | ForEach-Object { $s=(Get-ChildItem $_.FullName -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum; [pscustomobject]@{Path=$_.FullName; SizeGB=[math]::Round($s/1GB,2)} } | Sort-Object SizeGB -Descending | Select-Object -First 10 | Format-Table -Auto"
Path                 SizeGB
----                 ------
E:\IISLogs            96.41
E:\App\Cache          51.08
E:\App\Temp           23.77
E:\Windows\Installer  12.30

Ce que ça signifie : C’est coûteux sur de grands arbres, mais c’est honnête. Utilisez-le quand vous avez besoin de faits, pas d’impressions.

Décision : Si les logs dominent, corrigez la rétention/la rotation. Si ce sont les caches/temp, confirmez s’il est sûr de les nettoyer et pourquoi ils croissent. Si Windows\Installer grossit, ne supprimez rien au hasard — nettoyez via les méthodes supportées.

3) Processus en tête CPU (Task Manager, mais scriptable)

cr0x@server:~$ powershell -NoProfile -Command "Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name,Id,CPU,WorkingSet64 | Format-Table -Auto"
Name           Id      CPU WorkingSet64
----           --      --- -----------
sqlservr     2440  8123.54  9126807552
w3wp         4012  1022.10   785334272
MsMpEng      1780   331.92   402653184

Ce que ça signifie : CPU ici est le temps CPU cumulé depuis le démarrage du processus, pas le « pourcentage actuel ». Il répond à « qui a brûlé du CPU sur la durée », ce qui est souvent ce qu’il faut réellement.

Décision : Si un même processus domine et que les performances sont mauvaises, passez aux compteurs de performance pour du CPU en temps réel et l’encombrement. Si c’est un antivirus, envisagez des exclusions (avec prudence) ou des horaires de scan.

4) Pression CPU en temps réel et file d’attente (évitez les suppositions)

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Processor(_Total)\% Processor Time','\System\Processor Queue Length' -SampleInterval 2 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                              CookedValue
----                                              -----------
\\SERVER\processor(_total)\% processor time              87.12
\\SERVER\system\processor queue length                    14
\\SERVER\processor(_total)\% processor time              92.44
\\SERVER\system\processor queue length                    18

Ce que ça signifie : Un % Processor Time soutenu élevé plus une file d’attente qui reste élevée suggèrent une contention CPU. La file est particulièrement parlante sur les machines avec peu de cœurs.

Décision : Si la file reste élevée, identifiez la charge (processus chaud, tâches planifiées, antivirus, sauvegarde). Si c’est une machine virtuelle, vérifiez aussi la contention sur l’hôte. N’augmentez pas les vCPU sans mesurer le ready time de l’hôte (outil différent), mais traitez une file soutenue comme un signal réel.

5) Pression mémoire : available bytes et activité de pagination

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Memory\Available MBytes','\Memory\Pages/sec' -SampleInterval 2 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                  CookedValue
----                                  -----------
\\SERVER\memory\available mbytes            312.00
\\SERVER\memory\pages/sec                    86.50
\\SERVER\memory\available mbytes            280.00
\\SERVER\memory\pages/sec                    95.00

Ce que ça signifie : Peu de MB disponibles plus un pages/sec soutenu suggèrent de la pagination active. La pagination n’est pas forcément mauvaise ; la pagination soutenue sous charge l’est.

Décision : Si la pagination est élevée pendant des plaintes de latence, vous avez soit (a) besoin de plus de RAM, (b) une fuite mémoire, ou (c) un cache qui a grandi parce que votre jeu de travail s’est étendu. Validez avec les working sets des processus et la télémétrie applicative.

6) Latence disque et longueur de file (les ingénieurs stockage vivent ici)

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Read','\PhysicalDisk(_Total)\Avg. Disk sec/Write','\PhysicalDisk(_Total)\Current Disk Queue Length' -SampleInterval 2 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                                             CookedValue
----                                                             -----------
\\SERVER\physicaldisk(_total)\avg. disk sec/read                      0.045
\\SERVER\physicaldisk(_total)\avg. disk sec/write                     0.112
\\SERVER\physicaldisk(_total)\current disk queue length               23

Ce que ça signifie : 45ms en lecture et 112ms en écriture avec une file de 23, ce n’est pas « acceptable ». Pour beaucoup de charges serveur, vous visez des latences à un chiffre en millisecondes. Il y a des exceptions, mais elles doivent être intentionnelles.

Décision : Si latence et file sont élevées, identifiez le volume occupé, puis le processus chargé. Sur des VM, confirmez si c’est côté invité ou hôte. Ne poursuivez pas le CPU si le disque est en train de se noyer.

7) Qui martèle le disque ? (I/O par processus)

cr0x@server:~$ powershell -NoProfile -Command "Get-Process | Select-Object Name,Id,@{n='ReadMB';e={[math]::Round($_.IOReadBytes/1MB,1)}},@{n='WriteMB';e={[math]::Round($_.IOWriteBytes/1MB,1)}} | Sort-Object WriteMB -Descending | Select-Object -First 10 | Format-Table -Auto"
Name      Id ReadMB WriteMB
----      -- ------ -------
sqlservr 2440  5120.3  9032.8
backup   3112   120.1  2201.4
w3wp     4012   980.7   610.2

Ce que ça signifie : Ce sont des compteurs cumulés. Ils pointent rapidement vers les suspects habituels : moteurs de base de données, agents de sauvegarde, indexation, antivirus, logs devenus fous.

Décision : Si la sauvegarde ou l’AV domine pendant les heures ouvrées, corrigez la planification. Si les logs dominent, réduisez le niveau de log ou envoyez-les sur un autre volume.

8) Vérifier quels ports écoutent (la GUI n’est pas invitée)

cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen | Select-Object LocalAddress,LocalPort,OwningProcess | Sort-Object LocalPort | Select-Object -First 20 | Format-Table -Auto"
LocalAddress LocalPort OwningProcess
------------ --------- -------------
0.0.0.0      80        4012
0.0.0.0      135       968
0.0.0.0      443       4012
0.0.0.0      3389      1156

Ce que ça signifie : Cela répond à « qui écoute réellement », pas à « ce que nous pensons devoir tourner ». Associez-le ensuite aux noms de processus.

Décision : Si un port critique n’écoute pas, enquêtez sur le service/l’application. Si un port inattendu écoute, vous avez soit une dérive de configuration soit une compromission — prenez-le au sérieux.

9) Mapper les ports écoutés aux noms de processus (rendre actionnable)

cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen | ForEach-Object { $p=Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue; [pscustomobject]@{Port=$_.LocalPort; Process=$p.Name; PID=$_.OwningProcess; Address=$_.LocalAddress} } | Sort-Object Port | Format-Table -Auto"
Port Process PID  Address
---- ------- ---  -------
80   w3wp    4012 0.0.0.0
135  svchost 968  0.0.0.0
443  w3wp    4012 0.0.0.0
3389 TermService 1156 0.0.0.0

Ce que ça signifie : Maintenant « le port 443 est down » devient « w3wp n’est pas lancé », différence entre panique et réparation.

Décision : Si le PID n’est pas celui attendu, vérifiez la configuration du service, les bindings IIS ou les paramètres de lancement de l’application. Si c’est inconnu, n’en restez pas là — identifiez le chemin binaire.

10) Vérifier qu’un service Windows tourne (et pourquoi il ne tourne pas)

cr0x@server:~$ powershell -NoProfile -Command "Get-Service -Name 'Spooler','W32Time','WinRM' | Select-Object Name,Status,StartType | Format-Table -Auto"
Name    Status  StartType
----    ------  ---------
Spooler Running Automatic
W32Time Running Automatic
WinRM   Running Automatic

Ce que ça signifie : C’est de l’hygiène de base. Si WinRM est désactivé, votre journée d’opérations à distance devient une journée de voyage.

Décision : Si un service critique est arrêté, vérifiez les changements récents et les journaux système avant de le redémarrer. Les redémarrages à l’aveugle peuvent cacher des preuves et répéter les échecs.

11) Récupérer les 50 dernières erreurs système (Event Viewer est un labyrinthe)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='System'; Level=2} -MaxEvents 50 | Select-Object TimeCreated,Id,ProviderName,Message | Format-Table -Wrap"
TimeCreated           Id ProviderName           Message
-----------           -- ------------           -------
02/05/2026 09:14:02  11 Disk                   The driver detected a controller error on \Device\Harddisk2\DR2.
02/05/2026 09:11:47 7031 Service Control Manager The SQLAgent$INST service terminated unexpectedly...

Ce que ça signifie : Level=2 est « Error ». Vous cherchez des motifs : erreurs disque/contrôleur, crashes de services, échecs de synchronisation temporelle, resets réseau.

Décision : Les erreurs disque/contrôleur vous déplacent du débogage applicatif vers l’intégrité des données et le chemin matériel. Les crashes de services vous poussent à rechercher « qu’est-ce qui a changé » et les dumps.

12) Récupérer les erreurs applicatives pour un fournisseur spécifique (triage ciblé)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Application Error'} -MaxEvents 20 | Select-Object TimeCreated,Id,Message | Format-Table -Wrap"
TimeCreated           Id Message
-----------           -- -------
02/05/2026 09:12:10 1000 Faulting application name: w3wp.exe...

Ce que ça signifie : C’est le fil « pourquoi ça a planté ». Vous verrez les modules fautifs, les codes d’exception et les noms d’applications.

Décision : Si le même module plante après un patch ou un changement de config, restaurez ou mettez à jour. Si c’est aléatoire, suspectez corruption mémoire, drivers défectueux ou dépendances instables.

13) Vérifier les redémarrages récents et pourquoi (la vérité est dans les logs)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='System'; Id=1074} -MaxEvents 10 | Select-Object TimeCreated,Message | Format-Table -Wrap"
TimeCreated           Message
-----------           -------
02/04/2026 23:01:12  The process C:\Windows\System32\svchost.exe (SERVER) has initiated the restart...

Ce que ça signifie : L’ID d’événement 1074 enregistre souvent les redémarrages initiés par un utilisateur ou un processus et inclut la chaîne de raison si fournie.

Décision : Si les redémarrages sont inattendus, ne traitez plus l’uptime comme la météo. Lie les redémarrages aux fenêtres de patch, à l’automatisation ou aux opérateurs. Corrigez le processus, pas le symptôme.

14) Vérifier les mises à jour installées (niveau de patch sans cliquer)

cr0x@server:~$ powershell -NoProfile -Command "Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 HotFixID,InstalledOn,Description | Format-Table -Auto"
HotFixID  InstalledOn Description
-------   ----------- -----------
KB5034765 02/02/2026  Update
KB5034123 01/15/2026  Security Update

Ce que ça signifie : Confirmation rapide de la récence des patchs. Pas parfait (certains mécanismes d’update n’apparaissent pas proprement), mais bon premier passage.

Décision : Si un bug corrèle avec un KB récent, vous avez une hypothèse de rollback crédible. Si un serveur est à la traîne, cessez de prétendre qu’il est « stable » ; il est juste non patché.

15) Valider la résolution DNS et le type d’enregistrement (éviter le théâtre « le réseau est en panne »)

cr0x@server:~$ powershell -NoProfile -Command "Resolve-DnsName -Name 'app01.corp.local' -Type A | Select-Object Name,Type,IPAddress | Format-Table -Auto"
Name             Type IPAddress
----             ---- ---------
app01.corp.local A    10.40.12.21

Ce que ça signifie : Si cela échoue ou renvoie la mauvaise IP, la moitié de votre « panne applicative » est en réalité une résolution de noms.

Décision : Mauvaise IP signifie DNS obsolète ou enregistrement erroné ; corrigez les attentes de TTL, l’intégration DHCP/DNS ou les enregistrements manuels. Pas de réponse signifie investiguer les serveurs DNS, le forwarding ou le pare-feu.

16) Tester un service TCP de bout en bout (ping n’est pas un contrôle de santé)

cr0x@server:~$ powershell -NoProfile -Command "Test-NetConnection -ComputerName 'app01.corp.local' -Port 443 | Select-Object ComputerName,RemotePort,TcpTestSucceeded,SourceAddress | Format-List"
ComputerName     : app01.corp.local
RemotePort       : 443
TcpTestSucceeded : True
SourceAddress    : 10.40.10.55

Ce que ça signifie : Cela répond à « puis-je établir une connexion TCP d’ici vers là ». Ce n’est pas une validation des certificats TLS ou de la justesse applicative, mais ça réduit rapidement le périmètre.

Décision : Si TcpTestSucceeded est faux, vérifiez règles de firewall, routage, status du listener et load balancers. Si vrai, montez la pile : TLS, HTTP, auth, logs applicatifs.

17) Trouver les tâches planifiées échouées (les saboteurs silencieux)

cr0x@server:~$ powershell -NoProfile -Command "Get-ScheduledTask | Get-ScheduledTaskInfo | Where-Object {$_.LastTaskResult -ne 0} | Sort-Object LastRunTime -Descending | Select-Object -First 15 TaskName,LastRunTime,LastTaskResult | Format-Table -Auto"
TaskName                 LastRunTime           LastTaskResult
--------                 -----------           --------------
DailyLogRotate           02/05/2026 01:00:01   2147942401
BackupSnapshot           02/05/2026 02:00:03   1

Ce que ça signifie : Les résultats non nuls indiquent des échecs. Le code numérique correspond souvent à « fichier introuvable », « accès refusé », etc.

Décision : Si les tâches d’entretien échouent, attendez-vous à des incidents de disque plein et à une dégradation progressive par milliers de fichiers. Corrigez permissions, chemins et comptes de service avant le prochain pic.

18) Vérifier les partages SMB et qui est connecté (réalité du serveur de fichiers)

cr0x@server:~$ powershell -NoProfile -Command "Get-SmbShare | Select-Object Name,Path,Description | Format-Table -Auto"
Name        Path         Description
----        ----         -----------
Finance     D:\Finance   Finance share
Profiles    E:\Profiles  User profiles

cr0x@server:~$ powershell -NoProfile -Command "Get-SmbSession | Select-Object ClientComputerName,ClientUserName,NumOpens,Dialect | Sort-Object NumOpens -Descending | Select-Object -First 10 | Format-Table -Auto"
ClientComputerName ClientUserName     NumOpens Dialect
------------------ --------------     -------- -------
WS123              CORP\j.smith             42 3.1.1

Ce que ça signifie : Cela confirme « quelqu’un utilise le partage en ce moment » avant une maintenance, et aide à identifier un client provoquant des verrous excessifs.

Décision : Si un client a un nombre absurde d’ouvertures, enquêtez sur ce poste/application. Si vous devez redémarrer un partage, coordonnez-vous avec les utilisateurs plutôt que de saboter leur journée.

19) Contrôle des permissions : qui a accès à un dossier ?

cr0x@server:~$ powershell -NoProfile -Command "(Get-Acl 'D:\Finance').Access | Select-Object IdentityReference,FileSystemRights,AccessControlType,IsInherited | Format-Table -Auto"
IdentityReference     FileSystemRights               AccessControlType IsInherited
-----------------     ----------------               ----------------- -----------
CORP\Finance-Users    Modify, Synchronize            Allow             True
CORP\Domain Admins    FullControl                    Allow             True

Ce que ça signifie : Cela montre les entrées ACL effectives, y compris l’héritage. C’est la différence entre « ça devrait marcher » et « ça marche vraiment ».

Décision : Si l’accès manque, corrigez l’appartenance aux groupes ou l’héritage au bon niveau. Évitez les ACL one-off pour des utilisateurs à moins d’aimer l’archéologie future.

20) À distance : exécuter un contrôle de santé sur plusieurs serveurs (flotte, pas des animaux de compagnie)

cr0x@server:~$ powershell -NoProfile -Command "$servers='web01','web02','web03'; Invoke-Command -ComputerName $servers -ScriptBlock { [pscustomobject]@{ ComputerName=$env:COMPUTERNAME; UptimeDays=[math]::Round((New-TimeSpan -Start (Get-CimInstance Win32_OperatingSystem).LastBootUpTime -End (Get-Date)).TotalDays,1); FreeC=[math]::Round((Get-PSDrive C).Free/1GB,1) } } | Format-Table -Auto"
ComputerName UptimeDays FreeC
------------ --------- -----
WEB01            12.4  18.7
WEB02             2.1   6.3
WEB03            56.0  22.9

Ce que ça signifie : Une commande, trois machines, données cohérentes. Aussi : WEB02 a peu d’espace libre et a redémarré récemment. Cette corrélation est rarement accidentelle.

Décision : Priorisez l’outlier. Ne lissez pas les résultats jusqu’à l’endormissement. Corrigez WEB02 en premier, puis demandez-vous pourquoi il se comporte différemment.

Blague #2 : La GUI affiche « Non répond » comme si c’était une limite personnelle. Le serveur le dit parce qu’il est en feu.

Playbook de diagnostic rapide : quoi vérifier en premier/deuxième/troisième

Voici la séquence que j’utilise quand quelqu’un dit « l’app est lente » ou « le serveur meurt » et que le seul détail que vous avez est un nom d’hôte et de l’angoisse. L’objectif n’est pas de tout résoudre en 60 secondes ; l’objectif est de trouver la classe de goulot pour arrêter de deviner.

Premier : confirmer que la plainte est réelle et bien cadrée

  1. Côté client : pouvez-vous vous connecter au port du service ?
    cr0x@server:~$ powershell -NoProfile -Command "Test-NetConnection -ComputerName 'app01.corp.local' -Port 443 | Select-Object TcpTestSucceeded,RemoteAddress,RemotePort | Format-List"
    TcpTestSucceeded : True
    RemoteAddress    : 10.40.12.21
    RemotePort       : 443
    

    Interprétation : Si le TCP échoue, c’est réseau/listener/LB/sécurité. Si le TCP réussit, avancez vers l’intérieur.

  2. Sur le serveur : le port pertinent écoute-t-il et est-il possédé par le bon processus ?
    cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen -LocalPort 443 | ForEach-Object { $p=Get-Process -Id $_.OwningProcess; [pscustomobject]@{Port=$_.LocalPort; Process=$p.Name; PID=$p.Id} } | Format-Table -Auto"
    Port Process PID
    ---- ------- ---
    443  w3wp    4012
    

    Interprétation : Pas de listener signifie que l’app est arrêtée. Mauvais processus signifie mauvaise config ou pire.

Deuxième : classifier le goulot (CPU, mémoire, disque, réseau, ou « app »)

  1. Pression CPU : % processor time + file d’attente.
    cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Processor(_Total)\% Processor Time','\System\Processor Queue Length' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
    Path                                              CookedValue
    ----                                              -----------
    \\SERVER\processor(_total)\% processor time              91.33
    \\SERVER\system\processor queue length                    16
    

    Décision : Si le CPU est saturé avec file d’attente, identifiez le processus chaud et ce qui l’a déclenché (déploiement, job, scan, tempête de retries).

  2. Pression mémoire : available MB + pages/sec.
    cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Memory\Available MBytes','\Memory\Pages/sec' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
    Path                                  CookedValue
    ----                                  -----------
    \\SERVER\memory\available mbytes            190.00
    \\SERVER\memory\pages/sec                   120.00
    

    Décision : Si vous paginez beaucoup, attendez-vous à des latences partout. Capturez les données mémoire des processus ; envisagez un redémarrage contrôlé seulement après collecte des preuves.

  3. Pression disque : latence + file.
    cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Read','\PhysicalDisk(_Total)\Avg. Disk sec/Write','\PhysicalDisk(_Total)\Current Disk Queue Length' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
    Path                                                             CookedValue
    ----                                                             -----------
    \\SERVER\physicaldisk(_total)\avg. disk sec/read                      0.060
    \\SERVER\physicaldisk(_total)\avg. disk sec/write                     0.140
    \\SERVER\physicaldisk(_total)\current disk queue length               27
    

    Décision : Si le disque est mauvais, arrêtez de chercher des « requêtes lentes » tant que vous n’avez pas confirmé que le stockage n’est pas le limiteur. La latence en amont est souvent la conséquence en aval.

Troisième : décider « atténuer maintenant » versus « enquêter »

  • Atténuer maintenant quand l’impact utilisateur est sévère et que la correction est réversible : arrêter un job qui part en vrille, limiter une file, basculer, ajouter une capacité temporaire, déplacer des logs.
  • Enquêter d’abord quand l’action détruit des preuves : reboots, redémarrages de service, effacement de logs, suppression d’arbres temporaires sans snapshots.

Utilisez les commandes ci-dessus pour appuyer cette décision, puis notez ce que vous avez vu. Si vous ne pouvez pas expliquer votre chaîne d’actions plus tard, vous n’avez pas vraiment opéré — vous avez joué un rôle.

Trois mini-récits d’entreprise (ce qui a mal tourné, ce qui nous a sauvés)

Mini-récit 1 : l’incident causé par une mauvaise hypothèse

Nous avons hérité d’un serveur de fichiers Windows qui « n’avait jamais de problèmes ». La croyance partagée de l’équipe était que les alertes disque prendraient en charge tout ce qui est sérieux. Le monitoring a alerté — finalement. Le problème était l’hypothèse que « espace disque » signifiait « espace libre », et que c’était tout ce qui importait.

Un lundi matin, une vague de tickets est arrivée : profils itinérants qui échouent, traitement de stratégie de groupe lent, crashes aléatoires d’applications lors de connexions d’utilisateurs. L’astreinte a fait le classique : RDP, ouvrir l’Explorateur, voir que C: avait quelques GB libres, et déclarer « le disque n’est pas plein ». Puis ils ont redémarré quelques services. Ça donnait l’impression d’être productif. Ça n’a rien résolu.

Nous avons exécuté des one-liners : espace libre des volumes (plutôt ok), puis journaux d’événements (pas ok). Le journal Système montrait des erreurs disque/contrôleur et des avertissements NTFS. Le lecteur n’était pas plein ; il était malade. La latence grimpait, les écritures se bloquaient, et le serveur de fichiers faisait en quelque sorte de l’I/O au ralenti.

L’hypothèse erronée était subtile : « l’espace est le seul problème disque ». La santé d’un disque n’est pas une variable unique ; c’est la latence, la file d’attente, les taux d’erreur et la stabilité du chemin. Quand le stockage commence à échouer, Windows ne vous donne pas toujours une popup sympathique. Il vous donne des timeouts et un risque de corruption.

La correction n’a pas été un redémarrage héroïque. Nous avons basculé les charges, engagé l’équipe stockage, et remplacé un chemin HBA défectueux. La leçon est restée : les vérifications de capacité sont nécessaires ; les vérifications du comportement du disque préviennent les désastres.

Mini-récit 2 : l’optimisation qui s’est retournée

Un ingénieur bien intentionné voulait accélérer les recherches de logs. Il a activé le logging verbeux de l’application, puis écrit une tâche planifiée pour compresser les logs toutes les heures et les déplacer vers un partage central. Le plan semblait raisonnable : fichiers plus petits, dépannage centralisé, moins d’utilisation disque.

En production, c’est devenu une panne lente. Le job de compression lançait en même temps sur tous les serveurs, à l’heure pile. Le CPU a bondi, les écritures disque ont explosé, et le partage central a été submergé. Les performances metadata du partage se sont effondrées parce que des milliers de fichiers étaient créés, renommés et supprimés en rafales.

Les utilisateurs ne se plaignaient pas de la « compression des logs ». Ils se plaignaient que l’app « se fige toutes les heures pendant quelques minutes ». Ce symptôme prête facilement à une mauvaise analyse. Les gens ont blâmé les pauses GC, les verrous base de données, et le jitter réseau. Le vrai coupable était une « optimisation » qui créait de la contention synchronisée.

Nous l’avons prouvé avec deux vérifications rapides : longueur de file disque et I/O par processus. Le processus de compression n’était pas le premier consommateur CPU toute la journée, mais il dominait les écritures pendant la fenêtre de plainte. C’est le type de preuve qui met fin aux débats.

Nous avons corrigé en échelonnant les horaires avec du jitter, réduisant la verbosité, et modifiant le pipeline : compresser une fois par jour hors hôte, pas toutes les heures sur chaque nœud. Les optimisations qui ignorent les patterns de contention ne sont pas des optimisations ; ce sont des attaques par déni de service distribuées avec de meilleures intentions.

Mini-récit 3 : la pratique ennuyeuse mais correcte qui a sauvé la mise

Une autre équipe exécutait une petite pratique disciplinée : chaque matin, ils lançaient un court script « pulse serveur » sur leur flotte. Uptime, espace libre, date du dernier patch, et principales erreurs du journal Système. Ils ne le faisaient pas parce qu’ils adoraient les dashboards. Ils le faisaient parce qu’ils détestaient les surprises.

Un mardi, le pulse a signalé un serveur isolé avec une combinaison étrange : espace libre en chute sur E:, échecs de tâches planifiées, et avertissements répétés d’un agent de sauvegarde. Personne ne se plaignait encore. C’est le point clé : le système chuchotait avant de hurler.

Ils ont enquêté sur les échecs de tâches planifiées et découvert que la tâche de rotation des logs avait commencé à échouer après un changement de permissions. Les logs s’accumulaient, la sauvegarde échouait sur des répertoires de logs massifs, et le volume était projeté plein dans les 24 heures.

Ils ont corrigé l’ACL, exécuté la rotation manuellement une fois, et validé que la tâche planifiée réussissait. Le serveur n’a jamais atteint 0 octet libre, la sauvegarde a récupéré, et l’entreprise n’a rien remarqué.

Cela n’est pas sexy. Ça ne gagne pas de prix d’architecture. Ça fait gagner le sommeil de l’astreinte. La pratique ennuyeuse n’était pas le script ; c’était l’habitude de regarder les mêmes signaux chaque jour et de traiter les déviations comme réelles.

Erreurs courantes : symptômes → cause racine → correction

1) « Le serveur est lent » mais le CPU semble correct

Symptôme : L’utilisation CPU est modérée, pourtant les utilisateurs subissent des timeouts et des gels.

Cause racine : Latence disque/file d’attente ou pression de pagination mémoire. Le CPU attend, il ne travaille pas.

Correction : Vérifiez d’abord les compteurs disque et mémoire, pas les impressions de Task Manager.

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Read','\PhysicalDisk(_Total)\Current Disk Queue Length','\Memory\Pages/sec' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                                             CookedValue
----                                                             -----------
\\SERVER\physicaldisk(_total)\avg. disk sec/read                      0.080
\\SERVER\physicaldisk(_total)\current disk queue length               31
\\SERVER\memory\pages/sec                                            110

2) « Le port est ouvert » parce que le ping répond

Symptôme : Quelqu’un affirme que le service est joignable parce que l’ICMP répond.

Cause racine : Le ping teste l’ICMP, pas la disponibilité applicative. Pare-feux, load balancers et listeners se moquent de votre ping.

Correction : Testez le port TCP réel depuis le segment réseau réel du client.

cr0x@server:~$ powershell -NoProfile -Command "Test-NetConnection -ComputerName 'db01.corp.local' -Port 1433 | Select-Object TcpTestSucceeded,RemoteAddress,RemotePort | Format-List"
TcpTestSucceeded : False
RemoteAddress    : 10.40.20.10
RemotePort       : 1433

3) « Le service tourne » mais l’app est quand même down

Symptôme : Get-Service indique Running ; les utilisateurs ne peuvent toujours pas se connecter.

Cause racine : Le service est vivant mais n’écoute pas, est bloqué, ou lié à la mauvaise interface/port. Ou bien une dépendance (certificat, backend) est cassée.

Correction : Validez le listener et mappez-le au processus ; vérifiez les erreurs dans le journal Application.

cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen -LocalPort 443 | Measure-Object | Select-Object Count"
Count
-----
0

4) « On a nettoyé l’espace disque » et maintenant l’app ne démarre plus

Symptôme : Après suppression de « junk », les services échouent, les installateurs cassent, ou les patchs échouent.

Cause racine : Quelqu’un a supprimé des fichiers qui n’étaient pas du junk (cache d’installateur, état d’app, bases, sauvegardes de config IIS).

Correction : Soyez précis : identifiez la source de croissance, corrigez la rétention, et supprimez uniquement des cibles connues comme sûres. Si vous devez supprimer, faites un snapshot d’abord (snapshot VM ou copie shadow selon la politique).

5) Le remoting fonctionne sur certains serveurs mais pas d’autres

Symptôme : Invoke-Command échoue de façon intermittente sur une flotte.

Cause racine : WinRM désactivé, différences de firewall, erreurs de résolution DNS, ou configuration d’hôtes non approuvés.

Correction : Standardisez : assurez-vous que le service WinRM est en marche, que les règles firewall sont cohérentes, et que le DNS est correct. Évitez de mettre « TrustedHosts = * » comme pansement paresseux en production.

6) Le tri de la sortie semble incorrect

Symptôme : Vous triez par une colonne et l’ordre est absurde (ex. « 100 » avant « 9 »).

Cause racine : Vous avez formaté trop tôt ; vous avez transformé des objets en chaînes avec Format-Table avant de trier.

Correction : Triez les objets d’abord, formatez à la fin.

Listes de contrôle / plan étape par étape

Routine ops quotidienne de 10 minutes (faites-la, n’en débattez pas)

  1. Vérification d’espace : trouvez les volumes sous 15 % de libre ; créez un ticket avant que ce soit urgent.
  2. Scan d’erreurs : les 50 dernières erreurs Système ; identifiez les répétitions (disque, resets NIC, crashes de services).
  3. Sanity patch : confirmez les hotfix récents ; signalez les machines qui divergent.
  4. Échecs de tâches : tâches planifiées avec résultats non nuls ; corrigez les ennuyeuses en premier.
  5. Contrôle des outliers : exécutez le même one-liner sur la flotte et chassez le serveur étrange.

Checklist de réponse incident (premiers 15 minutes)

  1. Confirmer la joignabilité : Test-NetConnection vers le port du service depuis un segment réseau pertinent.
  2. Confirmer listener/process : Get-NetTCPConnection + mapping processus.
  3. Classer le goulot : file CPU, pagination mémoire, latence/queue disque.
  4. Capturer des preuves : top processes, slice du journal d’événements, échantillons de compteurs.
  5. Atténuer en sécurité : uniquement après pouvoir justifier l’action avec des données observées.

Checklist de vérification post-change (après déploiements/patchs)

  1. Confirmer l’état des services : services attendus en Running, bons types de démarrage.
  2. Confirmer les ports : ports attendus à l’écoute, possédés par les binaires attendus.
  3. Confirmer les logs : scanner Application et System pour les erreurs depuis le moment du déploiement.
  4. Confirmer les performances : comparer des snapshots de compteurs (latence, files) au baseline.

FAQ

1) Dois-je utiliser Windows PowerShell 5.1 ou PowerShell 7 ?

Utilisez 5.1 quand vous avez besoin de compatibilité maximale avec d’anciens modules sur Windows Server. Utilisez 7 quand vous contrôlez l’environnement et voulez des fonctionnalités modernes et la parité multiplateforme. Dans les entreprises mixtes, vous finirez par utiliser les deux.

2) Pourquoi continuer à utiliser les compteurs de performance plutôt que seulement les processus « top » ?

Parce que les compteurs vous disent la pression (files d’attente, latence, pagination) tandis que les listes de processus vous donnent l’attribution. Il faut les deux. Si vous regardez seulement les processus, vous pouvez manquer complètement la vraie classe de goulot.

3) Est-ce que Get-WmiObject est mort ?

Pas mort, juste legacy. Préférez Get-CimInstance pour les patterns de script récents, surtout avec le remoting. Mais en pratique vous verrez encore WMI partout, y compris dans des scripts fournisseurs.

4) Pourquoi certains compteurs affichent des nombres qui ne correspondent pas à ce que je vois dans le Gestionnaire des tâches ?

L’échantillonnage et les définitions diffèrent. Le Gestionnaire des tâches montre souvent des valeurs instantanées ou moyennées ; les compteurs peuvent être échantillonnés à des intervalles différents et représenter différents modèles de calcul. Rendre votre intervalle d’échantillonnage explicite et prenez plusieurs échantillons.

5) Puis-je exécuter ces one-liners sur des serveurs distants sans RDP ?

Oui, avec le remoting PowerShell (Invoke-Command) quand WinRM est configuré. Pour certains contrôles réseau vous pouvez aussi interroger depuis votre machine (ex. Test-NetConnection). Standardisez WinRM tôt ; ça rapporte chaque semaine.

6) Comment éviter les problèmes de « formatage trop tôt » ?

Règle : faites tout le filtrage/tri/groupement tant que le pipeline contient encore des objets, puis formatez à la fin. Si vous pipez vers Format-Table, vous mettez fin au flux de données.

7) Les one-liners sont-ils sûrs à coller en production ?

Les one-liners en lecture seule sont généralement sûrs. Tout ce qui supprime, arrête des services, redémarre ou change la config doit être promu en script avec journalisation et mode dry-run. Si vous ne savez pas expliquer son rayon d’impact, ne l’exécutez pas.

8) Quelle est la façon la plus rapide de détecter « ce serveur est différent » dans un cluster ?

Exécutez la même commande sur tous les nœuds et triez par la métrique qui vous importe (espace libre, uptime, nombre d’erreurs, valeurs de compteurs). Les outliers cachent la vérité.

9) Ma commande est lente (comme les vérifications de taille de répertoire). Que faire ?

N’utilisez les vérifications coûteuses que lorsque c’est nécessaire, et restreignez-les : chemins plus petits, moins de cibles récursives, ou exécutez-les hors heures. Pour la surveillance continue, instrumentez les logs et les quotas plutôt que de rescanner le système de fichiers à chaque fois.

Prochaines étapes pratiques

Faites ceci demain matin :

  1. Choisissez cinq serveurs que vous touchez chaque semaine. Exécutez le one-liner de flotte pour uptime et espace libre. Trouvez l’outlier et corrigez-le.
  2. Ajoutez un échantillon compteur de 2 minutes pour la file CPU, la pagination et la latence disque à vos notes d’incident standard. Cessez de diagnostiquer depuis des captures d’écran.
  3. Construisez (ou empruntez) un petit script « pulse check » à partir des commandes ci-dessus et exécutez-le quotidiennement. Le but n’est pas la perfection ; c’est de remarquer la dérive avant qu’elle ne devienne une panne.
  4. Quand vous avez besoin de la GUI, utilisez-la intentionnellement : pour la configuration profonde, pas pour la découverte panique.

Si vous voulez un test décisif pour savoir si votre pratique d’exploitation s’améliore : mesurez à quelle fréquence vous pouvez répondre « qu’est-ce qui a changé ? » avec des preuves en moins de cinq minutes. Les one-liners ne sont pas magiques. Ce sont du levier.

SR-IOV vs Passthrough : quand l’IOMMU aide (et quand il ne le fait pas)

Certains jours votre NIC « virtualisé » consomme 2 % de CPU et transmet 25 Gbps sans broncher. D’autres jours il perd des paquets sous charge, votre latence p99 ressemble à un sismographe, et quelqu’un suggère « activez SR-IOV » comme si c’était une panacée.

Voici la version adulte de cette conversation : ce que SR-IOV et le passthrough vous apportent réellement, ce que fait vraiment l’IOMMU, et les façons précises de détériorer les performances en se félicitant d’« aller plus près du matériel ».

Le modèle mental : PF, VFs, DMA, et pourquoi l’IOMMU existe

Définissons les termes comme votre noyau les comprend, pas comme les slides commerciales.

Passthrough (VFIO) en un paragraphe

Le passthrough PCI assigne une fonction PCIe entière à une VM (ou une charge de type conteneur) de sorte que le guest possède l’appareil. Sous Linux/KVM c’est typiquement VFIO : l’hôte attache le périphérique à vfio-pci, et QEMU le mappe dans le guest. Le périphérique effectue des DMA vers la mémoire du guest, et l’IOMMU (si activé) garantit que les DMA restent dans ce que le guest est autorisé à toucher.

SR-IOV en un paragraphe

SR-IOV divise une fonction PCIe physique (PF) en plusieurs fonctions légères (VFs). Chaque VF ressemble à un périphérique PCI distinct avec son propre espace de configuration, ses BARs et ses files (selon l’implémentation), vous permettant d’attribuer des VFs individuelles aux guests. La PF reste gérée par l’hôte (ou parfois par une « service VM »), et la VF est « majoritairement matérielle », avec des réglages de politique exposés via le pilote PF et le firmware.

Où s’insère le DMA, et pourquoi cela vous concerne

SR-IOV et le passthrough traitent d’une seule chose : qui est autorisé à effectuer des DMA, et combien il en coûte pour le faire en toute sécurité. Les périphériques n’« envoient pas de paquets » ; ils effectuent des DMA de descripteurs et de charges utiles vers/depuis la mémoire. Si un périphérique peut faire des DMA n’importe où, il peut lire vos secrets, corrompre votre noyau et transformer la fiabilité en danse interprétative.

C’est le rôle de l’IOMMU : traduire et contraindre les adresses DMA des périphériques, de la même manière que le MMU du CPU contraint la mémoire des processus. Sans IOMMU, les périphériques « assignés » peuvent encore DMA dans la mémoire hôte si vous vous plantez sur l’isolation. Avec l’IOMMU, vous payez un coût de traduction (parfois minime, parfois non), mais vous obtenez une vraie contention et des fonctionnalités comme le remappage d’interruptions.

Règle pratique : si vous faites du passthrough en production et que vous n’utilisez pas d’IOMMU, vous n’êtes pas « courageux », vous avez juste un modèle de menace différent de celui que vous croyez avoir.

Blague n°1 : L’IOMMU est comme le videur d’une boîte de nuit pour les DMA. Il n’empêche pas les mauvaises décisions à l’intérieur, mais il tient les inconnus à l’écart.

Ce que « performance » signifie réellement ici

On entend souvent « SR-IOV est plus rapide que virtio ». Parfois. Mais il faut préciser quel axe de performance :

  • Débit (Gbps ou IOPS) pour un budget CPU donné
  • Latence de queue (p99/p999), surtout sous contention
  • Jitter (variance), qui casse les applications pseudo-temps réel
  • Efficacité CPU (cycles par paquet/IO)
  • Performance opérationnelle (vitesse de diagnostic et de restauration de service)

SR-IOV et le passthrough peuvent être fantastiques pour le débit et l’efficacité CPU. Ils peuvent aussi aggraver la latence de queue si vous gérez mal les interruptions, ne pinnez rien et laissez l’ordonnanceur hôte improviser.

SR-IOV vs passthrough : les vrais compromis

Voici la version opinionnée :

  • Si vous avez besoin qu’une VM possède un périphérique de bout en bout (GPU, FPGA, HBA) : utilisez le passthrough. SR-IOV n’est pas toujours disponible, et même quand il l’est, la parité de fonctionnalités est étrange.
  • Si vous avez besoin que plusieurs guests atteignent des performances NIC proches du bare-metal : utilisez SR-IOV, mais considérez la gestion des VFs comme une composante de votre plateforme, pas comme un hobby par VM.
  • Si vous avez besoin de flexibilité (migration à chaud, snapshots, hôtes hétérogènes) : préférez virtio et acceptez le coût CPU, sauf si vous avez une raison prouvée de ne pas le faire.

Sécurité et isolation : ce n’est pas la même histoire

Avec le passthrough, le guest obtient l’appareil entier. C’est excellent pour les performances et l’accès aux fonctionnalités, et terrible pour le partage. L’isolation dépend fortement de la correction de l’IOMMU et du comportement du périphérique. Avec SR-IOV, vous partagez un périphérique physique entre locataires, et l’isolation dépend de l’implémentation des VFs par le NIC (séparation des files, limitation de débit, vérifications anti-spoof) ainsi que du pilote PF. Certaines VFs peuvent faire des choses qu’elles ne devraient pas si vous laissez des drapeaux de confiance activés.

Conseils pratiques :

  • SR-IOV multi-tenant est faisable, mais vous devez configurer explicitement la vérification anti-spoof des VF, l’application des VLANs et les réglages de trust sur la PF.
  • Passthrough pour des guests non fiables est fortement couplé à l’IOMMU et au remappage d’interruptions. Si l’un ou l’autre manque, vous acceptez un risque.

Opérations : SR-IOV gagne jusqu’à ce que ça n’aille plus

SR-IOV semble opérationnellement « simple » parce que vous pouvez distribuer des VFs comme des bonbons. Puis vous rencontrez la complexité cachée :

  • Provisioning des VFs et collecte des ordures après reboot
  • Incompatibilités firmware/driver qui ne se manifestent qu’avec certains comptes de files
  • Lacunes d’observabilité (les outils hôtes voient les stats PF ; le guest voit les stats VF ; personne ne voit « bout à bout »)
  • Steering des paquets et affinité IRQ devenant une exigence plateforme

Le passthrough est plus simple dans le sens où un guest possède l’appareil et vous debuggez une seule pile. Il est plus difficile dans le sens où vous perdez beaucoup de commodités de virtualisation (migration, snapshots, oversubscription) et vous pouvez briquer le réseau d’un hôte si vous passez la mauvaise chose.

Le secret embarrassant : les deux approches exigent quand même l’hygiène Linux ennuyeuse

Pinning CPU, alignement NUMA, affinité IRQ, dimensionnement des rings et décisions MTU sensées comptent toujours. SR-IOV ne vous sauve pas d’une VM exécutée sur le mauvais socket, et le passthrough ne vous sauve pas d’un driver invité configuré comme une expérience scientifique.

Quand l’IOMMU aide (et pourquoi)

1) Contention : l’isolation DMA est l’objectif principal

Sans IOMMU, un périphérique effectuant des DMA peut accéder à des adresses physiques dont vous n’avez pas prévu l’accès. En passthrough, cela peut signifier qu’un périphérique contrôlé par le guest (ou la programmation du périphérique depuis le guest) peut lire ou corrompre la mémoire hôte. Avec l’IOMMU, l’espace d’adresses DMA (IOVA) est traduit via des tables contrôlées par l’hôte.

Avec SR-IOV, les VFs effectuent aussi des DMA. Si vous assignez des VFs à des guests, vous voulez quand même l’IOMMU activé pour confiner les DMA des VFs à la mémoire du guest. Oui, le NIC est « virtualisé », mais il reste un périphérique effectuant des DMA.

2) Remappage d’interruptions : moins de façons de se planter

Les IOMMUs modernes peuvent aussi remapper les interruptions (MSI/MSI-X) pour empêcher un périphérique d’injecter des interruptions de manière erratique. Cela compte lorsque vous passez des périphériques aux guests. Sans remappage d’interruptions, vous pouvez être forcé dans des modes non sûrs, ou obtenir un comportement instable selon le support plateforme.

3) Vous pouvez activer des fonctionnalités sûres qui seraient autrement risquées

Si vous faites de l’assignation de périphériques à grande échelle, l’IOMMU est la couche qui permet de dire « ce périphérique touche seulement ce qu’il est censé toucher ». Il permet de faire du passthrough pour de vrais workloads, pas seulement des setups de labo.

4) Certains chemins de performance supposent sa présence

Contre-intuitif : parfois laisser l’IOMMU désactivé déclenche des repliements du noyau, désactive le remappage d’interruptions, ou force différentes stratégies de mapping DMA. Sur certaines plateformes, « IOMMU off » n’est pas « mode rapide », c’est « mode compatibilité ». Vous ne choisissez pas votre aventure ; votre carte mère l’a déjà choisie.

Quand l’IOMMU n’aide pas (et peut nuire)

Maintenant la partie que les gens n’aiment pas entendre : l’IOMMU n’est pas un interrupteur magique de performance. C’est une fonctionnalité de sécurité avec des implications sur les performances. Parfois ces implications sont négligeables. Parfois elles se manifestent dans votre p99.

1) Le réseau à haute fréquence de petits paquets peut amplifier le surcoût de traduction

Si votre workload consiste en paquets de 64 octets à très haut PPS, le coût de mapping/unmapping DMA, la pression sur la TLB de l’IOMMU et les misses IOTLB peuvent apparaître. Les bons pilotes amortissent les coûts de mapping (mappings longue durée, hugepages, batching). Les mauvais setups churnent les mappings et en payent le prix.

2) Hugepages mal configurées ou fragmentation mémoire empirent le problème

Si la mémoire du guest est fragmentée, l’IOMMU nécessite plus d’entrées de tables de pages, ce qui augmente la probabilité de misses IOTLB. Avec des hugepages (et un bon pinning), vous réduisez l’empreinte de traduction. C’est pourquoi « SR-IOV est plus lent que virtio » apparaît parfois : ce n’est pas SR-IOV ; c’est la stratégie de mapping et la disposition mémoire.

3) Vous pouvez perdre des fonctionnalités que vous croyiez disponibles

Certaines configurations activent l’IOMMU dans un mode qui casse ou désactive le DMA peer-to-peer (device-to-device), ou change le comportement d’ATS/PRI (quand présent). Pour les piles de stockage qui dépendent de certains patterns DMA, vous pouvez constater des régressions qui ressemblent à un « bug de driver » mais qui sont en réalité des changements de comportement de traduction.

4) Le débogage devient plus difficile car les modes de défaillance se multiplient

Quand l’IOMMU est impliqué, une défaillance peut être :

  • bug du driver invité
  • bug VFIO/QEMU sur l’hôte
  • bug/quirk de l’IOMMU plateforme
  • mismatch de paramètre BIOS
  • bizarreries d’ACS grouping
  • comportement du firmware sous charge

Blague n°2 : Activer l’IOMMU pour « réparer les performances » c’est comme acheter une clé dynamométrique pour réparer un pneu crevé. Outil utile, mauvais problème.

Faits intéressants et contexte historique

  • Les IOMMUs précèdent le battage cloud. Ils sont apparus sous diverses formes pour résoudre les limites d’adressage DMA et l’isolation bien avant que le « multi-tenant » ne devienne un argument produit.
  • L’adressage DMA était autrefois une vraie contrainte. Les premiers systèmes avaient des périphériques qui ne pouvaient DMA que dans des plages d’adresses limitées ; les IOMMUs remappaient les adresses visibles par le périphérique.
  • Intel VT-d et AMD-Vi ont rendu l’assignation de périphériques mainstream. Le remappage matériel des DMA est devenu une fonctionnalité standard pour les serveurs voulant une virtualisation sérieuse.
  • MSI-X a changé la donne pour les NICs haute performance. Les multiples vecteurs d’interruption ont permis des designs file-par-core, sur lesquels SR-IOV s’appuie fortement.
  • SR-IOV est une norme PCI-SIG. Ce n’est pas de la magie vendor ; les implémentations varient fortement en qualité et en options.
  • Les « groupes IOMMU » parlent des limites d’isolation. Le grouping reflète ce que le matériel peut isoler ; ce n’est pas une invention Linux, c’est Linux qui expose la réalité.
  • ACS est devenu le héros maladroit. Access Control Services influencent comment les périphériques sont isolés derrière des switches PCIe ; l’absence d’ACS peut forcer de larges groupes IOMMU.
  • Virtio a mûri parce que les opérations l’ont exigé. Virtio n’est pas juste une « émulation plus lente ». Il a évolué en une interface paravirtuelle robuste et débogable adaptée aux opérations cloud.
  • DPDK et le réseau en espace utilisateur ont élevé les attentes. Une fois que les gens ont vu le line rate en user space, ils ont exigé un comportement similaire dans les VMs, ce qui a poussé l’adoption de SR-IOV.

Méthode de diagnostic rapide

L’objectif est de trouver le goulot d’étranglement rapidement, pas de « tout comprendre du PCIe ». Vous pourrez faire cela plus tard.

Première étape : confirmez ce que vous avez réellement déployé

  1. Le workload utilise-t-il virtio, une VF SR-IOV, ou un périphérique en passthrough complet ?
  2. L’IOMMU est-elle activée et fonctionnelle (pas seulement « réglée dans le BIOS ») ?
  3. Les interruptions sont-elles remappées et MSI-X activé ?

Deuxième étape : localisez le domaine de contention

  1. Alignement NUMA : la VM est-elle sur le même socket que le périphérique PCIe ?
  2. Affinité IRQ : les interruptions sont-elles épinglées aux bons CPUs ?
  3. Nombre de files : avez-vous assez de files, ou trop ?

Troisième étape : décidez si vous êtes lié par le CPU, les IRQ, ou DMA/IOMMU

  1. Si le CPU est saturé en softirq/ksoftirqd : c’est le traitement des paquets et l’interruption/steering.
  2. Si le CPU est correct mais que le p99 est mauvais : regardez la migration des IRQ, les états de puissance, et le churn IOTLB.
  3. Si le débit est plafonné de façon suspecte : vérifiez la vitesse/largeur du lien, le PCIe négocié, et les offloads.

Quatrième étape : prouvez-le avec une expérience ciblée

  • Pinnez les vCPUs et la mémoire sur le nœud NUMA du périphérique, retestez.
  • Changez l’affinité IRQ pour les files VF, retestez.
  • Basculez hugepages on/off (ou 2M vs 1G) sur un hôte, retestez.

Ne changez pas cinq variables et proclamez la victoire. C’est ainsi qu’on crée du folklore.

Tâches pratiques : commandes, sorties et décisions

Voici les contrôles que j’exécute réellement quand quelqu’un dit « SR-IOV est lent » ou « le passthrough est instable ». Chaque tâche inclut la décision que vous prenez à partir de la sortie.

Tâche 1 : Confirmer que l’IOMMU est activée dans le noyau

cr0x@server:~$ dmesg | egrep -i 'iommu|vt-d|amd-vi|dmari' | head -n 25
[    0.142311] DMAR: IOMMU enabled
[    0.142355] DMAR: Host address width 46
[    0.142360] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[    0.381200] DMAR-IR: Enabled IRQ remapping in x2apic mode

Ce que cela signifie : Vous avez le remappage DMA (DMAR: IOMMU enabled) et le remappage d’interruptions (DMAR-IR).

Décision : Si vous ne voyez pas ces lignes, ne prétendez pas que l’isolation passthrough existe. Corrigez le BIOS/args du noyau avant de diagnostiquer les performances.

Tâche 2 : Vérifier la ligne de commande du noyau pour le mode IOMMU et les pièges courants

cr0x@server:~$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-6.8.0 root=/dev/mapper/vg0-root ro quiet intel_iommu=on iommu=pt mitigations=auto

Ce que cela signifie : intel_iommu=on l’active ; iommu=pt utilise des mappings passthrough pour les périphériques hôtes (réduit souvent le surcoût pour les périphériques non assignés).

Décision : Pour des workloads mixtes, iommu=pt est généralement sensé. Si vous déboguez l’isolation, vous pouvez temporairement l’enlever pour vérifier si le comportement change — mais documentez pourquoi.

Tâche 3 : Identifier si vous utilisez des VFs SR-IOV ou des périphériques complets

cr0x@server:~$ lspci -D | egrep -i 'ethernet|network' | head
0000:3b:00.0 Ethernet controller: Intel Corporation Ethernet Controller XXV710 for 25GbE SFP28
0000:3b:02.0 Ethernet controller: Intel Corporation Ethernet Virtual Function
0000:3b:02.1 Ethernet controller: Intel Corporation Ethernet Virtual Function

Ce que cela signifie : La PF est 3b:00.0, et des VFs existent en 3b:02.x.

Décision : Si vous attendez SR-IOV mais ne voyez que des PFs, vous n’utilisez pas SR-IOV ; vous déboguez la mauvaise chose.

Tâche 4 : Confirmer le nombre de VFs créées sur la PF

cr0x@server:~$ sudo cat /sys/class/net/enp59s0f0/device/sriov_numvfs
8

Ce que cela signifie : La PF a 8 VFs actuellement activées.

Décision : Si c’est 0, il n’y a pas de VFs. Si c’est plus que prévu, vous pouvez épuiser les ressources PF (files, TCAM, interruptions). Réduisez le nombre de VFs et retestez la stabilité.

Tâche 5 : Vérifier les groupes IOMMU pour les frontières d’isolation

cr0x@server:~$ for g in /sys/kernel/iommu_groups/*; do echo "Group $(basename $g):"; ls -1 $g/devices; done | sed -n '1,40p'
Group 12:
0000:3b:00.0
0000:3b:00.1
Group 13:
0000:3b:02.0
0000:3b:02.1

Ce que cela signifie : Les périphériques dans le même groupe ne peuvent pas être isolés en toute sécurité par la plateforme.

Décision : Si votre périphérique cible partage un groupe avec quelque chose que vous ne pouvez pas passer (comme un contrôleur de stockage), n’utilisez pas le passthrough sur ce design d’hôte. Corrigez la topologie PCIe ou acceptez virtio.

Tâche 6 : Vérifier quel pilote est lié (côté hôte)

cr0x@server:~$ lspci -nnk -s 0000:3b:02.0
3b:02.0 Ethernet controller [0200]: Intel Corporation Ethernet Virtual Function [8086:154c]
	Subsystem: Intel Corporation Device [8086:0000]
	Kernel driver in use: vfio-pci
	Kernel modules: iavf

Ce que cela signifie : La VF est liée à VFIO pour le passthrough ; le module natif VF existe mais n’est pas actif sur l’hôte.

Décision : Si vous attendiez un réseau hôte via la VF, voir vfio-pci est correct. Si vous attendiez que l’hôte l’utilise, c’est une mauvaise configuration.

Tâche 7 : Vérifier que la VM a bien le périphérique attaché (QEMU/libvirt)

cr0x@server:~$ sudo virsh domiflist vm-netperf-01
Interface  Type     Source     Model   MAC
-------------------------------------------------------
vnet0      bridge   br0        virtio  52:54:00:aa:bb:cc

Ce que cela signifie : Cette VM utilise encore virtio sur un bridge, pas une VF SR-IOV en passthrough.

Décision : Arrêtez de débattre du tuning SR-IOV. Attachez d’abord le périphérique VF et confirmez les changements du driver en guest.

Tâche 8 : Vérifier la vitesse/largeur de lien PCIe négociée (cap fréquente silencieuse)

cr0x@server:~$ sudo lspci -s 3b:00.0 -vv | egrep -i 'LnkSta:|LnkCap:' | head -n 4
LnkCap:	Port #0, Speed 8GT/s, Width x8
LnkSta:	Speed 8GT/s, Width x4

Ce que cela signifie : La carte supporte x8 mais fonctionne en x4. C’est un problème physique/topologie/BIOS, pas un problème de driver.

Décision : Si les plafonds de débit correspondent aux limites x4, déplacez la carte, changez le riser ou corrigez la bifurcation des lanes BIOS. Ne tunez pas les files pour résoudre des lanes manquantes.

Tâche 9 : Vérifier la localité NUMA du périphérique PCI

cr0x@server:~$ cat /sys/bus/pci/devices/0000:3b:00.0/numa_node
1

Ce que cela signifie : Le périphérique est attaché au nœud NUMA 1.

Décision : Placez les vCPUs et la mémoire de la VM sur le nœud 1. Si vous ne pouvez pas, acceptez une latence plus élevée et un débit inférieur, ou déplacez le périphérique sur l’autre socket.

Tâche 10 : Trouver les IRQ des files VF et voir où elles tombent

cr0x@server:~$ grep -E 'enp59s0f0v0|iavf|vfio|msi' /proc/interrupts | head -n 8
 178:     120433          0          0          0  IR-PCI-MSI 524288-edge      vfio-msi[0]
 179:     118901          0          0          0  IR-PCI-MSI 524289-edge      vfio-msi[1]
 180:     119552          0          0          0  IR-PCI-MSI 524290-edge      vfio-msi[2]

Ce que cela signifie : Toutes les interruptions touchent le CPU0 (première colonne) parce que l’affinité n’est pas configurée, ou irqbalance a fait un choix « créatif ».

Décision : Épinglez les IRQs sur des CPUs locaux au NIC, et idéalement répartissez les files sur des cores isolés. Puis retestez la latence p99.

Tâche 11 : Vérifier le statut d’irqbalance (il peut aider ou nuire)

cr0x@server:~$ systemctl status irqbalance --no-pager
● irqbalance.service - irqbalance daemon
     Loaded: loaded (/lib/systemd/system/irqbalance.service; enabled)
     Active: active (running) since Mon 2026-02-02 09:14:12 UTC; 1 day ago

Ce que cela signifie : irqbalance tourne et peut déplacer dynamiquement les IRQs.

Décision : Pour les workloads sensibles à la latence SR-IOV/passthrough, envisagez de désactiver irqbalance et de définir explicitement l’affinité — surtout sur des hôtes avec isolation CPU.

Tâche 12 : Vérifier la configuration hugepages (hôte)

cr0x@server:~$ grep -i huge /proc/meminfo | head -n 6
HugePages_Total:    2048
HugePages_Free:     1980
HugePages_Rsvd:       12
Hugepagesize:       2048 kB
Hugetlb:         4194304 kB

Ce que cela signifie : Des hugepages 2M sont disponibles et majoritairement libres.

Décision : Si vous chassez le surcoût IOMMU/IOTLB, les hugepages sont un levier. Si HugePages_Free est bas, vous pourriez fragmenter ou fuir des réservations ; corrigez avant de blâmer SR-IOV.

Tâche 13 : Vérifier si la VM utilise des hugepages (libvirt)

cr0x@server:~$ sudo virsh dumpxml vm-netperf-01 | egrep -n 'memoryBacking|hugepages|locked'
112:  
113:    
114:    
115:  

Ce que cela signifie : La mémoire VM est backed par des hugepages et verouillée (réduit le churn de pages et les surprises).

Décision : Si vous utilisez SR-IOV/passthrough et tenez à la latence de queue, c’est généralement utile. Si vous ne pouvez pas lock la mémoire, attendez-vous à de la variabilité sous pression hôte.

Tâche 14 : Vérifier les fautes IOMMU (vous seriez étonné)

cr0x@server:~$ dmesg | egrep -i 'DMAR:.*fault|IOMMU.*fault|AMD-Vi:.*Event' | tail -n 10
[12345.671234] DMAR: [DMA Read] Request device [3b:02.0] fault addr 0x7f3a1000 [fault reason 0x05] PTE Read access is not set

Ce que cela signifie : Le périphérique a tenté un DMA en dehors des mappings autorisés, ou des mappings sont démontés incorrectement.

Décision : Stop. Ce n’est pas un problème de tuning ; c’est un problème de correction. Vérifiez les versions VFIO/QEMU, bugs de drivers, et si vous débranchez des périphériques à chaud de façon non sûre.

Tâche 15 : Vérifier les offloads NIC dans le guest (les VFs SR-IOV varient)

cr0x@server:~$ sudo ethtool -k ens5 | egrep -i 'rx-checksumming|tx-checksumming|tso|gso|gro|lro'
rx-checksumming: on
tx-checksumming: on
tcp-segmentation-offload: on
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off

Ce que cela signifie : Les offloads sont activés comme attendu ; LRO est off (souvent bon pour la latence/observabilité).

Décision : Si des offloads sont inattendument désactivés, vous paierez en CPU. S’ils sont activés mais que vous voyez des traces de paquets étranges, envisagez de désactiver GRO pour le diagnostic — pas comme « fix » permanent.

Tâche 16 : Vérifier l’anti-spoofing et les réglages de trust des VF sur la PF (hôte)

cr0x@server:~$ sudo ip link show enp59s0f0
2: enp59s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 3c:fd:fe:aa:bb:cc brd ff:ff:ff:ff:ff:ff
cr0x@server:~$ sudo ip link show enp59s0f0 vf 0
vf 0 MAC 52:54:00:11:22:33, vlan 100, spoof checking on, link-state auto, trust off, query_rss on

Ce que cela signifie : La VF a VLAN appliqué, spoof checking activé, trust off. C’est un bon défaut pour des environnements partagés.

Décision : Si trust on apparaît « parce que ça a corrigé quelque chose », exigez une raison concrète et ajoutez des contrôles compensatoires. Le trust a tendance à se propager comme de la moisissure.

Tâche 17 : Confirmer le gouverneur de fréquence CPU/état d’alimentation (cause fréquente de tail latency)

cr0x@server:~$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
powersave

Ce que cela signifie : Le CPU peut se déclock agressivement, nuisant à la latence p99.

Décision : Pour des hôtes dataplane haute performance, utilisez le gouverneur performance ou un tuning plateforme adapté. Si vous ne pouvez pas, cessez d’espérer une latence déterministe.

Tâche 18 : Vérifier la pression softirq (santé du dataplane réseau)

cr0x@server:~$ mpstat -P ALL 1 3
Linux 6.8.0 (server)  02/04/2026  _x86_64_  (32 CPU)

02:11:01 PM  CPU   %usr %nice %sys %iowait %irq %soft %steal %idle
02:11:02 PM  all   12.5  0.0   9.8    0.0   2.1  18.7    0.0   56.9

Ce que cela signifie : Un %soft élevé suggère que le traitement softirq est lourd ; commun dans les workloads à fort trafic de paquets.

Décision : Ajoutez des files/cores, améliorez l’affinité IRQ/RPS/XPS, ou migrez vers SR-IOV/DPDK si virtio est le goulot. Si vous êtes déjà sur SR-IOV, cela pointe vers le steering et le placement CPU.

Trois mini-récits d’entreprise depuis le terrain

Mini-récit 1 : L’incident causé par une fausse hypothèse

Ils déployaient le passthrough NIC pour un service sensible à la latence. Le pitch était propre : « supprimez le switch virtuel, réduisez l’overhead, baissez le p99 ». L’hôte de test allait bien. Le canari allait bien. Puis la production a… été hantée.

Un cluster a commencé à redémarrer sous charge. Pas tous les nœuds. Seulement ceux d’une rangée de rack particulière. Les logs montraient des faults DMA sporadiques et parfois un lockup brutal sans panic noyau propre. L’équipe a d’abord pensé au classique : « bug de driver ». Ils ont mis à jour les drivers invités. Ils ont mis à jour QEMU. Ils ont désactivé des offloads. Les hantises ont continué.

L’hypothèse erronée était que « IOMMU activée dans le BIOS » signifiait « IOMMU fonctionne réellement de bout en bout ». Sur les nœuds affectés, le réglage BIOS était présent mais la plateforme était livrée avec le remappage d’interruptions désactivé à cause d’un firmware ancien. Linux a activé le remappage DMA mais n’a pas pu activer proprement le remappage d’interruptions sur cette révision matérielle.

Ils passaient un périphérique qui spammait des interruptions MSI-X sous charge maximale, et sans garanties de remappage correctes, la plateforme se comportait de façon imprévisible. Ce n’était pas que l’IOMMU « était off » ; c’était qu’une tranche critique n’était pas fiable.

La correction a été ennuyeuse : standardiser les profils BIOS, ajouter un gate au démarrage qui échoue le nœud si DMAR-IR n’est pas activé, et refuser la programmation de passthrough sur ces hôtes. Les performances se sont améliorées plus tard, mais l’incident a fini parce qu’ils ont cessé de se mentir sur les capacités de la plateforme.

Mini-récit 2 : L’optimisation qui s’est retournée contre eux

Une autre entreprise utilisait des VFs SR-IOV pour des workloads haut débit. Quelqu’un a remarqué que le surcoût de traduction IOMMU pouvait contribuer au coût CPU à des PPS extrêmes. Ils ont trouvé iommu=pt et décidé de « optimiser » encore : désactiver l’IOMMU pour l’hôte, parce que « les guests n’ont que des VFs et le NIC les isole de toute façon ».

Au début ça semblait gagnant. Les microbenchmarks s’amélioraient légèrement, et les graphes CPU semblaient plus propres. Puis le vrai workload a frappé : corruption de données sporadique dans un service soutenu par du stockage qui utilisait aussi un autre périphérique en passthrough sur certains nœuds. Pas partout — seulement lorsque l’ordonnancement alignait une combinaison particulière d’assignation de périphérique et de pression mémoire.

Sans IOMMU, un périphérique défaillant (ou une interaction buggy) pouvait DMA dans une mémoire qu’il ne devait pas toucher. La corruption n’était pas bruyante. Elle était subtile : erreurs de checksum rares, crashes de processus occasionnels, transitions d’état « impossibles ». Le pire type d’incident : celui qui fait douter votre équipe des lois de la physique.

Ils ont reverté le changement et la corruption a cessé. Le postmortem n’a pas été indulgent : l’optimisation chassait un surcoût théorique tout en supprimant la barrière de sécurité. Le coût du « gain » a été des jours de réponse à incident, revues de risque, et une nouvelle politique : l’IOMMU reste activé ; si la performance est un problème, corrigez la stratégie de mapping (hugepages, pinning) ou changez le design dataplane.

Mini-récit 3 : La pratique ennuyeuse mais correcte qui a sauvé la mise

Une équipe plateforme gérait une flotte mixte : des hôtes pour virtualisation générique (virtio partout), et une plus petite piscine pour SR-IOV haute performance et passthrough GPU occasionnel. Ils avaient la réputation d’être irritablement stricts sur les profils d’hôte.

À chaque démarrage ils exécutaient une checklist : valider IOMMU activé, valider remappage d’interruptions, valider largeur de lien NIC, valider versions firmware contre une allowlist, valider comptes de VF, valider contraintes NUMA. Si un contrôle échouait, le nœud était drainé automatiquement. Pas d’héroïsme. Pas de négociation.

Un jour, une série de serveurs est arrivée avec une différence subtile de topologie PCIe. Le NIC a négocié x4 au lieu de x8 dans une configuration de slot. Rien n’« a cassé ». Aucun alert du driver NIC. Les applications sont simplement devenues plus lentes d’une manière qui ressemblait à un « pic de trafic ».

Le gate de boot l’a détecté : LnkSta ne correspondait pas aux attentes. Les nœuds n’ont jamais rejoint la piscine SR-IOV. Les workloads sont restés sur des hôtes sains, et le seul « incident » a été un ticket ops pour déplacer les cartes dans les bons slots.

La pratique qui les a sauvés n’était pas un tweak kernel clever. C’était le refus d’accepter une dégradation silencieuse. Le reliability engineering consiste surtout à décider ce que vous ne tolérerez pas.

Erreurs courantes : symptômes → cause racine → correction

1) Symptôme : « Le passthrough est activé, mais les performances sont pires que virtio »

Cause racine : La VM est en remote-NUMA par rapport au périphérique ; les interruptions tombent sur les mauvais CPUs ; mémoire non pinée ; churn IOTLB dû à mémoire fragmentée.

Correction : Alignez vCPUs et mémoire sur le nœud NUMA du NIC, activez hugepages + mémoire verouillée, définissez l’affinité IRQ, adaptez le nombre de files aux cœurs.

2) Symptôme : « La VF SR-IOV perd le lien ou se bloque aléatoirement sous charge »

Cause racine : Bug du pilote PF/firmware déclenché par le compte de VFs, le nombre de files, ou une combinaison d’offloads ; parfois aggravé par des resets.

Correction : Mettez à jour le firmware NIC + le pilote PF ; réduisez VFs/files ; évitez des combos d’offloads exotiques ; ajoutez des health checks recréant les VFs en cas d’échec.

3) Symptôme : « VFIO attach échoue : device busy / can’t reset »

Cause racine : Le périphérique est lié au driver hôte ou fait partie d’un groupe avec d’autres fonctions en usage ; limitations FLR/reset.

Correction : Désassociez proprement, assurez l’isolation par groupe IOMMU, évitez de passer des périphériques sans sémantique de reset fiable, ou utilisez SR-IOV à la place.

4) Symptôme : « Les groupes IOMMU sont énormes ; impossible d’isoler le NIC »

Cause racine : La topologie PCIe manque d’ACS, ou les périphériques partagent des composants en amont qui ne peuvent pas appliquer l’isolation.

Correction : Changez l’emplacement/la topologie du slot, utilisez des hôtes avec des switches ACS-capables, ou cessez d’essayer le passthrough sûr sur cette plateforme.

5) Symptôme : « Latence p99 élevée seulement lors de la contention hôte »

Cause racine : Fréquence CPU variable, migration d’IRQ, reclaim mémoire, ou voisins bruyants sur le même socket.

Correction : Isolation CPU pour cœurs dataplane, gouverneur performance, désactiver irqbalance (ou le configurer), réserver hugepages, verrouiller la mémoire, définir des politiques NUMA réelles.

6) Symptôme : « Des paquets sont perdus dans le guest, l’hôte a l’air OK »

Cause racine : Famine des files VF, tailles de ring insuffisantes, modulation d’interruption trop agressive, ou driver invité mal réglé.

Correction : Augmentez les tailles de ring, ajustez la coalescence, assurez MSI-X, assurez assez de files, pinnez les vCPUs, et validez la version du driver invité.

7) Symptôme : « L’équipe sécurité dit que SR-IOV est dangereux »

Cause racine : Politiques VF trust/spoof/VLAN laissées permissives ; mauvaise compréhension du risque lié au matériel partagé.

Correction : Appliquez les politiques VF sur la PF, restreignez les fonctionnalités par locataire, auditez l’assignation de périphériques, assurez l’IOMMU activé, documentez le modèle de menace.

Checklists / plans pas à pas

Checklist A : Choisir SR-IOV vs passthrough (décision, pas impressions)

  1. Besoin de partage de périphérique entre plusieurs guests ? SR-IOV. Si le périphérique ne supporte pas bien SR-IOV, reconsidérez le matériel.
  2. Besoin des fonctionnalités complètes du périphérique (GPU, modes avancés HBA, outils vendor) ? Passthrough.
  3. Besoin de migration à chaud/snapshots ? Préférez virtio. SR-IOV/passthrough compliquent ou bloquent cela.
  4. Tolérance au risque multi-tenant faible ? Passthrough avec IOMMU et contrôles plateforme stricts, ou évitez totalement l’assignation de périphérique.
  5. Maturité ops : Si vous ne pouvez pas standardiser BIOS/firmware/versions noyau, ne faites pas d’assignation de périphérique à grande échelle.

Checklist B : Plan de déploiement SR-IOV (ordre des opérations)

  1. Standardiser les réglages BIOS (VT-d/AMD-Vi on, SR-IOV on, réglages PCIe cohérents).
  2. Standardiser la cmdline noyau et valider via des gates dmesg.
  3. Choisir un nombre de VFs par PF basé sur les limites hardware et les besoins en files (ne pas tout mettre par défaut au max).
  4. Définir la politique VF : spoof checking on, trust off par défaut, politique VLAN explicite.
  5. Définir une politique de placement NUMA pour les hôtes SR-IOV et l’appliquer via l’ordonnanceur.
  6. Implémenter une stratégie d’affinité IRQ ; ne comptez pas sur la chance.
  7. Canary sous vrais motifs de trafic (PPS + tailles de paquets + nombre de flux).
  8. Observer p99/p999, drops, resets, et fautes IOMMU ; avancer seulement quand c’est ennuyeux.

Checklist C : Plan de déploiement Passthrough (ne pas cramer votre hôte)

  1. Vérifier que l’IOMMU et le remappage d’interruptions sont activés et stables sur reboots.
  2. Vérifier les groupes IOMMU et assurer que le périphérique peut être isolé.
  3. Vérifier le support de reset du périphérique (FLR ou comportement vendor) fonctionne de façon fiable.
  4. Binder le périphérique à vfio-pci et confirmer que les services hôtes n’en auront pas besoin.
  5. Pinnez vCPUs et mémoire de la VM sur le nœud NUMA du périphérique ; utilisez des hugepages si la gigue vous concerne.
  6. Instrumenter : collecter les fautes IOMMU dans dmesg, erreurs PCIe AER, et métriques de distribution d’interruptions.
  7. Avoir un rollback : détacher le périphérique, le rebinder au driver hôte, restaurer les chemins réseau/stockage.

FAQ

1) SR-IOV est-il toujours plus rapide que virtio ?

Non. SR-IOV réduit souvent le CPU par paquet et améliore le débit, mais peut perdre sur la latence de queue si IRQ/NUMA/mapping mémoire sont négligés. Virtio peut être « assez rapide » et bien plus simple à exploiter.

2) Le passthrough est-il toujours l’option la plus rapide ?

Souvent pour la possession d’un périphérique par un seul locataire, oui. Mais « le plus rapide » dépend du placement et du traitement des interruptions. Un périphérique passthrough en remote-NUMA peut être plus lent qu’un chemin virtio bien tuné.

3) Ai-je besoin d’IOMMU pour SR-IOV ?

Si vous assignez des VFs aux guests, vous voulez l’IOMMU pour l’isolation DMA. Si tout reste sur l’hôte, c’est moins une question d’isolation — mais de nombreuses plateformes se comportent mieux avec une configuration IOMMU cohérente.

4) Que fait iommu=pt exactement ?

Il met typiquement en place des mappings identité/pass-through pour les périphériques hôtes afin qu’ils ne paient pas le surcoût de traduction, tout en permettant des mappings traduits pour les périphériques assignés. C’est un compromis courant entre performance et sécurité.

5) Pourquoi mes groupes IOMMU sont-ils « trop grands » ?

Parce que votre matériel ne peut pas isoler ces périphériques les uns des autres. La topologie PCIe et le support ACS déterminent le grouping. Linux rapporte la frontière qu’il peut faire confiance, pas celle que vous souhaiteriez avoir.

6) Puis-je migrer à chaud une VM utilisant SR-IOV ou passthrough ?

Pas de la façon habituelle « ça marche tout seul ». L’assignation de périphérique lie la VM à un état matériel spécifique. Certains écosystèmes ont des approches spécialisées de migration, mais traitez cela comme un projet spécial, pas une case à cocher.

7) Quelle est la cause principale des rapports « SR-IOV est instable » ?

Incompatibilité firmware/driver et sur-allocation des ressources sur le NIC (trop de VFs, trop de files, réglages trop agressifs). La deuxième cause est opérationnelle : VFs non recréées correctement après reboot ou événements de lien.

8) L’IOMMU ajoute-t-il une latence mesurable ?

Oui, potentiellement, surtout quand les mappings churnent ou que les misses IOTLB augmentent. Avec mémoire pinnée, hugepages et mappings stables, le surcoût est souvent faible comparé au reste du dataplane.

9) Dois-je désactiver irqbalance sur les hôtes SR-IOV/passthrough ?

Pour les workloads sensibles à la latence, oui — sauf si vous avez explicitement configuré irqbalance pour respecter l’isolation et la localité. La migration dynamique d’IRQ et la p99 déterministe ne sont pas amis.

10) Quelle est l’architecture « safe default » la plus simple ?

Virtio pour le calcul général, une piscine SR-IOV séparée pour les workloads performance, et passthrough uniquement pour les périphériques nécessitant vraiment une pleine possession. Gardez des profils hôtes stricts et validés.

Étapes pratiques suivantes

Décidez en fonction de votre réalité opérationnelle, pas de la capture d’écran d’un benchmark.

  1. Choisissez une base : Si vous êtes actuellement sur virtio, rectifiez d’abord l’hygiène NUMA/IRQ. Sinon vous ne saurez pas ce que SR-IOV a amélioré.
  2. Activez correctement l’IOMMU : Confirmez le remappage DMA et le remappage d’interruptions dans dmesg. Gatez votre flotte là-dessus.
  3. Choisissez le bon modèle : SR-IOV pour l’accélération NIC partagée, passthrough pour la possession de périphérique mono-locataire, virtio pour la flexibilité.
  4. Opérationnalisez : Standardisez firmware, BIOS, args noyau, comptes de VF et politique de sécurité VF. Automatisez les contrôles ; drenez en cas de mismatch.
  5. Mesurez ce qui compte : Suivez la latence p99/p999 et les pertes, pas seulement le débit moyen. La plupart des incidents vivent dans les queues.

Une citation à garder sur un post-it, parce qu’elle résume le travail : « L’espoir n’est pas une stratégie. » — General Gordon R. Sullivan

Cluster Proxmox : pourquoi Corosync semble sain alors que votre cluster meurt

Vous ouvrez l’interface Proxmox et elle rame. Les migrations s’interrompent. La HA oscille. Les VM tournent—jusqu’à ce qu’elles ne tournent plus.
Ensuite vous vérifiez l’évidence : le quorum Corosync. Il indique que tout va bien.

C’est le piège. Corosync peut être « correct » au sens étroit—adhésion et quorum intacts—alors que
le reste du cluster suffoque à cause de la latence, de la contention sur le système de fichiers, de blocages de stockage ou de dérive temporelle.
Corosync est le pouls. Votre cluster peut pourtant perdre du sang.

Ce qu’est (et n’est pas) Corosync

Corosync fournit l’adhésion au cluster et la messagerie. Dans Proxmox VE, c’est le composant qui décide
qui fait partie du groupe et si le groupe a le quorum. Il ne garantit pas que votre plan de gestion
soit réactif, que votre stockage soit sain, ni que vos hyperviseurs puissent réellement effectuer du travail au rythme
dont vous avez besoin.

Proxmox empile beaucoup de choses sur la simple capacité des nœuds à se voir :
pmxcfs (le système de fichiers de cluster Proxmox qui stocke l’état de configuration),
pveproxy et pvedaemon (services API/UI),
pve-ha-lrm/crm (logique HA),
pvestatd (statistiques),
et tout ce que fait aujourd’hui votre backend de stockage (ZFS, iSCSI, NFS, Ceph, LVM local… choisissez votre mal de tête préféré).

L’adhésion Corosync peut rester stable même si :

  • pmxcfs est bloqué en attente d’opérations FUSE et vous ne pouvez pas appliquer de changements de configuration
  • le réseau perd des paquets ou subit des pics de latence—juste pas assez pour perdre le quorum
  • la dérive temporelle provoque des bizarreries d’authentification et de fencing
  • des blocages de stockage figent les threads I/O de QEMU et les migrations expirent
  • les démons de gestion sont bloqués sur DNS, PAM/LDAP ou des appels système sur le système de fichiers

Deux faits secs qui sauvent des carrières

  1. Le quorum est binaire ; la santé ne l’est pas. Vous pouvez avoir le quorum et rester inutilisable.
  2. La plupart des « problèmes de cluster » Proxmox sont en fait des problèmes de latence. Pas toujours réseau—souvent stockage ou contention CPU qui se manifeste par des battements manqués ailleurs.

Faits intéressants et contexte historique (parce que les systèmes traînent du bagage)

  • Corosync a évolué depuis le projet OpenAIS, qui visait à implémenter des concepts d’interface applicative pour le clustering sous Linux.
  • Totem est la couche de communication de groupe de Corosync ; son mécanisme de jeton explique pourquoi le réglage du « token timeout » peut vous donner l’illusion de puissance—puis des regrets.
  • Le quorum dans Corosync est un problème de vote (via votequorum) plutôt qu’un système de notation de santé ; il ne mesure pas la réactivité des services.
  • pmxcfs est un système de fichiers distribué basé sur FUSE ; excellent pour de petits fichiers de configuration et terrible pour votre patience quand il se bloque.
  • Le « filesystem de cluster » de Proxmox n’est pas un système de fichiers général ; c’est un magasin de configuration répliqué. Le traiter comme un stockage partagé est la voie vers la consultation d’un thérapeute.
  • La prévention de split-brain est un biais de conception dans la plupart des piles de cluster ; Proxmox tend à préférer « arrêter les écritures » plutôt que « risquer une corruption silencieuse ».
  • Le point douloureux historique de CEPH était l’amplification des petites écritures ; les versions modernes se sont beaucoup améliorées, mais votre réseau et vos disques décident encore si c’est une Ferrari ou une tondeuse.
  • L’ordonnancement du noyau Linux et la pression I/O peuvent créer des modes de panne où « tout semble en ligne mais rien ne bouge »—surtout sur des hyperviseurs surchargés.

Une citation à garder sur votre écran :
Espérer n’est pas une stratégie. — Gen. Gordon R. Sullivan

Blague #1 : Corosync qui affiche « quorum » pendant que votre GUI plante, c’est comme votre détecteur de fumée qui dit « pile OK » en plein feu de cuisine.

Playbook de diagnostic rapide

Quand le cluster meurt, vous n’avez pas le temps pour une lecture interprétative des logs. Il vous faut un chemin court vers le goulot d’étranglement.
Voici l’ordre qui trouve rapidement les causes racines en environnement réel.

Première étape : s’agit-il d’un problème d’adhésion réseau ou d’un blocage du plan de gestion ?

  • Vérifier la stabilité de l’adhésion Corosync (pvecm status, corosync-cfgtool -s).
  • Vérifier si pmxcfs est réactif (pvecm updatecerts va se bloquer si le fs du cluster est figé ; de simples lectures dans /etc/pve peuvent aussi bloquer).
  • Vérifier si l’API/UI est bloquée (status systemd et journal pour pveproxy/pvedaemon).

Deuxième étape : quelle est la source dominante de latence actuellement ?

  • Latence réseau/perte de paquets (ping -f n’est pas la réponse ; utilisez mtr, ethtool -S, compteurs côté switch).
  • Latence stockage (ZFS zpool iostat -v, Ceph ceph -s et slow ops, statistiques clients NFS).
  • Steal CPU / file d’exécution / pression mémoire (la charge moyenne n’est pas suffisante ; vérifiez vmstat, top, pressure-stall-information si disponible).

Troisième étape : quelque chose « réessaie » indéfiniment ?

  • Requêtes DNS et LDAP (les connexions GUI se bloquent, les appels API stagnent).
  • Flapping multipath (les chemins iSCSI meurent et reviennent comme une série télé).
  • Backfill/récupération Ceph saturant le cluster (il est « assez sain » mais assez lent pour provoquer des timeouts partout).

Décisions de triage rapides

  • Si l’adhésion est stable mais que pmxcfs est bloqué : traitez cela comme une panne du plan de contrôle. Arrêtez de modifier la configuration et trouvez le blocage.
  • Si des pics de latence stockage apparaissent : arrêtez les migrations, arrêtez les sauvegardes, arrêtez tout ce qui multiplie l’I/O. Rétablissez d’abord la baseline.
  • Si le réseau perd/présente des pics de latence : priorisez la stabilisation du réseau du ring plutôt que de « tuner les token timeouts ». Le tuning est un dernier recours, pas un remède.

Modes de panne où Corosync paraît sain

1) pmxcfs est bloqué : Corosync est correct, mais les écritures de configuration se bloquent

pmxcfs est l’endroit où Proxmox stocke la configuration à l’échelle du cluster : définitions de VM, configurations de stockage, règles de pare-feu, domaines utilisateurs, et plus.
Il s’appuie sur la messagerie de Corosync, et il est monté sur /etc/pve via FUSE.

Quand pmxcfs est lent ou coincé, vous verrez des symptômes comme :

  • Actions GUI qui se bloquent (création de VM, édition de stockage, changement de HA)
  • Commandes qm/pct qui gèlent quand elles touchent les configs
  • SSH OK ; les VM continuent de tourner ; mais la gestion est « sous l’eau »

Causes courantes : pression CPU extrême, interblocages FUSE, blocages disque affectant le journal local, ou retards de messages corosync qui ne cassent pas encore le quorum.

2) Les timeouts de jeton ne sont pas en panne ; votre budget de latence l’est

Le mécanisme de jeton de Corosync attend une livraison des messages dans des délais. Vous pouvez avoir un quorum stable même avec des pics intermittents de latence qui
n’excèdent pas votre token timeout—mais ces pics suffisent à geler migrations, sauvegardes et décisions HA.

Un schéma classique : vous avez « corrigé » corosync en augmentant le token timeout. L’adhésion cesse de flapper.
Pendant ce temps, le cluster devient tolérant à une latence tellement mauvaise que tout le reste en souffre. Vous n’avez pas réparé le réseau.
Vous avez juste appris à Corosync à arrêter de se plaindre.

3) Les blocages de stockage figent l’hyperviseur, pas Corosync

Les incidents Proxmox les plus coriaces sont induits par le stockage. Une écriture VM se bloque dans le noyau ou QEMU,
l’hôte subit de l’attente I/O, et soudain tous vos démons de gestion répondent comme s’ils répondaient depuis un tunnel.

Corosync peut encore échanger des heartbeats si le CPU est programmé occasionnellement. C’est suffisant pour garder le quorum.
Mais ce n’est pas suffisant pour un système réactif.

4) Dérive temporelle : le poison lent

Les problèmes NTP/chrony ne cassent pas toujours le quorum. Mais ils peuvent casser tout ce qui suppose la monotonie du temps :
négociations TLS, authentification, corrélation des logs, décisions de fencing, et « pourquoi ce nœud pensait-il être 5 minutes dans le futur ? »

Vous allez aussi courir après des fantômes dans les logs parce que des événements apparaissent hors ordre. Ce n’est pas « amusant ». C’est comment on perd des heures.

5) La HA n’est pas « en panne », elle hésite sous défaillance partielle

La HA de Proxmox dépend d’une vue cohérente des ressources, des états des nœuds et de la disponibilité du stockage.
Avec le quorum intact mais la latence sous-jacente, la HA peut rester bloquée : tenter de redémarrer des ressources en boucle, attendre des verrous, ou refuser des actions
parce qu’elle ne peut pas vérifier l’état en toute sécurité. De l’extérieur, on croit que « la HA est cassée ». De l’intérieur, elle se montre prudente.

6) L’interface est lente parce que pveproxy attend quelque chose de stupide

Coupables fréquents : recherches DNS inverses, timeouts LDAP/PAM, lectures bloquées dans /etc/pve,
ou un chemin à thread unique saturé quelque part dans le traitement des requêtes.

Tâches pratiques : commandes, sorties, décisions

Ce sont les vérifications que j’exécute vraiment quand je suis de permanence. Chaque tâche inclut ce que la sortie signifie et la décision à prendre.
Exécutez-les sur au moins deux nœuds : un « bon » et un « mauvais ». Les différences sont votre indice.

Task 1: Verify quorum and expected votes

cr0x@server:~$ pvecm status
Cluster information
-------------------
Name:             prod-cluster
Config Version:   42
Transport:        knet
Secure auth:      on

Quorum information
------------------
Date:             Tue Feb  4 10:12:31 2026
Quorum provider:  corosync_votequorum
Nodes:            3
Node ID:          0x00000001
Ring ID:          1.2c
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   3
Highest expected: 3
Total votes:      3
Quorum:           2
Flags:            Quorate

Signification : Corosync voit 3 nœuds, le quorum est atteint, les votes correspondent aux attentes.
Décision : Si c’est « Yes » mais que vous avez toujours des problèmes, cessez d’accuser le quorum et commencez à mesurer la latence, pmxcfs, et le stockage.

Task 2: Check Corosync link status and MTU mismatches

cr0x@server:~$ corosync-cfgtool -s
Printing ring status.
Local node ID 1
RING ID 0
        id      = 10.10.10.11
        status  = ring 0 active with no faults
RING ID 1
        id      = 10.10.20.11
        status  = ring 1 active with no faults

Signification : Les rings sont opérationnels. « No faults » ne signifie pas « bonne latence ».
Décision : Si les rings montrent des fautes de manière intermittente, corrigez d’abord les problèmes L2/L3 (bonding, MTU, erreurs de switch) avant de toucher au tuning de Corosync.

Task 3: Read Corosync’s own complaints (they’re subtle)

cr0x@server:~$ journalctl -u corosync -S -2h --no-pager | tail -n 30
Feb 04 09:41:02 pve01 corosync[1267]:   [KNET  ] link: host: 2 link: 0 is down
Feb 04 09:41:03 pve01 corosync[1267]:   [KNET  ] host: 2 link: 0 recovered
Feb 04 09:58:19 pve01 corosync[1267]:   [TOTEM ] Token has not been received in 1800 ms
Feb 04 09:58:19 pve01 corosync[1267]:   [TOTEM ] A processor failed, forming new configuration.

Signification : Courtes coupures de lien et délais de token. Vous pouvez rester quoré tant que des reconfigurations ont lieu.
Décision : Si vous voyez des avertissements de token, considérez cela comme un incident réel : enquêtez sur les erreurs réseau, la famine CPU, ou les tempêtes IRQ.

Task 4: Confirm pmxcfs is mounted and responsive

cr0x@server:~$ mount | grep /etc/pve
pve on /etc/pve type fuse.pve (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)

Signification : Le montage existe. Il peut cependant être lent.
Décision : Ensuite, testez la réactivité en lecture/écriture.

Task 5: Test whether /etc/pve operations hang

cr0x@server:~$ time ls -l /etc/pve/nodes/pve01/qemu-server | head
total 8
-rw-r----- 1 root www-data 1324 Feb  4 09:55 101.conf

real    0m0.012s
user    0m0.002s
sys     0m0.004s

Signification : Une réponse rapide est normale. Si cela prend des secondes ou se bloque, pmxcfs étouffe.
Décision : Si lent/bloqué sur un seul nœud, suspectez une pression locale sur les ressources. Si lent sur tous les nœuds, suspectez de la latence corosync ou une contention pmxcfs à l’échelle du cluster.

Task 6: Check pmxcfs and pve services health

cr0x@server:~$ systemctl status pve-cluster pvedaemon pveproxy --no-pager
● pve-cluster.service - The Proxmox VE cluster filesystem
     Loaded: loaded (/lib/systemd/system/pve-cluster.service; enabled)
     Active: active (running) since Tue 2026-02-04 08:01:12 UTC; 2h 11min ago
   Main PID: 1123 (pmxcfs)
      Tasks: 13 (limit: 154263)
     Memory: 52.4M
        CPU: 2min 1.911s

● pvedaemon.service - Proxmox VE API Daemon
     Active: active (running)

● pveproxy.service - Proxmox VE API Proxy Server
     Active: active (running)

Signification : Les services sont « running ». Cela ne signifie pas qu’ils sont réactifs.
Décision : Si « active » mais que l’UI bloque, inspectez les logs et les appels bloquants (tâches suivantes).

Task 7: See if pveproxy is timing out on auth/DNS

cr0x@server:~$ journalctl -u pveproxy -S -2h --no-pager | tail -n 25
Feb 04 10:01:18 pve02 pveproxy[2044]: proxy detected vanished client connection
Feb 04 10:02:41 pve02 pveproxy[2044]: authentication failure; rhost=10.10.30.50 user=admin@pam msg=timeout
Feb 04 10:02:41 pve02 pveproxy[2044]: failed login attempt; user=admin@pam

Signification : Les timeouts d’authent peuvent provenir de lenteurs LDAP/PAM/DNS, pas forcément de mots de passe erronés.
Décision : Si vous voyez des timeouts, testez la résolution de noms et la reachabilité de l’annuaire ; ne « redémarrez pas des services au hasard » pour l’instant.

Task 8: Validate time sync and drift across nodes

cr0x@server:~$ chronyc tracking
Reference ID    : 192.0.2.10
Stratum         : 3
Ref time (UTC)  : Tue Feb 04 10:11:32 2026
System time     : 0.000347812 seconds slow of NTP time
Last offset     : -0.000112345 seconds
RMS offset      : 0.000251901 seconds
Frequency       : 12.345 ppm fast
Leap status     : Normal

Signification : Une bonne synchronisation montre de faibles décalages et un état de leap « Normal ».
Décision : Si le décalage est important ou si le leap status n’est pas normal, corrigez l’heure maintenant. Ne dépannez pas le comportement du cluster tant que les horloges ne sont pas synchronisées.

Task 9: Detect CPU pressure and I/O wait that starves everything

cr0x@server:~$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 812344  54212 9248120    0    0     4    21  920 1800  6  2 88  4  0
 3  1      0 790112  54180 9249008    0    0   120  8020 1100 2100  9  3 44 44  0
 4  2      0 780004  54140 9249912    0    0   200  9100 1200 2400  8  4 36 52  0

Signification : Un wa élevé (I/O wait) indique que le système est bloqué sur le stockage. Un b élevé suggère des processus bloqués.
Décision : Si le wa est constamment élevé pendant l’incident, arrêtez de poursuivre Corosync et allez diagnostiquer le stockage.

Task 10: ZFS health and latency on a node using local ZFS

cr0x@server:~$ zpool status -x
all pools are healthy

Signification : Pas d’erreurs connues sur le pool. Cela ne renseigne pas sur la latence.
Décision : Si c’est lent, vérifiez iostat et le comportement des sync writes ensuite.

cr0x@server:~$ zpool iostat -v 1 3
              capacity     operations     bandwidth
pool        alloc   free   read  write   read  write
rpool       320G   1.45T     80   1200  5.4M   98.2M
  mirror    320G   1.45T     80   1200  5.4M   98.2M
    nvme0n1    -      -      40    610  2.7M   49.1M
    nvme1n1    -      -      40    590  2.7M   49.1M

Signification : Écritures lourdes. Si cela corrèle avec des blocages du plan de gestion, vous pourriez saturer le stockage.
Décision : Envisagez de limiter les sauvegardes/réplications, et vérifiez les écritures synchrones (bases, NFS sync, ou ZFS mal réglé).

Task 11: Ceph cluster state (if you run it)

cr0x@server:~$ ceph -s
  cluster:
    id:     1b2c3d4e-5555-6666-7777-88889999aaaa
    health: HEALTH_WARN
            12 slow ops, oldest one blocked for 38 sec
  services:
    mon: 3 daemons, quorum a,b,c (age 2h)
    mgr: x(active, since 2h)
    osd: 9 osds: 9 up (since 2h), 9 in (since 2h)
  data:
    pools:   6 pools, 512 pgs
    usage:   12 TiB used, 18 TiB / 30 TiB avail
    pgs:     512 active+clean

Signification : « slow ops » est Ceph qui vous dit poliment que votre stockage souffre.
Décision : Traitez les slow ops comme un incident de production. Mettez en pause les opérations I/O lourdes. Examinez la latence des OSD, le réseau, et les réglages recovery/backfill.

Task 12: Check for network errors on Corosync interfaces

cr0x@server:~$ ip -s link show dev bond0
3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 3c:ec:ef:aa:bb:cc brd ff:ff:ff:ff:ff:ff
    RX:  bytes packets errors dropped  missed   mcast
    1234567890  987654      12      0       0       0
    TX:  bytes packets errors dropped carrier collsns
    2233445566  876543       0      0       0       0

Signification : RX errors non nulles est un indice. Douze erreurs peuvent être « rien » ou le sommet d’un iceberg—corrélez dans le temps.
Décision : Si les erreurs augmentent lors d’incidents, vérifiez le câblage, les optiques, le firmware des NIC, les ports du switch, et la cohérence MTU bout en bout.

Task 13: Measure latency and loss between nodes (without fooling yourself)

cr0x@server:~$ mtr -r -c 50 -n 10.10.10.12
Start: 2026-02-04T10:12:01+0000
HOST: pve01                      Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.10.10.12               0.0%    50    0.4   0.6   0.3   2.1   0.3

Signification : Bon : faible moyenne, pire cas bas, pas de perte.
Décision : Si le pire cas grimpe à des dizaines/centaines de ms ou si de la perte apparaît, Corosync peut encore sembler « correct » tandis que le reste expire. Corrigez la qualité du chemin réseau.

Task 14: Check for stuck tasks and why migrations/backs ups don’t finish

cr0x@server:~$ pvesh get /cluster/tasks --limit 5
[
  {
    "endtime": 0,
    "id": "UPID:pve02:0000A1B2:00C3D4E5:67A1B2C3:vzdump:105:root@pam:",
    "node": "pve02",
    "pid": 41394,
    "starttime": 1707040801,
    "status": "running",
    "type": "vzdump",
    "user": "root@pam"
  }
]

Signification : Une sauvegarde qui tourne « pour toujours » est souvent corrélée à des blocages de stockage ou à des commits de snapshot qui ne peuvent pas se vider.
Décision : Vérifiez les logs du nœud concerné et la latence du stockage sous-jacent. Ne tuez pas la tâche juste pour le plaisir sans savoir si elle détient des verrous ou des snapshots.

Task 15: Spot HA manager indecision

cr0x@server:~$ ha-manager status
quorum OK
master pve01 (active, Tue Feb  4 10:12:12 2026)
lrm pve01 (active, Tue Feb  4 10:12:11 2026)
lrm pve02 (active, Tue Feb  4 10:12:10 2026)
lrm pve03 (active, Tue Feb  4 10:12:09 2026)

service vm:101 (started)
service vm:102 (freeze) (request_stop)
service ct:203 (started)

Signification : « freeze » indique que la HA ne peut pas progresser—souvent dû à la contention de verrous, à l’indisponibilité du stockage, ou à des agents bloqués.
Décision : Enquêtez sur le stockage de la ressource affectée et les verrous de configuration. Ne forcez pas les actions HA tant que vous ne savez pas sur quoi elles attendent.

Task 16: Find config lock contention (the quiet killer)

cr0x@server:~$ ls -l /var/lock/pve-manager
total 0
-rw-r----- 1 root www-data 0 Feb  4 10:08 vzdump.lock
-rw-r----- 1 root www-data 0 Feb  4 10:09 pve-storage-lock

Signification : Les verrous existent pendant les opérations normales, mais s’ils persistent longtemps, quelque chose est coincé.
Décision : Corrélez l’âge des verrous avec la liste des tâches et la performance du stockage. Si un verrou est obsolète à cause d’un processus crashé, résolvez la tâche bloquée en toute sécurité avant de supprimer les verrous.

Trois mini-récits d’entreprise depuis le terrain

Mini-récit 1 : L’incident causé par une mauvaise hypothèse

Une entreprise moyenne exploitait un cluster Proxmox trois nœuds pour des services internes. Tout était « redondant » : NICs doubles, deux switches,
RAID sur les hyperviseurs. Ils en étaient fiers. À raison.

Puis un lundi matin, l’UI gelait de façon intermittente. Les migrations pendaient. Des sauvegardes qui prenaient habituellement des minutes prirent des heures.
L’astreint fit le rituel : vérifia pvecm status. Quorum. Aucun nœud parti. Corosync semblait propre.
Ils déduisirent donc que le réseau de cluster allait bien et commencèrent à fouiller dans les logs UI de Proxmox.

La mauvaise hypothèse : « Si Corosync a le quorum, le réseau du cluster est sain. »
Le quorum signifiait seulement que les nœuds pouvaient encore échanger assez de messages pour s’accorder sur l’adhésion. Cela ne disait rien sur la latence en queue de pointe.

La vraie cause était un port de switch défaillant d’une façon qui ne coupait pas complètement le lien. Il introduisait des micro-burst intermittents et des erreurs CRC.
Les liens knet de Corosync récupéraient vite, donc l’adhésion restait stable. Mais les écritures pmxcfs étaient retardées, et l’API attendait constamment des réponses du système de fichiers du cluster.

La réparation fut ennuyeuse : remplacement du câble et du SFP suspects, déplacement sur un autre port, vérification que les compteurs d’erreurs restaient plats.
Le « mystère » disparut instantanément. Le postmortem ajouta une ligne qui comptait : mesurez les compteurs d’erreur réseau et la latence, pas seulement le quorum.

Mini-récit 2 : L’optimisation qui a mal tourné

Une autre organisation avait un déploiement Proxmox+Ceph. Ils voulaient moins d’avertissements « Corosync token timeout » pendant des fenêtres de forte charge.
Quelqu’un proposa d’augmenter le token timeout et les temps de consensus pour que Corosync tolère la lenteur temporaire.
Le changement réduisit le bruit dans les logs. Tout le monde célébra. Bref.

Des semaines plus tard, une maintenance de stockage déclencha une recovery Ceph qui satura le réseau backend.
Le cluster resta quoré. C’était le problème. Les nœuds restèrent membres tout en devenant progressivement non réactifs sous I/O wait.
Les décisions HA furent retardées. Les migrations se mirent en file. L’UI était à moitié fonctionnelle—juste assez pour créer une fausse confiance.

L’« optimisation » a aggravé le mode de défaillance en étirant la fenêtre où tout était techniquement connecté mais pratiquement inutilisable.
Les opérateurs attendirent plus longtemps avant de déclarer un incident parce que « Corosync est stable ». Pendant ce temps, l’impact métier augmentait.

La réparation finale ne fut pas seulement un retour en arrière sur les timeouts. Ils séparèrent le trafic : Corosync sur un réseau faible latence et non congestionné ;
recovery Ceph ajustée pour éviter la saturation ; et ajout d’alertes sur la latence tail et les slow ops plutôt que sur les flaps d’adhésion.
Les token timeouts revinrent près des valeurs par défaut. Le bruit des logs remonta ; les vraies pannes diminuèrent.

Mini-récit 3 : La pratique ennuyeuse mais correcte qui a sauvé la mise

Un environnement régulé exploitait Proxmox pour des charges critiques. L’équipe était conservatrice au point d’énerver.
Ils maintenaient une règle stricte : chaque nœud avait un accès de gestion hors-bande, une procédure documentée de « shutdown sûr »,
et un exercice trimestriel où ils s’entraînaient à récupérer d’échecs partiels sans improviser.

Lors d’un incident d’alimentation, un nœud revint avec un pool de stockage dégradé et des erreurs I/O intermittentes. Le quorum Corosync tint,
mais les opérations de gestion devinrent peu fiables : changements de config parfois bloqués, sauvegardes en panne, et HA hésitante à reloger des charges.

Au lieu de s’agiter, ils suivirent le playbook : geler les changements, identifier le nœud défaillant, évacuer les VM mobilisables en toute sécurité,
et garder le reste stable. Ils utilisèrent l’accès hors-bande pour confirmer les erreurs matérielles, puis retirèrent le nœud de la planification.

La pratique ennuyeuse—étapes documentées, ordre d’opérations connu, et refus de « juste cliquer partout »—empêcha qu’un problème matériel embrouillé
ne devienne un incident global. L’activité métier n’en souffrit que très peu. L’équipe retourna à l’ennui de leurs propres processus,
ce qui est exactement l’ambiance souhaitable pour le travail de fiabilité.

Blague #2 : Si votre cluster fonctionne sur la « connaissance tribale », félicitations—vous avez inventé un point unique de défaillance qui a des sentiments.

Erreurs fréquentes : symptôme → cause racine → correctif

1) Symptom: Quorum is “Yes,” but GUI actions hang

  • Cause racine : latence pmxcfs ou contention de verrous ; appels API bloqués en attente de /etc/pve.
  • Correctif : Testez la latence de ls /etc/pve sur plusieurs nœuds ; vérifiez CPU/I/O wait ; réduisez la charge ; résolvez les tâches bloquées tenant des verrous.

2) Symptom: HA shows “freeze” or repeated restart attempts

  • Cause racine : la HA ne peut confirmer l’état à cause de timeouts de stockage, verrous, ou mises à jour retardées du filesystem de cluster.
  • Correctif : Vérifiez ha-manager status, les tâches, et la santé du stockage ; stabilisez le stockage d’abord ; évitez de forcer les démarrages jusqu’à ce que l’état soit cohérent.

3) Symptom: Migrations start and then stall at a fixed percentage

  • Cause racine : le backend de stockage ne suit pas (slow ops Ceph, latence NFS, pression ZFS sync), ou le débit réseau s’effondre sous contention.
  • Correctif : Mesurez la latence du stockage, vérifiez les slow ops Ceph, vérifiez les erreurs NIC ; suspendez les autres activités I/O lourdes ; assurez-vous que le réseau de migration n’est pas partagé avec un stockage saturé.

4) Symptom: Corosync logs show token warnings but quorum stays

  • Cause racine : pics de latence tail dus à la congestion, problèmes IRQ, ou famine CPU ; des reconfigurations peuvent se produire sans perte totale d’adhésion.
  • Correctif : Traitez comme un incident réseau/hôte ; vérifiez ip -s link, ethtool -S, mtr et la attente CPU ; corrigez le chemin sous-jacent.

5) Symptom: Random “permission denied” or TLS/auth issues after “nothing changed”

  • Cause racine : dérive temporelle entre nœuds ; fenêtres de validation de certificats violées ; échecs d’authentification Kerberos/LDAP sensibles au temps.
  • Correctif : Corrigez chrony/NTP, validez la dérive sur tous les nœuds, puis retestez les flux d’auth. Ne commencez pas par faire tourner des certificats.

6) Symptom: Only one node is “slow,” but it doesn’t leave the cluster

  • Cause racine : problèmes matériels ou noyau locaux : erreurs disque, dégradation ZFS, erreurs NIC, pression mémoire.
  • Correctif : Comparez métriques et logs avec un nœud sain ; évacuez les charges ; enquêtez sur le matériel ; ne laissez pas un nœud malade empoisonner le plan de contrôle.

7) Symptom: Everything gets bad during backups

  • Cause racine : les sauvegardes saturent le stockage ou le réseau ; les commits de snapshot sont lents ; des verrous sont maintenus plus longtemps ; les opérations de gestion s’accumulent.
  • Correctif : Échelonnez les sauvegardes, limitez la bande passante des sauvegardes, séparez le trafic de sauvegarde, et assurez une marge pour le stockage. Les sauvegardes doivent être ennuyeuses, pas un test de charge.

Listes de contrôle / plan pas-à-pas

Checklist A: When the cluster “feels slow” but quorum is fine

  1. Geler les changements. Pas de nouvelles configurations de stockage, pas d’éditions de pare-feu, pas de remaniement HA tant que le blocage n’est pas compris.
  2. Choisir un nœud « mauvais » et un nœud « bon ». Exécutez les mêmes contrôles ; les différences sont en or.
  3. Confirmer la stabilité d’adhésion : pvecm status, corosync-cfgtool -s, journal Corosync.
  4. Tester la réactivité de pmxcfs : un rapide ls sous /etc/pve en mesurant le temps.
  5. Vérifier verrous et tâches bloquées : pvesh get /cluster/tasks, inspecter les fichiers de lock.
  6. Mesurer la pression hôte : vmstat, charge, I/O wait, pression mémoire.
  7. Mesurer la qualité réseau : compteurs d’erreurs + mtr entre nœuds sur le ring Corosync.
  8. Mesurer la santé du stockage : ZFS iostat/status ou slow ops Ceph.
  9. Pensez au tuning seulement ensuite. Tuner sans mesurer, c’est construire un désastre lent mais « stable ».

Checklist B: Stabilize first, then recover functionality

  1. Arrêter les multiplicateurs de charge : mettre en pause migrations, reporter les sauvegardes, limiter recovery/backfill si sur Ceph (avec précaution).
  2. Isoler le nœud malade : si un nœud montre des erreurs/latence, migrer ce qui peut l’être et le retirer des décisions HA jusqu’à réparation.
  3. Vérifier la synchro horaire : assurez-vous que les horloges s’accordent avant d’interpréter les logs et les événements de fencing.
  4. Rétablir le réseau de référence : éliminer perte de paquets, erreurs CRC, incohérences MTU et liens congestionnés.
  5. Rétablir le stockage de référence : corriger erreurs disque, réparer pools dégradés, traiter les slow ops, assurer de l’espace libre suffisant.
  6. Réactiver les opérations progressivement : migrations/sauvegardes une par une, surveiller latence et logs.

Checklist C: Hardening so this doesn’t happen again

  1. Séparer les classes de trafic : Corosync sur liens faible-latence ; stockage sur son propre réseau ; migrations séparées si possible.
  2. Alerter sur la latence tail, pas seulement sur « up/down ». Les alarmes de quorum sont nécessaires mais insuffisantes.
  3. Planifier la capacité pour sauvegardes et recoveries. Si votre cluster ne peut pas gérer un événement de recovery plus la charge normale, il n’est pas résilient.
  4. Tester les exercices de panne. Entraînez-vous au « un nœud lent », « un lien qui flappe », « slow ops stockage ». Les vrais incidents ne doivent pas être vos premières répétitions.

FAQ

1) Why does pvecm status show “Quorate: Yes” when the GUI is unusable?

Parce que le quorum concerne l’adhésion et le vote, pas la réactivité. L’interface dépend de pmxcfs et des démons API qui peuvent se bloquer sur I/O, verrous, DNS ou latence de stockage.

2) If Corosync shows no faults, can the network still be the problem?

Oui. Des pics courts, microbursts, erreurs CRC et jitter peuvent ruiner la latence tail sans faire chuter l’adhésion. Vérifiez les compteurs et mtr, pas seulement le statut du ring.

3) Should I increase Corosync token timeout to stop flapping?

Seulement après avoir prouvé que le réseau et l’ordonnancement hôte sont stables et que vous en avez toujours besoin. Augmenter les timeouts peut masquer de vrais problèmes de latence et retarder la détection de panne.

4) What’s the quickest way to tell if pmxcfs is the bottleneck?

Mesurez le temps d’un simple ls dans /etc/pve sur plusieurs nœuds. S’il est lent ou se bloque, pmxcfs est impliqué. Ensuite vérifiez CPU et I/O wait.

5) Can storage problems really affect Corosync and cluster management?

Absolument. Les blocages de stockage provoquent de l’I/O wait, qui retarde les processus et l’ordonnancement. Corosync peut continuer à échanger assez de messages, mais pmxcfs et les appels API en pâtiront.

6) How does time drift break a Proxmox cluster if quorum is fine?

La dérive peut casser TLS/auth, embrouiller les logs, et provoquer des décisions incohérentes en HA ou fencing. Corrigez la sync horaire avant un dépannage plus profond.

7) Why do migrations hang more often than “normal VM runtime” during incidents?

Les migrations amplifient les besoins en bande passante et stockage et sont sensibles à la latence. Une VM peut survivre avec cache et réessais ; une migration est une boucle serrée qui expire.

8) What should I do if one node is slow but still part of the cluster?

Traitez-le comme une défaillance partielle : évacuez les charges quand c’est sûr, réduisez ce qui dépend de ce nœud, et enquêtez sur le matériel/réseau/stockage de cet hôte spécifiquement.

9) Is it safe to restart corosync or pmxcfs during an incident?

Parfois, mais ce n’est pas un geste de premier recours. Un redémarrage peut provoquer des changements d’adhésion et un churn de verrous. Stabilisez d’abord réseau/stockage, puis redémarrez avec un objectif clair.

10) What’s the best “single metric” to alert on for these issues?

Il n’y en a pas une seule. Combinez : réactivité pmxcfs (checks synthétiques), perte/jitter réseau, latence de stockage/slow ops, et I/O wait hôte. Le quorum seul est un métrique rassurant mais insuffisant.

Prochaines étapes à faire cette semaine

Si vous exploitez Proxmox en production, voici le chemin pratique qui change réellement les résultats :

  1. Ajouter un check synthétique pmxcfs : mesurer et alerter si ls /etc/pve dépasse un seuil faible sur n’importe quel nœud.
  2. Alerter sur les erreurs réseau des interfaces Corosync : erreurs CRC, drops, flaps de lien. Cela détecte tôt les dégradations « quorum OK ».
  3. Alerter sur la latence stockage : anomalies ZFS iostat, slow ops Ceph, retransmissions client NFS. Le stockage est la majorité silencieuse de ces incidents.
  4. Garder les timeouts Corosync raisonnables : n’utilisez pas le tuning comme pansement pour un mauvais réseau. Si vous devez tuner, documentez pourquoi et quelles mesures le justifient.
  5. Réaliser un exercice de panne : simulez un réseau de stockage congestionné ou un lien qui flappe et entraînez-vous à « stabiliser d’abord ». Votre futur vous remerciera et sera un peu moins fatigué.

Corosync ne vous ment pas. Il répond juste à une question plus petite que celle que vous posez.
Si vous voulez un cluster qui survit, mesurez l’organisme entier—qualité réseau, latence stockage, réactivité du plan de contrôle—et traitez le « quorum: yes » comme le début du diagnostic, pas la fin.

Réinstaller Windows et conserver les applications ? Ce qui fonctionne vraiment (et ce qui relève du marketing)

Il est 9h12. Vous avez un problème « simple » sous Windows : mises à jour cassées, temps de démarrage étranges, client VPN qui ne se lance pas, et votre portable est devenu un radiateur coûteux. Quelqu’un dit : « Réinstalle Windows, tu peux garder tes applications. » Cette phrase est soit le début d’une récupération propre… soit le début d’un long après-midi à expliquer aux finances pourquoi la suite comptable a besoin « d’une réautorisation rapide » (encore).

Cet article explique la différence entre ce que Windows peut réellement faire et ce que les éditeurs ou les posts optimistes sur les forums laissent entendre. Nous couvrirons les options, leurs échecs courants, et comment prouver — avec des commandes et des sorties — si vous êtes sur le point de conserver vos applications ou d’effacer votre semaine.

Les termes que les vendeurs brouillent volontairement

Quand on dit « réinstaller Windows », on peut parler de quatre opérations différentes. Une seule conserve de manière fiable les applications dans le sens où la plupart des humains entendent « applications ». Les autres ne conservent que des fichiers, gardent quelques applications du Microsoft Store, ou ne laissent que des regrets.

1) Installation propre (effacer et installer)

C’est l’option honnête. Vous démarrez depuis un média d’installation, supprimez les partitions ou formatez le volume système, et installez à neuf. Vous pouvez préserver un dossier Windows.old si vous installez sur la même partition sans formater, mais cela ne sauve que les données utilisateur et une partie de l’état système — pas les applications installées en état de fonctionnement.

2) Réinitialiser ce PC

Les Paramètres de Windows proposent « Réinitialiser ce PC » avec des choix comme « Conserver mes fichiers » ou « Supprimer tout ». Le chemin « Conserver mes fichiers » préserve les profils utilisateurs et quelques paramètres mais supprime les applications de bureau installées. Il peut conserver certaines applications intégrées. Ce n’est pas « garder les applications », peu importe la politesse d’une boîte de dialogue.

3) Mise à niveau in-place / réparation (le vrai procédé qui « garde les apps »)

C’est celle qui peut préserver les applications Win32 installées et la plupart des paramètres : lancer Windows Setup depuis l’intérieur de Windows (pas en boot depuis l’USB), choisir de conserver les fichiers personnels et les applications, et laisser Setup déposer un nouvel OS tout en migrant l’installation existante.

Si vous devez retenir une règle : si vous démarrez depuis une clé USB, « garder les apps » est généralement hors de portée. Setup a besoin du contexte du système en cours d’exécution pour effectuer une migration complète des applications et de l’état du registre.

4) Restauration d’image / restauration bare-metal

Celle-ci conserve les applications parce qu’elle conserve tout. Mais ce n’est pas une « réinstallation », c’est un voyage dans le temps. Vous restaurez une image disque complète antérieure et acceptez que tout ce qui a été installé ou modifié depuis l’image soit perdu.

Blague n°1 : Un « réinstall qui garde les apps » ressemble un peu à un « gâteau régime ». Parfois il existe, mais lisez quand même l’étiquette.

Ce que « conserver les applications » signifie réellement : les seuls chemins qui fonctionnent

Voici la vérité pratique : pour les applications de bureau traditionnelles (Win32), la seule méthode supportée par Microsoft qui ressemble à « réinstaller Windows et conserver les applications » est la mise à niveau in-place / réparation. Tout le reste est soit une réinitialisation (applications supprimées), soit une installation propre (applications supprimées, fichiers éventuellement récupérables).

La mise à niveau in-place / réparation : ce qu’elle fait

  • Remplace les fichiers système de Windows par une copie fraîche depuis le média d’installation ou les sources Windows Update.
  • Reconstruit le magasin de composants (WinSxS) et réenregistre de nombreux composants système.
  • Migre les applications installées, les pilotes et les paramètres dans la mesure du possible.
  • Crée des artefacts de retour arrière et des journaux (comme C:\$WINDOWS.~BT, les journaux Panther).

Ce qu’elle ne garantit pas

  • Elle ne gardera pas des applications cassées si celles-ci dépendaient de composants système corrompus, de pilotes obsolètes ou de runtime qui sont remplacés.
  • Elle ne préservera pas l’état de licence pour tous les produits. Certaines licences survivent, d’autres traitent l’installation comme une nouvelle machine.
  • Elle ne préserve pas de manière fiable les intégrations des logiciels de sécurité. Les protections endpoints, VPN et pilotes bas niveau sont des victimes fréquentes.

Prérequis non négociables si vous voulez que « garder les apps » soit réel

  • Vous devez pouvoir démarrer dans Windows et exécuter setup.exe depuis l’OS.
  • Vous avez besoin d’espace disque libre suffisant sur le volume système (préparez des dizaines de Go).
  • Vous avez besoin du bon média : même édition, langue compatible, et typiquement une build identique ou plus récente.
  • La santé du disque et du système de fichiers doit être suffisante pour supporter des opérations de fichiers à grande échelle.

Feuille de diagnostic rapide

Quand quelqu’un demande « Puis-je réinstaller Windows et garder les apps ? », ne répondez pas tout de suite. Diagnostiquez d’abord. Le goulot d’étranglement est généralement l’un des suivants : santé du disque, corruption système, pile de mise à jour endommagée, espace insuffisant, ou pilotes tiers.

Premier point : établir si une réparation in-place est même possible

  1. Pouvez-vous vous connecter ? Si non, vous dérivez déjà vers reset/restauration/installation propre.
  2. Le volume OS est-il sain ? Si le disque est en train de lâcher, arrêtez. Faites une image, sauvegardez, remplacez-le, puis récupérez.
  3. BitLocker est-il activé ? Si oui, assurez-vous de disposer des clés de récupération et comprenez ce qui pourra vous les demander.

Deuxième point : identifier le vrai mode de défaillance

  1. Échecs de mises à jour ? Vérifiez DISM/SFC et les journaux de servicing.
  2. Lenteur au démarrage ? Inspectez les journaux d’événements pour des réinitialisations de disque, des timeouts de pilote et des services bloqués.
  3. Applications qui plantent ? Cherchez des runtimes manquants, des profils utilisateur corrompus ou des pilotes incompatibles.

Troisième point : choisir la correction la moins destructive qui respecte le SLA

  1. Essayez les réparations de servicing (DISM, SFC) si possible. Elles sont réversibles et peu coûteuses.
  2. Effectuez une mise à niveau in-place si des composants clés sont cassés mais que vous avez besoin des applications.
  3. Installation propre lorsque l’intégrité ou la sécurité est en cause, ou que le système est trop détérioré.

Idée paraphrasée de Werner Vogels (AWS) : la fiabilité vient de l’automatisation et du design, pas des exploits à 2h du matin. Traitez la récupération Windows de la même manière — des étapes répétables valent mieux que l’improvisation.

Tâches pratiques : commandes, sorties, décisions (12+)

Ci-dessous des tâches pratiques à exécuter avant de vous engager dans une réinstallation. Oui, ce sont des commandes Windows, mais je les fournis en blocs de style shell comme demandé. Exécutez-les dans une invite de commandes ou PowerShell élevée quand c’est approprié. Chaque tâche inclut : commande, sortie exemple, ce que cela signifie, et la décision à prendre.

Task 1: Confirm Windows version and build (compatibility check)

cr0x@server:~$ cmd /c ver
Microsoft Windows [Version 10.0.19045.4046]

Ce que cela signifie : La build 19045 indique Windows 10 22H2. Votre média d’installation doit être compatible (même version majeure, idéalement même build ou plus récent).

Décision : Si votre média est plus ancien (par ex. 19041), attendez-vous à un risque accru de comportement de downgrade ou d’option « garder les apps » désactivée. Obtenez un média adapté.

Task 2: Check edition (Home/Pro/Enterprise mismatch kills “keep apps”)

cr0x@server:~$ cmd /c "dism /online /Get-CurrentEdition"
Deployment Image Servicing and Management tool
Version: 10.0.19041.3636

Current Edition : Professional
The operation completed successfully.

Ce que cela signifie : Ce système est en édition Pro. Le média de réparation devrait être Windows Pro (ou un média multi-édition qui l’inclut).

Décision : Si vous n’avez qu’un média Enterprise alors que l’appareil est Pro, n’« essayez pas juste ». Procurez-vous l’ISO adapté.

Task 3: Measure free space (repair installs are space-hungry)

cr0x@server:~$ cmd /c "wmic logicaldisk where DeviceID='C:' get Size,FreeSpace"
FreeSpace        Size
41234583552      255998611456

Ce que cela signifie : Environ 41 Go libres sur C:. C’est généralement suffisant pour une mise à niveau in-place plus les fichiers de rollback, selon l’OS et les applications.

Décision : Si l’espace libre est inférieur à ~25–30 Go, prévoyez un nettoyage ou une extension temporaire du stockage avant de tenter la réparation.

Task 4: Check BitLocker status (avoid surprise recovery prompts)

cr0x@server:~$ cmd /c "manage-bde -status c:"
BitLocker Drive Encryption: Configuration Tool version 10.0.19041
Volume C: [OS]
    Conversion Status:    Fully Encrypted
    Percentage Encrypted: 100.0%
    Protection Status:    Protection On
    Lock Status:          Unlocked

Ce que cela signifie : Le disque OS est chiffré. Setup peut fonctionner, mais vous devez avoir accès aux clés de récupération et envisager de suspendre la protection pendant la mise à niveau.

Décision : Si vous ne pouvez pas récupérer les clés, arrêtez-vous et résolvez ça d’abord. Sinon, vous êtes à un firmware update d’une mauvaise journée.

Task 5: Quick disk health signal (SMART via WMIC is limited but useful)

cr0x@server:~$ cmd /c "wmic diskdrive get model,status"
Model                          Status
NVMe Samsung SSD 980 PRO 1TB   OK

Ce que cela signifie : WMIC rapporte OK. Ce n’est pas une analyse SMART complète, mais si ça indique « Pred Fail », croyez-le.

Décision : Si le statut du disque n’est pas OK, n’essayez pas une in-place upgrade. Sauvegardez/imagez d’abord ; remplacez le stockage.

Task 6: File system check scheduling (catch corruption early)

cr0x@server:~$ cmd /c "chkdsk c: /scan"
The type of the file system is NTFS.
Stage 1: Examining basic file system structure ...
Windows has scanned the file system and found no problems.
No further action is required.

Ce que cela signifie : Les métadonnées NTFS semblent cohérentes.

Décision : Si des erreurs sont trouvées, réparez-les (chkdsk /f, nécessitant probablement un redémarrage) avant toute migration d’OS.

Task 7: System file integrity check (SFC)

cr0x@server:~$ cmd /c "sfc /scannow"
Beginning system scan. This process will take some time.
Windows Resource Protection found corrupt files and successfully repaired them.

Ce que cela signifie : Des corruptions existaient mais ont été réparées. Souvent cela résout des échecs de mise à jour sans réinstallation.

Décision : Redémarrez et retestez le problème initial. Si la corruption ne peut pas être réparée, passez à DISM puis éventuellement à une mise à niveau in-place.

Task 8: Repair component store health (DISM)

cr0x@server:~$ cmd /c "dism /online /cleanup-image /scanhealth"
No component store corruption detected.
The operation completed successfully.

Ce que cela signifie : Le magasin de composants WinSxS semble sain.

Décision : Si une corruption est détectée et que /restorehealth échoue, une mise à niveau in-place est souvent la réparation sûre la plus rapide qui préserve les applications.

Task 9: Check whether Windows can find recovery environment (Reset depends on it)

cr0x@server:~$ cmd /c "reagentc /info"
Windows Recovery Environment (Windows RE) and system reset configuration
    Windows RE status:         Enabled
    Windows RE location:       \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE

Ce que cela signifie : WinRE est activé. Les options de réinitialisation sont viables si vous acceptez la suppression des applications.

Décision : Si WinRE est désactivé ou manquant, « Réinitialiser ce PC » peut échouer. Ne le découvrez pas en pleine crise.

Task 10: Inspect recent bugchecks and disk errors (Event Log triage)

cr0x@server:~$ cmd /c "wevtutil qe System /q:\"*[System[(EventID=7 or EventID=51 or EventID=55 or EventID=1001)]]\" /c:5 /f:text"
Event[0]:
  Log Name: System
  Source: Microsoft-Windows-WER-SystemErrorReporting
  Event ID: 1001
  Description: The computer has rebooted from a bugcheck...

Ce que cela signifie : Il y a des erreurs critiques récentes. Les Event ID 7/51/55 sont souvent des problèmes disque ou NTFS. 1001 indique des plantages.

Décision : Si des événements liés au disque apparaissent, priorisez la santé du stockage plutôt que la réinstallation de l’OS. Réparez le matériel d’abord.

Task 11: List installed apps the way enterprise tools see them (inventory before surgery)

cr0x@server:~$ powershell -NoProfile -Command "Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName,DisplayVersion | Sort-Object DisplayName | Select-Object -First 5"
DisplayName                         DisplayVersion
7-Zip 23.01 (x64 edition)           23.01
Google Chrome                       121.0.6167.141
Microsoft 365 Apps for enterprise   16.0.17231.20182
Notepad++ (64-bit x64)              8.6.4
Zoom Workplace                      6.0.2

Ce que cela signifie : C’est votre base de référence. Toutes les applications ne s’enregistrent pas ici (certaines applis portables non), mais la plupart des logiciels d’entreprise le font.

Décision : Exportez cette liste avant toute modification. Si l’utilisateur affirme ensuite « tout a disparu », vous aurez des preuves.

Task 12: Capture drivers (3rd-party drivers often break after repair)

cr0x@server:~$ cmd /c "pnputil /enum-drivers | findstr /i \"Published Name Provider\" | more"
Published Name : oem12.inf
Driver package provider : Intel
Published Name : oem45.inf
Driver package provider : Realtek

Ce que cela signifie : Vous pouvez voir les packages de pilotes tiers. Les pilotes réseau et stockage sont les plus critiques pour la survie du système.

Décision : Si le système dépend d’un pilote de stockage spécifique au fournisseur (ex. RAID), confirmez que vous avez un chemin de réinstallation avant de toucher à Windows.

Task 13: Confirm activation channel (helps predict post-reinstall activation behavior)

cr0x@server:~$ cmd /c "slmgr /dli"
Name: Windows(R), Professional edition
Description: Windows(R) Operating System, RETAIL channel
Partial Product Key: XXXX
License Status: Licensed

Ce que cela signifie : Le canal RETAIL est généralement lié à un compte Microsoft ou une clé, pas à un KMS d’entreprise.

Décision : Si l’activation se fait via KMS/MAK, confirmez que l’activation d’entreprise fonctionnera après de grosses opérations. Sinon vous pourriez « réparer » Windows en état non activé.

Task 14: Validate system reserved/recovery partitions exist (boot safety)

cr0x@server:~$ cmd /c "diskpart /s %TEMP%\dp.txt"
Microsoft DiskPart version 10.0.19041.3636

DISKPART> list vol

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     C   OS           NTFS   Partition    238 GB  Healthy    Boot
  Volume 1         EFI          FAT32  Partition    100 MB  Healthy    System
  Volume 2         Recovery     NTFS   Partition    990 MB  Healthy    Hidden

Ce que cela signifie : Les partitions EFI et Recovery sont présentes. C’est un bon signe pour un comportement de démarrage sain.

Décision : Si l’EFI/Recovery manque ou est cassé, priorisez la réparation de l’infrastructure de démarrage ; les plans de réinstallation changent.

Task 15: See whether Windows Setup is likely to allow “keep apps” (practical check)

cr0x@server:~$ cmd /c "setuperr.exe"
'setuperr.exe' is not recognized as an internal or external command,
operable program or batch file.

Ce que cela signifie : Vous n’avez pas de journaux Setup parce que vous n’avez pas encore lancé setup. Après une tentative d’in-place upgrade échouée, les logs se trouvent dans les répertoires Panther.

Décision : Si une tentative in-place échoue, vous récupérerez les journaux dans C:\$WINDOWS.~BT\Sources\Panther et vous cesserez de deviner.

Trois mini-récits en entreprise (ce qui a mal tourné, ce qui nous a sauvés)

Mini-récit 1 : L’incident causé par une fausse hypothèse (le mythe du « garder les apps »)

Une entreprise de taille moyenne avait une flotte d’ordinateurs portables Windows 10 pour une équipe commerciale. Quelques appareils restaient bloqués sur des mises à jour cumulatives échouées, et quelqu’un a proposé une solution rapide : « Réinitialiser ce PC, conserver mes fichiers. C’est à peu près une réinstallation qui garde les apps. » Ça semblait plausible. L’interface était gentille. Le calendrier, lui, ne l’était pas.

La réinitialisation a marché. Les machines ont redémarré propres. Les utilisateurs pouvaient ouvrir à nouveau des tableurs. Puis la vraie panne est arrivée : le plugin client CRM, le module de réservation de salles et un client VPN métier avaient disparu. Les documents des utilisateurs étaient intacts, donc l’opération a été déclarée réussie pendant environ six minutes.

Réinstaller les logiciels manquants n’était pas juste « télécharger et cliquer Suivant ». Certains installateurs nécessitaient une approbation administrateur, d’autres avaient besoin de fichiers de licence hors ligne, et un dépendait d’un runtime legacy à installer dans un ordre précis. Entre-temps, les endpoints ont dérivé en états non conformes parce que l’agent de gestion lui-même avait été supprimé par la réinitialisation. Les appareils ont cessé de se connecter. Cela a déclenché des alertes des outils de sécurité et bloqué l’accès réseau pour certains utilisateurs.

La mauvaise hypothèse n’était pas que la réinitialisation est mauvaise. La réinitialisation est correcte quand vous acceptez la perte des applications. La mauvaise hypothèse était de traiter « conserver mes fichiers » comme « conserver mon environnement ». Ce sont des promesses différentes avec des zones d’impact très différentes.

La remédiation a été ennuyeuse : inventorier d’abord les applications, confirmer les licences, et utiliser une mise à niveau in-place là où « garder les apps » a réellement du sens. La leçon a été retenue parce qu’elle a coûté de la productivité et beaucoup de tickets.

Mini-récit 2 : L’optimisation qui s’est retournée contre nous (économie d’espace vs Windows Setup)

Une autre organisation a tenté de réduire l’utilisation du stockage sur des postes de développeurs. Quelqu’un a déployé des politiques de nettoyage agressives : purge des gros dossiers temporaires, caches Delivery Optimization limités, et redirections de profils utilisateur resserrées. Les images machines paraissaient légères. Les tableaux de bord étaient verts. Chacun se félicitait en silence.

Puis une vague de réparations est arrivée — plusieurs appareils avaient besoin de mises à niveau in-place pour réparer des piles de servicing cassées. Setup a démarré puis échoué avec des erreurs vagues. Un schéma est apparu : les machines avec les politiques de nettoyage les plus strictes avaient le taux d’échec le plus élevé. Le volume OS n’avait pas assez de marge de manœuvre pour que Setup prépare les fichiers, crée des données de rollback et effectue les étapes de migration.

Ce qui a rendu la situation pénible, c’était le caractère « presque fonctionnel ». Setup tournait un moment, puis annulait. Les utilisateurs perdaient des heures. L’IT perdait en crédibilité. Et parce que le rollback restaurait l’état précédent cassé, le résultat était un cercle parfait de temps gaspillé.

La correction n’était pas exotique : assouplir temporairement les politiques de nettoyage, assurer un espace libre suffisant, et allouer une marge prévisible. Windows Setup n’est pas minimaliste. Il veut une zone de staging, des logs et des rollback. Refusez-les et il devient pointilleux.

Cette « optimisation » a bien réduit l’usage moyen du disque. Elle a aussi augmenté la fréquence des incidents. En termes de production, elle a baissé le coût par nœud et augmenté le coût par incident — un mauvais échange si vous tenez à vos week-ends.

Mini-récit 3 : La pratique ennuyeuse mais correcte qui a sauvé la mise (imagerie et clés)

Une entreprise disposait d’une pratique stricte pour les « événements de réparation OS » : avant toute réparation ou réinstallation majeure de Windows, les techniciens devaient capturer (1) les clés de récupération BitLocker, (2) un inventaire basique des applications, et (3) une image bare-metal du volume OS pour les machines à haut risque. Les gens râlaient. Ça semblait lent. Ça semblait bureaucratique.

Un vendredi, une série d’ordinateurs portables a commencé à manifester des timeouts NVMe intermittents. Pas des pannes totales — juste assez pour corrompre des fichiers occasionnellement et provoquer des comportements étranges. Quelques-unes étaient planifiées pour des mises à niveau in-place parce que les symptômes ressemblaient à des corruptions de mise à jour. Le processus a démarré un vendredi (parce que bien sûr).

Pendant la mise à niveau, deux appareils ont rencontré des erreurs de stockage et sont devenus non amorçables. Parce que l’imagerie avait été faite en premier, la récupération a été simple : remplacer le disque, restaurer l’image pour retrouver l’état utilisateur, puis effectuer une migration contrôlée vers une installation OS propre. Les clés de récupération étaient déjà dans le ticket, donc personne n’a dû courir après des utilisateurs en déplacement.

Cette pratique n’a pas empêché la panne. Elle a transformé la panne en routine. C’est le but. Vous n’avez pas besoin d’exploits ; vous avez besoin d’un runbook et de la discipline ennuyeuse pour le suivre.

Faits intéressants et contexte historique (pour comprendre pourquoi Windows se comporte ainsi)

  • « Repair install » était autrefois un concept depuis le CD de démarrage. Les versions plus anciennes de Windows avaient des modes de réparation depuis le média d’installation, mais le comportement moderne de « garder les apps » est lié à la logique de migration in-OS.
  • Les composants côte-à-côte (WinSxS) existent pour supporter le servicing à l’échelle. C’est pourquoi Windows peut appliquer des mises à jour sur une grande matrice d’états système — jusqu’à ce que le magasin se corrompe, puis tout devient étrange.
  • L’ère « Windows as a service » de Windows 10 a changé les mises à jour. Les mises à jour de fonctionnalité sont devenues des mises à niveau in-place fréquentes, donc Microsoft a beaucoup investi dans les outils de migration qui alimentent aussi les réparations in-place.
  • Réinitialiser ce PC a évolué pour la récupération grand public, pas pour la continuité d’entreprise. Il est conçu pour remettre rapidement un PC domestique en état de marche, pas pour préserver des piles applicatives complexes et des agents corporate.
  • L’activation est devenue plus résiliente avec les licences numériques. Beaucoup de systèmes se réactivent après réinstallation en se basant sur l’ID matériel, mais la licence d’entreprise et certains fournisseurs continuent de se comporter comme en 2009.
  • UEFI et GPT ont standardisé les layouts de démarrage. Windows moderne dépend des partitions EFI et de récupération ; leur absence ou corruption cause des pannes « mystères » après des tentatives de réinstallation.
  • La signature des pilotes et la sécurité noyau ont relevé la barre. Les anciens pilotes VPN et AV sont plus susceptibles de casser lors d’un rafraîchissement de l’OS car ils s’insèrent profondément dans la pile.
  • Les applications du Microsoft Store sont empaquetées différemment. Elles peuvent être réenregistrées ou réinstallées en masse ; les applications Win32 traditionnelles sont plutôt des « flocons de neige » avec état.
  • Windows Setup écrit des journaux détaillés. Beaucoup d’administrateurs ne les lisent pas, puis s’étonnent quand les suppositions échouent. Les journaux existent ; utilisez-les.

Modes d’échec : comment « garder les apps » casse en conditions réelles

Si vous voulez garder les applications, vous devez comprendre ce qui menace ce résultat. Voici les suspects habituels.

Incompatibilités d’édition, de langue et de build

Windows Setup propose l’option « Conserver les fichiers personnels et les applications » seulement quand il détecte un chemin de migration supporté. Si votre média est mauvais — édition différente, langue différente, trop ancien, architecture non correspondante — Setup masque silencieusement l’option ou force « Conserver les fichiers uniquement ». Ce n’est pas Windows qui veut nuire. C’est Windows qui refuse de promettre une migration qu’il ne peut pas réaliser.

Problèmes de santé du disque et incohérences du système de fichiers

Une mise à niveau in-place est une grosse opération sur les fichiers : copier, décompresser, préparer, déplacer, créer des hardlinks, et prévoir des rollbacks. Les disques qui « fonctionnent à peu près » deviennent des disques qui échouent de façon constante sous cette charge. Si vous voyez des timeouts disque ou des Event NTFS, traitez ça comme un incident matériel, pas comme un incident OS.

Pas assez d’espace pour le staging et le rollback

Setup a besoin d’espace pour :

  • l’expansion de l’image d’installation,
  • les caches de pilotes et de migration,
  • l’état de rollback,
  • les fichiers journaux qui peuvent devenir volumineux lors de tentatives répétées.

Si vous manquez d’espace, Setup peut échouer tard, annuler et vous laisser exactement là où vous étiez — mais plus fatigué.

Accroches de sécurité et outils endpoint

Les protections endpoint, DLP, clients VPN et outils de chiffrement installent souvent des pilotes noyau, des filtres réseau et des services système. Pendant une réparation in-place, Windows peut désactiver ou supprimer des composants incompatibles. Vous « avez gardé les apps », mais les apps qui rendent l’appareil utilisable sur le réseau d’entreprise peuvent être cassées.

Licences liées à l’identité machine

Certaines applications lient les licences aux IDs matériel, à l’ID d’installation Windows, à l’état du TPM ou à des clés de registre qui peuvent changer lors d’une réparation. La plupart du temps, ça va. Quand ça ne va pas, c’est urgent et coûteux.

Blague n°2 : Les serveurs de licences sentent la peur. Ils ont aussi l’air de savoir quand c’est vendredi.

Erreurs fréquentes (symptôme → cause racine → correction)

1) L’option « garder les apps » est absente dans Windows Setup

Symptôme : Setup n’offre que « Conserver les fichiers personnels uniquement » ou « Rien ».

Cause racine : Média incompatible (édition/langue/build), démarrage depuis USB au lieu d’exécuter in-OS, ou chemin de mise à niveau non supporté.

Correction : Démarrez dans Windows, montez le bon ISO, lancez setup.exe. Confirmez l’édition avec DISM avant de commencer.

2) La mise à niveau in-place échoue et annule après une longue attente

Symptôme : Des heures de progression, puis « Annulation des modifications ».

Cause racine : Espace disque insuffisant, incompatibilité de pilotes, ou erreurs système de fichiers.

Correction : Libérez de l’espace, retirez/désactivez l’AV/VPN tiers temporairement, exécutez chkdsk, lisez les logs Panther. Ne relancez pas aveuglément.

3) Après « Réinitialiser ce PC (conserver mes fichiers) », les applications ont disparu

Symptôme : Les applications de bureau manquent ; l’utilisateur est choqué.

Cause racine : La réinitialisation est conçue pour supprimer les applications installées.

Correction : N’utilisez Reset que si vous avez un plan de réinstallation (MDM, SCCM, Intune ou installateurs manuels) et un plan de récupération des licences.

4) L’appareil démarre mais l’accès au réseau corporate est cassé

Symptôme : Le Wi‑Fi fonctionne, mais le VPN/802.1X/authentification par certificats échoue.

Cause racine : Les filtres réseau, certificats ou agents de gestion ont été supprimés/invalidados.

Correction : Réenroler l’appareil, réinstaller le client VPN, restaurer les certificats, vérifier la synchronisation horaire, valider NLA et les services.

5) Invite de clé de récupération BitLocker apparue de façon inattendue

Symptôme : Après un redémarrage, BitLocker demande la clé de récupération.

Cause racine : Les mesures TPM ont changé (mises à jour firmware, modifications de la configuration de démarrage), ou BitLocker n’a pas été suspendu pendant les changements majeurs d’OS.

Correction : Récupérez la clé depuis votre coffre d’annuaire/compte, suspendez la protection avant les opérations de réparation quand approprié, et assurez la stabilité des paramètres Secure Boot.

6) Le système est « réparé » mais les mises à jour échouent toujours

Symptôme : La mise à niveau a réussi, pourtant Windows Update renvoie des erreurs.

Cause racine : Problèmes sous-jacents de servicing stack, restrictions de politique, ou problèmes réseau/proxy/WSUS plutôt que corruption OS.

Correction : Validez la configuration des sources de mise à jour, vérifiez les journaux d’événements, confirmez la connectivité et inspectez les politiques Windows Update et les services.

7) Les applications sont « conservées » mais se comportent comme au premier lancement / ont perdu leurs paramètres

Symptôme : Les applications s’ouvrent, mais les profils/configs sont manquants.

Cause racine : Corruption du profil utilisateur, reconstruction du profil, redirections de dossiers, ou données d’application stockées dans des emplacements non migrés proprement.

Correction : Vérifiez l’intégrité du profil utilisateur, restaurez les répertoires de données spécifiques aux applications, évitez de supprimer AppData à la légère pendant des nettoyages.

Checklists / plan étape par étape

Checklist décisionnelle : choisir le bon chemin de récupération

  1. Si vous ne pouvez pas démarrer dans Windows : il est peu probable de faire une véritable réparation in-place qui garde les apps. Envisagez une restauration d’image, une réparation hors ligne ou une installation propre avec récupération des données.
  2. Si la santé du disque est douteuse : arrêtez-vous et imagez/sauvegardez d’abord. Les opérations OS ne réparent pas le matériel.
  3. Si vous devez préserver des applications : prévoyez une mise à niveau in-place plutôt qu’une réinitialisation.
  4. Si vous avez besoin de certitude sécurité : une installation propre est la bonne réponse. La persistance peut aussi préserver les éléments malveillants.

Checklist pré-vol (faites ceci avant de toucher à Setup)

  • Confirmez l’édition et la build (Tâches 1–2).
  • Confirmez l’espace libre (Tâche 3).
  • Confirmez la disponibilité des clés de récupération BitLocker (Tâche 4).
  • Exécutez un scan chkdsk et réparez si nécessaire (Tâche 6).
  • Exécutez SFC et DISM (Tâches 7–8).
  • Exportez l’inventaire des applications installées (Tâche 11).
  • Identifiez les pilotes critiques et composants VPN/AV (Tâche 12).
  • Confirmez le canal d’activation (Tâche 13).

Étapes : mise à niveau in-place / réparation qui conserve réellement les applications

  1. Obtenez le bon média d’installation : même version majeure de l’OS, même édition, même langue, même architecture (x64 vs ARM64). Préférez une build égale ou plus récente.
  2. Démarrez normalement dans Windows : ne démarrez pas depuis l’USB.
  3. Désactivez ou désinstallez temporairement l’AV/VPN/DLP tiers si votre environnement l’autorise. Ces pilotes causent fréquemment des échecs de Setup.
  4. Montez l’ISO et exécutez setup.exe.
  5. Choisissez : « Conserver les fichiers personnels et les applications ». Si l’option n’est pas proposée, arrêtez-vous et réévaluez — ne vous fiez pas à l’espoir.
  6. Après la fin : vérifiez la pile réseau, l’enrôlement de gestionnaire de périphérique et la santé des outils de sécurité avant de déclarer victoire.
  7. Puis patcher : lancez Windows Update et confirmez que le problème initial est résolu.

Étapes : quand vous devez faire une installation propre (et minimiser la douleur)

  1. Sauvegardez les données utilisateur (Documents, Bureau, Téléchargements) et les emplacements de données spécifiques aux applications.
  2. Exportez l’inventaire des applications et les informations de licence quand c’est possible.
  3. Confirmez les clés de récupération et les voies d’activation.
  4. Installez Windows proprement en utilisant la bonne édition.
  5. Installez d’abord les pilotes (chipset/réseau/stockage), puis l’agent de gestion, ensuite les outils de sécurité, puis les applications métier.
  6. Restaurez les données, puis validez les configurations applicatives et les authentifications.

FAQ

1) Puis-je réinstaller Windows 11 et conserver tous mes programmes installés ?

Uniquement via une mise à niveau in-place / réparation lancée depuis Windows, avec un média compatible et un chemin de migration supporté. Réinitialiser ne gardera pas les programmes de bureau.

2) « Réinitialiser ce PC » conserve-t-il les applications ?

Non pour les applications de bureau traditionnelles. « Conserver mes fichiers » signifie que les données utilisateur restent, les applications partent. Planifiez en conséquence.

3) Si j’installe Windows par-dessus sans formater, mes applications fonctionneront-elles encore ?

Habituellement non. Vous pouvez obtenir un Windows.old avec vos anciens fichiers, mais les programmes installés ne seront plus enregistrés et ne fonctionneront pas comme installés.

4) Pourquoi Windows Setup masque-t-il parfois l’option « garder les apps » ?

Parce qu’il a détecté une incompatibilité (édition/langue/build/architecture) ou que vous avez démarré Setup depuis un média de démarrage. Setup ne promettra pas ce qu’il ne peut pas migrer.

5) Les applications du Microsoft Store survivent-elles à une réinstallation ?

Parfois. Les applications Store sont empaquetées et peuvent être réenregistrées, mais une installation propre nécessite tout de même leur réinstallation. Ne comptez pas sur leur survie lors d’un wipe.

6) Une mise à niveau in-place réparera-t-elle Windows Update ?

Souvent oui — surtout quand le magasin de composants ou des fichiers système sont corrompus. Mais si votre source de mise à jour/politiques est erronée (WSUS/proxy), vous échouerez encore après la réparation.

7) Et les pilotes — seront-ils préservés ?

Beaucoup de pilotes sont conservés, mais les pilotes noyau problématiques (VPN, AV, filtres de stockage) peuvent être supprimés ou remplacés. Vérifiez toujours la fonctionnalité réseau et stockage après coup.

8) Comment réduire le risque de perdre des licences logicielles ?

Inventoriez les logiciels, capturez les clés de licence quand c’est possible, confirmez les politiques de réactivation des éditeurs, et évitez les changements matériels/TPM non nécessaires pendant le processus.

9) Si la machine ne démarre pas, « garder les apps » est-il encore possible ?

Pas dans le sens supporté habituel. Si vous ne pouvez pas exécuter Setup depuis Windows, la logique de migration qui conserve les apps ne peut généralement pas s’exécuter. Envisagez une restauration d’image ou une installation propre avec récupération des données.

10) Dois-je faire SFC/DISM avant de réinstaller ?

Oui. Ce sont des opérations à faible risque qui règlent fréquemment le problème sans réinstallation. Si elles échouent, vous aurez aussi des preuves qui justifient une mise à niveau in-place.

Conclusion : prochaines étapes sans risque

Si vous ne retenez qu’une chose : « garder les apps » n’est pas une impression ; c’est une procédure spécifique. La mise à niveau in-place / réparation est la chose la plus proche de « réinstaller Windows et conserver les applications », et elle ne fonctionne que si vous la lancez depuis un environnement Windows démarré, avec un média compatible et un disque raisonnablement sain.

Prochaines étapes :

  1. Exécutez les contrôles rapides : capacité de démarrage, signaux de santé du disque, statut BitLocker, espace libre.
  2. Essayez SFC et DISM avant de réinstaller quoi que ce soit.
  3. Si vous avez vraiment besoin de conserver les applications, planifiez une mise à niveau in-place et validez d’abord la compatibilité du média.
  4. Si l’appareil est non fiable, instable ou que le disque lâche, arrêtez de courir après « garder les apps » et faites une installation propre ou une restauration d’image avec un redéploiement contrôlé des applications.

Contourner « Ce PC ne peut pas exécuter Windows 11 » en toute sécurité (ce qui compte vraiment)

Vous avez un PC parfaitement utilisable. Il démarre. Il fait tourner vos applications. Il a probablement encore quelques années de service fiable devant lui. Et puis Windows 11 arrive avec l’équivalent poli corporate de « l’ordinateur dit non ».

Internet vous proposera volontiers une astuce en une ligne pour contourner le contrôle. Ce qu’il ne vous donnera pas, c’est la réalité opérationnelle : ce qui craque plus tard, ce qui devient plus difficile à patcher, et ce qu’il faut vérifier pour ne pas transformer une station de travail stable en mystère lent.

Ce que vous contournez réellement (et pourquoi Microsoft s’en préoccupe)

Le message « This PC can’t run Windows 11 » n’est pas une unique chose. C’est un ensemble de verrous qui correspondent grossièrement à la posture de sécurité et de support de Microsoft :

  • TPM 2.0 : un magasin de clés matériel utilisé pour l’identité de l’appareil, BitLocker et les scénarios de démarrage mesuré. Windows 11 s’appuie fortement dessus.
  • Secure Boot : garantit que votre chaîne de démarrage est signée. Ce n’est pas magique, mais ça bloque une quantité démoralisante de bootkits.
  • Liste de générations/modèles de CPU : moins une question de vitesse brute que de mitigations minimales, de support des pilotes et de surface de tests.
  • UEFI + GPT : mode de démarrage moderne. Les installations en BIOS hérité peuvent encore fonctionner, mais les fonctions de sécurité deviennent rapidement maladroites.
  • Minimums de RAM/stockage : des verrous souples. Vous pouvez installer malgré tout ; simplement, vous devriez s’abstenir si vous tenez à votre santé mentale.

Contourner les contrôles est simple. Faire tourner la machine pendant deux ans sans échecs d’update mystérieux, enfer de pilotes ou tickets « pourquoi tout saccade » est ce qui sépare une bidouille de loisir d’une décision opérationnelle.

Voici l’opinion qui compte : si vous contournez, vous assumez la responsabilité. Ça veut dire tester les mises à jour, conserver des médias de récupération, surveiller la santé du disque et prévoir un rollback. Si cela vous semble trop de travail, ne contournez pas : remplacez le matériel ou restez sur Windows 10 jusqu’à la fin de son support.

Faits et historique qui expliquent le bazar

Un peu de contexte rend la politique moins arbitraire—même si vous n’êtes pas d’accord.

  1. Le TPM existe depuis longtemps. Le TPM 1.2 était courant sur les ordinateurs portables professionnels bien avant Windows 11, principalement pour BitLocker et le provisioning d’entreprise.
  2. Secure Boot est arrivé à l’époque de Windows 8. Il était controversé, puis est devenu normal, puis tout le monde a oublié son existence jusqu’à ce que Windows 11 en fasse une exigence.
  3. Les « listes de support CPU » concernent autant les pilotes que la vitesse. La vraie douleur n’est pas le calcul ; c’est l’abandon des chipsets et GPU par les fournisseurs.
  4. Windows 10 a été vendu comme « le dernier Windows ». Puis la réalité est intervenue : baselines de sécurité, changements de plateforme et envie de standardiser les fonctionnalités.
  5. La sécurité basée sur la virtualisation (VBS) est devenue importante. Ce n’est pas nouveau, mais Windows 11 pousse davantage de systèmes vers VBS, et les CPU anciens peuvent subir une perte de performance.
  6. Les atténuations Meltdown/Spectre ont changé les attentes de performance. Certains CPU plus anciens sont devenus plus lents de façon perceptible sur des charges I/O et des appels systèmes intensifs.
  7. UEFI a remplacé le BIOS pour une raison. Ce n’est pas plus joli ; c’est plus consistant, scriptable et compatible avec les chaînes de sécurité modernes.
  8. TPM ne sert pas qu’au chiffrement. Il sert pour l’attestation et l’identité dans les environnements gérés—pensez « prouver que vous avez démarré proprement » avant d’accorder l’accès.
  9. Microsoft a une courbe de coût de support. Chaque permutation de plateforme supplémentaire augmente la taille de la matrice de tests et le risque des correctifs. Les exigences réduisent cette surface.

Une courte blague, parce qu’on est adultes : les contrôles de compatibilité Windows sont comme la sécurité d’aéroport—surtout du théâtre jusqu’au jour où ça vous sauve d’un vrai désastre.

Un modèle de risques sensé : quand le contournement est acceptable et quand il est imprudent

Soyons pratiques. « Non pris en charge » n’est pas une catégorie morale ; c’est une distribution de probabilités. La clé est de décider si vous pouvez tolérer les risques.

Cas plutôt verts (contournement généralement raisonnable)

  • TPM présent mais désactivé dans le firmware, ou TPM 1.2 et vous êtes prêt à fonctionner sans les garanties complètes de Windows 11.
  • Secure Boot désactivé à cause d’un ancien double-boot Linux que vous pouvez réorganiser.
  • CPU légèrement hors liste mais encore assez moderne (et le système a un SSD, 16 Go de RAM, pilotes corrects).
  • Machine mono-utilisateur où une réinstallation est tolérable si les mises à jour deviennent problématiques.

Cas jaunes (contournement uniquement avec préparation)

  • Portable ancien avec pilotes abandonnés par le fournisseur (Wi‑Fi, pavé tactile, GPU). Il vous faut un plan de pilotes avant de toucher à l’OS.
  • Machines pour travail à distance avec VPN corporate, EDR, exigences de conformité d’appareil. Le contournement peut casser les contrôles de posture.
  • Disque déjà « limite » (avertissements SMART, ralentissements). Mettre à jour l’OS est un test de résistance. Remplacez le disque d’abord.

Cas rouges (ne pas contourner ; vous paierez plus tard)

  • Disque d’amorçage HDD et vous refusez de passer au SSD. Windows 11 sur du disque mécanique est un ticket support en slow-motion.
  • Systèmes 4 Go de RAM. Oui, ça s’installera peut-être. Non, vous n’aimerez pas. Votre navigateur vous mangera tout.
  • Station critique pour la production avec attentes de disponibilité et aucun chemin de rollback testé.
  • Tout appareil avec BIOS connu instable et aucune mise à jour de firmware disponible. Le firmware est la couche « on ne peut pas patcher plus tard ».

Voici le cadrage opérationnel que j’utilise : vous pouvez contourner des exigences, mais pas la physique. La latence de stockage, la qualité des pilotes et les bugs de firmware finiront par vous réclamer leur dû.

Méthode de diagnostic rapide (trouvez d’abord le vrai goulot)

Si l’objectif est « Windows 11 qui se comporte », ne commencez pas par bidouiller le registre. Commencez par les contraintes. C’est du triage, pas de l’idéologie.

Premier point : stockage et mode de démarrage

  • Le disque système est-il un SSD ? Si non, arrêtez-vous. Améliorez le stockage avant toute autre chose.
  • Le système démarre-t-il en UEFI avec GPT ? Si vous êtes en BIOS hérité/MBR, planifiez la conversion ou acceptez des options de sécurité plus faibles.
  • La santé du disque est-elle OK ? Les avertissements SMART signifient que vous allez probablement réinstaller deux fois.

Deuxième point : fonctions du firmware (TPM, Secure Boot, virtualisation)

  • TPM présent mais désactivé ? Activez-le dans le firmware plutôt que de le contourner.
  • Secure Boot disponible ? Activez-le après avoir confirmé que vous êtes en mode UEFI et que la chaîne de chargeur est saine.
  • Fonctions de virtualisation (VT‑x/AMD‑V, SVM, IOMMU) peuvent compter pour VBS/Hyper‑V. Vérifiez, ne devinez pas.

Troisième point : pilotes et posture de mises à jour

  • Pilotes GPU disponibles ? L’adaptateur d’affichage basique suffit pour le jour d’installation, pas pour la vie quotidienne.
  • Wi‑Fi/Ethernet fiable ? Si le réseau est instable, la distribution des mises à jour deviendra votre ennemie.
  • Historique Windows Update sur cet appareil : s’il échoue déjà sur Windows 10, il ne s’améliorera pas magiquement.

Faites ces trois passes et vous saurez si vous vous apprêtez à une mise à niveau propre ou à adopter un loisir de dépannage à long terme.

Tâches pratiques : commandes, sorties, décisions (12+)

Voici des vérifications réelles que vous pouvez lancer soit sur l’installation Windows actuelle (recommandé), soit immédiatement après une installation de Windows 11. Chaque tâche inclut : la commande, l’apparence normale de la sortie et la décision à prendre.

Task 1: Identify BIOS mode (UEFI vs Legacy)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-ComputerInfo | Select-Object BiosFirmwareType"
BiosFirmwareType
----------------
Uefi

Sens : Uefi est ce que vous voulez pour Secure Boot et la posture Windows 11 la plus propre.

Décision : Si c’est Legacy, planifiez la conversion MBR→GPT et le basculement du firmware vers UEFI avant d’activer Secure Boot.

Task 2: Confirm partition style (GPT vs MBR)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-Disk | Select-Object Number,FriendlyName,PartitionStyle,Size"
Number FriendlyName            PartitionStyle          Size
------ ------------            --------------          ----
0      Samsung SSD 860 EVO     GPT             500105249280

Sens : GPT prend en charge proprement les partitions de démarrage et de récupération modernes.

Décision : Si le disque OS est MBR, décidez : conversion in‑place (avec prudence) ou installation propre sur GPT.

Task 3: Measure disk health via SMART status

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-PhysicalDisk | Select-Object FriendlyName,MediaType,HealthStatus,OperationalStatus"
FriendlyName         MediaType HealthStatus OperationalStatus
------------         --------- ------------ -----------------
Samsung SSD 860 EVO  SSD       Healthy      OK

Sens : « Healthy/OK » est le minimum.

Décision : Si vous voyez Warning ou un statut opérationnel bizarre, remplacez le disque avant de mettre à niveau. Les migrations OS amplifient les disques marginaux.

Task 4: Confirm TRIM is enabled (SSD longevity/perf)

cr0x@server:~$ powershell.exe -NoProfile -Command "fsutil behavior query DisableDeleteNotify"
DisableDeleteNotify = 0

Sens : 0 signifie que TRIM est activé.

Décision : Si c’est 1, enquêtez sur le pilote/le stack de stockage ; sa désactivation peut causer une dégradation de performance à long terme sur les SSD.

Task 5: Check TPM presence and version

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-Tpm | Format-List"
TpmPresent                : True
TpmReady                  : True
TpmEnabled                : True
TpmActivated              : True
ManufacturerIdTxt         : IFX
ManufacturerVersion       : 7.63.3353.0
ManagedAuthLevel          : Full
OwnerAuth                 :

Sens : Le TPM est présent et prêt. C’est le scénario « ne pas contourner »—utilisez-le.

Décision : Si TpmPresent est False, vous choisissez entre contourner et remplacer le matériel. S’il est présent mais pas prêt, corrigez les paramètres du firmware d’abord.

Task 6: Check Secure Boot state

cr0x@server:~$ powershell.exe -NoProfile -Command "Confirm-SecureBootUEFI"
True

Sens : Secure Boot est activé.

Décision : Si ça renvoie une erreur ou False, ne paniquez pas immédiatement. Confirmez que vous êtes en mode UEFI ; puis décidez d’activer Secure Boot (recommandé) ou d’accepter le risque.

Task 7: CPU model identification (stop guessing)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-CimInstance Win32_Processor | Select-Object Name,NumberOfCores,NumberOfLogicalProcessors"
Name                                      NumberOfCores NumberOfLogicalProcessors
----                                      ------------- -------------------------
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz   4             8

Sens : Vous savez exactement ce que vous avez.

Décision : Si le CPU est plus ancien que les listes supportées par Microsoft, vous pouvez quand même continuer—mais traitez les mises à jour et les fonctionnalités de sécurité comme « vérifier, ne pas supposer ».

Task 8: RAM and memory pressure baseline

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-CimInstance Win32_ComputerSystem | Select-Object TotalPhysicalMemory"
TotalPhysicalMemory
-------------------
17179869184

Sens : 16 Go de RAM. Windows 11 respirera.

Décision : Si 8 Go, ça peut aller mais surveillez le démarrage. Si 4 Go, n’y pensez pas sauf pour un kiosque mono‑application et si vous aimez la douleur.

Task 9: Check virtualization features (VBS/Hyper-V readiness)

cr0x@server:~$ powershell.exe -NoProfile -Command "systeminfo | findstr /i \"Virtualization\""
Virtualization Enabled In Firmware: Yes
Second Level Address Translation: Yes
Virtualization-based Security Services Running: Not enabled

Sens : La virtualisation firmware est activée ; SLAT est supporté. Bon pour les fonctionnalités de sécurité modernes si vous choisissez de les activer.

Décision : Si la virtualisation est désactivée dans le firmware, décidez si l’activer vaut les compromis potentiels de performance/compatibilité pour votre charge de travail.

Task 10: Spot the real “slow PC” culprit: disk queue and latency

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-Counter '\\PhysicalDisk(_Total)\\Avg. Disk sec/Transfer' -SampleInterval 1 -MaxSamples 5"
Timestamp                 CounterSamples
---------                 --------------
2/4/2026 9:14:01 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.008
2/4/2026 9:14:02 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.010
2/4/2026 9:14:03 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.009
2/4/2026 9:14:04 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.008
2/4/2026 9:14:05 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.011

Sens : ~8–11ms de latence moyenne par transfert. C’est du style SSD et généralement acceptable.

Décision : Si vous voyez 0.050–0.200 (50–200ms) sous faible charge, vous êtes sur HDD ou le stack de stockage struggle. Réparez le stockage avant de blâmer Windows 11.

Task 11: Verify Windows Update health quickly

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-WindowsUpdateLog -LogPath $env:TEMP\WU.log; Select-String -Path $env:TEMP\WU.log -Pattern 'FATAL','0x800f','0x8024' -SimpleMatch | Select-Object -First 5"
C:\Users\alex\AppData\Local\Temp\WU.log: 2026/02/04 20:31:12.3456789 1234 5678 Agent  *FAILED* [800f081f]

Sens : Les codes d’erreur comme 800f081f indiquent souvent des problèmes du magasin de composants / de servicing.

Décision : Si des erreurs de mise à jour apparaissent de façon répétée, lancez des réparations de servicing (DISM/SFC) avant et après la mise à niveau ; les installations non supportées ont tendance à amplifier les bizarreries d’update.

Task 12: Check OS build and install channel

cr0x@server:~$ powershell.exe -NoProfile -Command "winver"
Microsoft Windows
Version 23H2 (OS Build 22631.3007)

Sens : Vous savez sur quoi vous êtes, ce qui compte pour le débogage des pilotes et des mises à jour.

Décision : Si vous êtes sur des builds Insiders sur du matériel non supporté, attendez‑vous à des secousses. Pour la stabilité, tenez‑vous aux canaux de release stables.

Task 13: Validate driver state for the GPU (avoid “Basic Display Adapter” life)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-PnpDevice -Class Display | Select-Object FriendlyName,Status,DriverVersion"
FriendlyName                       Status DriverVersion
------------                       ------ -------------
NVIDIA GeForce GTX 960             OK     31.0.15.5161

Sens : Le pilote constructeur réel est installé et sain.

Décision : Si vous ne voyez que « Microsoft Basic Display Adapter », préparez les bons pilotes avant de déclarer la réussite.

Task 14: Confirm BitLocker state (and avoid self-inflicted lockouts)

cr0x@server:~$ powershell.exe -NoProfile -Command "manage-bde -status C:"
BitLocker Drive Encryption: Configuration Tool version 10.0.22621
Volume C: [OSDisk]
    Size:                 476.04 GB
    BitLocker Version:    2.0
    Conversion Status:    Fully Encrypted
    Percentage Encrypted: 100.0%
    Protection Status:    Protection On
    Lock Status:          Unlocked
    Identification Field: None
    Key Protectors:
        TPM
        Numerical Password

Sens : BitLocker est activé et protégé par le TPM plus une méthode de récupération.

Décision : Avant de modifier les réglages firmware (TPM/PTT/fTPM, Secure Boot), assurez‑vous d’avoir sauvegardé la clé de récupération ailleurs que sur l’ordinateur lui‑même.

Task 15: Network driver sanity (because updates need networking)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-NetAdapter | Select-Object Name,Status,LinkSpeed,DriverInformation"
Name          Status LinkSpeed DriverInformation
----          ------ --------- -----------------
Ethernet      Up     1 Gbps    Intel(R) Ethernet Connection (2) I219-V
Wi-Fi         Up     866 Mbps  Intel(R) Dual Band Wireless-AC 8265

Sens : Les adaptateurs sont opérationnels avec les débits attendus.

Décision : Si le Wi‑Fi coupe ou si les infos de pilote sont vides/bizarres, stabilisez le réseau avant de compter sur Windows Update pour « se réparer tout seul ».

Méthodes de contournement qui ne vous saboteront pas plus tard

Il existe plusieurs façons courantes de contourner les exigences Windows 11. Certaines sont acceptables. D’autres sont « malignes » comme un pied-de-biche est « malin » pour ouvrir une porte : ça marche, mais vous paierez une nouvelle bâtière.

Method A: Fix the firmware instead of bypassing

C’est le meilleur « contournement » parce que ce n’en est pas un.

  • Activez le TPM dans le firmware (Intel PTT ou AMD fTPM).
  • Basculez en démarrage UEFI.
  • Activez Secure Boot.

Si votre carte mère supporte ces options et qu’elles sont simplement désactivées, faites‑le. Cela vous aligne sur le modèle de sécurité visé par Windows 11 et réduit les frictions de mise à jour.

Method B: Installer-time registry bypass (surgical, reversible-ish)

Les vérifications de l’installateur Microsoft peuvent être influencées pendant le setup. L’approche habituelle est de définir une politique « lab config » durant l’installation pour sauter certains contrôles. C’est un contournement, mais relativement contenu.

Opérationnellement, l’avantage est de pouvoir effectuer une installation propre tout en contrôlant le layout du disque (GPT/UEFI), et de garder Secure Boot si la machine le supporte, même si les contrôles CPU/TPM échouent.

Exemple de clés de contournement pendant le setup (depuis l’invite du programme d’installation):

cr0x@server:~$ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f
The operation completed successfully.

cr0x@server:~$ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f
The operation completed successfully.

cr0x@server:~$ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassCPUCheck /t REG_DWORD /d 1 /f
The operation completed successfully.

Sens : Vous avez demandé à Setup de sauter ces contrôles.

Décision : Contournez uniquement ce qui est strictement nécessaire. Si vous pouvez activer TPM/Secure Boot, faites‑le et évitez les clés de contournement pour ces éléments.

Method C: Media creation tools that offer “remove requirements” toggles

Des outils comme Rufus peuvent créer un média d’installation Windows 11 avec les contrôles retirés. Pour beaucoup d’utilisateurs, c’est la voie la moins sujette à erreurs car elle évite l’édition manuelle du registre en cours d’installation.

Compromis opérationnel : vous faites confiance à un outil pour faire exactement ce que vous pensez. C’est acceptable si vous l’avez obtenu d’une source réputée et que vous validez le résultat (état TPM, Secure Boot, santé des updates) après l’installation. Faites confiance, mais vérifiez—de préférence avec des commandes, pas des impressions.

Method D: In-place upgrade hacks

Les upgrades in‑place sur du matériel non supporté peuvent fonctionner, mais elles sont les plus salissantes du point de vue fiabilité. Vous héritez d’années de restes de pilotes, d’un état de servicing bizarre, de hooks d’AV tiers et d’utilitaires OEM « aider ».

Si vous tenez à la stabilité, préférez une installation propre sur un SSD sain avec des réglages firmware validés. Si vous devez faire un upgrade in‑place, prenez une image de sauvegarde avant et acceptez que le rollback puisse être votre meilleure fonctionnalité.

Une deuxième petite blague : si vous faites un upgrade in‑place non supporté sans sauvegarde, vous n’avez pas besoin de Windows 11—vous avez besoin d’un loisir qui implique moins de hurlements.

Après l’installation : ce qui compte encore (sécurité, fiabilité, performance)

Que vous ayez contourné ou non, Windows 11 reste Windows : un OS complexe reposant sur firmware, pilotes, stockage et vos choix. Voici ce qui m’importe réellement après l’installation.

1) La patchabilité est la vraie définition de « supporté »

Le matériel non supporté peut parfois recevoir des mises à jour normalement, jusqu’au jour où ça s’arrête. Votre travail est de détecter tôt le moment « où ça ne marche plus ».

  • Surveillez les échecs de mise à jour et les erreurs de servicing.
  • Gardez une clé USB de récupération bootable.
  • Conservez au moins une image de sauvegarde hors ligne récente.

2) La qualité des pilotes prime sur les specs brutes

Un CPU de 10 ans avec des pilotes chipset/GPU solides peut être plus agréable qu’une machine plus récente avec des pilotes génériques. Windows 11 n’est pas indulgent quand le pilote du contrôleur de stockage est instable ou que le pilote Wi‑Fi coupe en économie d’énergie.

Habituez‑vous à vérifier le Gestionnaire de périphériques pour les appareils inconnus et à relire les journaux d’événements pour les plantages de pilotes. Si un pilote réinitialise fréquemment, traitez‑le comme un incident de production : isolez, reproduisez, mettez à jour/retournez et validez.

3) Stockage : la latence est l’expérience utilisateur

L’interface Windows 11 rend la latence visible. Recherche, menu Démarrer, Explorateur, indexation, analyses Defender—tout est lié à l’I/O. Si vous contournez les exigences mais gardez un HDD, vous vous livrez à de l’ingénierie du chaos contre vous‑même.

4) Les fonctionnalités de sécurité sont des leviers, pas des trophées

TPM et Secure Boot sont utiles. VBS et Memory Integrity peuvent être utiles. Mais sur du matériel limite, tout activer peut causer des régressions de performance ou des incompatibilités de pilotes.

Décidez selon votre modèle de menace :

  • Portable professionnel avec données sensibles : priorisez BitLocker, Secure Boot, TPM et un processus de récupération testé.
  • Desktop familial pour jeux : vous pouvez accepter une posture de sécurité plus faible pour conserver performance et compatibilité des pilotes.
  • PC familial partagé : priorisez les mises à jour, la sécurité basique et une bonne hygiène du navigateur ; ne cherchez pas à activer tous les interrupteurs.

5) La fiabilité est volontairement ennuyeuse

Une citation (idée paraphrasée) qui sert depuis toujours les ops :

Werner Vogels (idée paraphrasée) : « Tout échoue un jour ; vous concevez des systèmes en supposant l’échec, pas en faisant semblant qu’il n’arrivera pas. »

Appliquez ça aux postes : ayez une clé de récupération, une sauvegarde, des médias de réinstallation et assumez qu’une mise à jour finira par partir en cacahuète.

Trois mini-récits d’entreprise depuis le terrain

Mini‑récit 1 : L’incident causé par une mauvaise hypothèse

Une PME voulait standardiser sur Windows 11 pour le déploiement d’une nouvelle application interne. Les achats ont affirmé que l’ancienne flotte « avait essentiellement un TPM » parce que la fiche technique du modèle l’évoquait.

L’IT a fait un pilote sur quelques machines. Ces unités avaient justement le TPM activé dans le firmware, et les upgrades semblaient corrects. Le feu vert a été donné pour quelques centaines de postes.

Le jour du déploiement, la file d’assistance a explosé. Une grande partie des appareils a échoué aux contrôles de conformité pour le chiffrement disque et le reporting de santé de périphérique. L’hypothèse n’était pas « le TPM existe », mais « le TPM est activé et provisionné ». Ce sont deux univers différents.

Le pire est arrivé quand certains utilisateurs ont tenté de « réparer » en modifiant les réglages du firmware à la maison. Un sous‑ensemble a déclenché des invites de récupération BitLocker sans avoir leurs clés de récupération accessibles. Appels paniqués et course pour récupérer les clés depuis les outils de gestion pour les machines encore en ligne.

La résolution fut simple : un script de pré‑validation vérifiant l’état du TPM, Secure Boot et la préparation BitLocker avant d’offrir la mise à niveau. La leçon n’était pas que Windows 11 est pointilleux. La leçon : inventoriez l’état, pas la capacité.

Mini‑récit 2 : L’optimisation qui a mal tourné

Une autre organisation a décidé d’« accélérer » l’expérience Windows 11 sur du matériel ancien en désactivant une série de fonctions de sécurité et de services en arrière‑plan à grande échelle. L’idée était compréhensible : moins de services, moins de cycles, utilisateurs plus heureux.

Ils ont poussé une politique désactivant la sécurité basée sur la virtualisation, ajustant la gestion d’alimentation et coupant des composants supposés optionnels. Les performances ont légèrement progressé sur quelques appareils limites. Tout le monde s’est félicité et est passé à autre chose.

Puis est arrivé un cycle de patch mensuel. Un ensemble d’appareils a commencé à échouer sur les mises à jour cumulatives et à revenir en arrière. Certains avaient l’état de servicing corrompu ; d’autres des conflits de pilotes révélés par la mise à jour. Les changements n’étaient pas la seule cause, mais ils ont retiré des garde‑fous qui rendaient le dépannage déterministe.

Pire, l’« optimisation » a créé une dérive de configuration : certaines machines avaient les anciens réglages, d’autres les nouveaux, d’autres encore avec des utilisateurs ayant ré‑activé manuellement des options. Le support ne pouvait pas reproduire les problèmes de façon fiable parce qu’il n’y avait plus une baseline unique—il y en avait cinq.

Ils ont fini par revenir à une baseline de sécurité standard et se concentrer sur la vraie contrainte : le stockage. Beaucoup des machines affectées étaient encore sur des SSD SATA vieillissants avec forte amplification d’écriture et santé limite. Le supposé problème CPU était surtout un problème I/O déguisé.

Mini‑récit 3 : La pratique ennuyeuse mais correcte qui a sauvé la mise

Un environnement régulé avait besoin de Windows 11 pour une application vendor, mais le parc matériel était mixte avec certains CPU non supportés. L’équipe a choisi une approche pragmatique : contourner seulement si nécessaire, mais traiter les endpoints comme des systèmes de production.

Ils ont construit un déploiement piloté par checklist : vérification de la version du firmware, état du TPM, Secure Boot, santé du disque, puis mise à niveau. Chaque appareil a eu une image de sauvegarde avant la première tentative. Pas d’exceptions.

Pendant le déploiement, un petit sous‑ensemble a commencé à échouer au démarrage après activation de Secure Boot. L’équipe n’a pas paniqué. Ils ont utilisé les sauvegardes, restauré l’image de dernier bon état, puis investigué les bizarreries de firmware en groupe de test contrôlé.

Il s’est avéré qu’une version spécifique du BIOS avait un bug lors de l’enregistrement des clés pendant la transition Secure Boot. Mettre à jour le firmware d’abord a résolu le problème. Parce qu’ils avaient un processus standard et des sauvegardes, l’« incident » n’a été qu’un retard mineur, pas un arrêt de l’activité.

La pratique qui les a sauvés n’était pas exotique. Elle était « ennuyeuse » : sauvegardes, déploiement par étapes, et refuser de traiter les upgrades endpoint comme une aventure « cliquer‑suivant ».

Erreurs courantes : symptôme → cause racine → correction

C’est là que la plupart des installations Windows 11 « non supportées » échouent : pas pendant l’installation, mais dans les semaines qui suivent.

1) Symptom: Random stutters, Start menu lag, Explorer hangs

  • Cause racine : OS installé sur HDD ou sur un SSD en mauvaise santé/firmware ; tâches en arrière‑plan causant de la contention I/O.
  • Correction : Déplacez l’OS sur un SSD sain. Validez la latence avec des compteurs de performance. Vérifiez SMART/santé. Ne touchez pas aux réglages UI tant que le stockage n’est pas validé.

2) Symptom: Windows Update fails repeatedly (rollback loops)

  • Cause racine : magasin de composants corrompu, conflits de pilotes ou problèmes de servicing amplifiés par le chemin de mise à niveau.
  • Correction : Réparez le magasin de composants (DISM/SFC), retirez temporairement les AV/agents tiers problématiques, mettez à jour les pilotes chipset/stockage, puis réessayez.

3) Symptom: BitLocker recovery prompt after BIOS changes

  • Cause racine : modifications des mesures TPM (réinitialisation du TPM, basculement Secure Boot, mise à jour du firmware) et BitLocker demande la clé de récupération.
  • Correction : Récupérez la clé de récupération, démarrez, puis suspendez BitLocker avant de futurs changements firmware et reprenez‑le après. Ne basculez pas le TPM au hasard.

4) Symptom: No Wi‑Fi after install

  • Cause racine : pilote constructeur manquant ; puce Wi‑Fi ancienne non couverte par les pilotes inbox.
  • Correction : Pré‑téléchargez les pilotes ou utilisez Ethernet/tethering USB. Si l’adaptateur est vraiment non supporté, remplacez‑le par une carte/dongle compatible.

5) Symptom: Can’t enable Secure Boot (option missing or greyed out)

  • Cause racine : le système démarre en mode Legacy, le disque est MBR ou le CSM est activé.
  • Correction : Convertissez le disque en GPT si approprié, basculez le firmware en UEFI, désactivez le CSM, puis activez Secure Boot.

6) Symptom: Blue screens after enabling Memory Integrity / VBS

  • Cause racine : pilotes anciens (souvent stockage, virtualisation, anti‑triche ou utilitaires bas niveau) incompatibles avec HVCI.
  • Correction : Mettez à jour/remplacez les pilotes, retirez les utilitaires OEM bas niveau, ou laissez la fonctionnalité désactivée sur cet appareil. La stabilité prime sur la case cochée.

7) Symptom: “TPM not detected” even though hardware supports it

  • Cause racine : TPM désactivé dans le firmware (PTT/fTPM off) ou mal configuré après un reset du BIOS.
  • Correction : Activez le TPM dans le firmware, mettez à jour le BIOS si nécessaire, et confirmez avec Get-Tpm. Ne vous fiez pas aux fiches techniques marketing.

Listes de contrôle / plan pas à pas

Voici le plan que je remettrais à un collègue et qui donnerait des résultats cohérents. Choisissez le chemin qui correspond à votre appétence pour le risque.

Plan A (meilleur) : satisfaire les exigences via firmware + corrections de stockage

  1. Sauvegarder : image disque vers un périphérique externe. Vérifiez qu’elle se monte/se lit.
  2. Vérifier la santé du disque et remplacer les disques défaillants avant tout changement d’OS.
  3. Confirmer UEFI + GPT. Convertir si nécessaire.
  4. Activer le TPM (PTT/fTPM) dans le firmware.
  5. Activer Secure Boot une fois le mode de démarrage correct.
  6. Mettre à jour le BIOS/UEFI vers une version stable (pas beta sauf si vous aimez la roulette).
  7. Mettre à niveau/installer Windows 11 normalement.
  8. Validation post‑install : succès Windows Update, pilotes OK, latence disque raisonnable, comportement BitLocker compris.

Plan B (contournement pragmatique) : contourner seulement ce qui est nécessaire

  1. Sauvegarder (image) et exporter les clés de récupération BitLocker si le chiffrement est activé.
  2. Passer au SSD si vous n’y êtes pas déjà.
  3. Utiliser UEFI + GPT même si vous contournez les contrôles TPM/CPU. Vous voulez toujours une fiabilité de démarrage moderne.
  4. Préférer le contournement au moment de l’installation ou des outils médias réputés pour garder les changements contenus.
  5. Installer propre quand c’est possible. Les upgrades in‑place sont pour quand vous êtes piégé par des apps.
  6. Valider immédiatement la santé des updates et l’état des pilotes après l’installation.
  7. Décider consciemment des fonctionnalités de sécurité : BitLocker, Secure Boot, VBS. Activez ce qui est stable sur votre hardware.

Plan C (ne pas faire) : « livrer » sans chemin de récupération

  • Pas de sauvegarde.
  • Disque de démarrage HDD.
  • Paramètres BIOS inconnus.
  • Scripts aléatoires des forums appliqués aveuglément.

Si c’est votre plan, la bonne étape suivante est d’arrêter et de suivre Plan A ou B.

Notes opérationnelles : les détails qu’on oublie jusqu’à ce que ça fasse mal

Modifications firmware et BitLocker : suspendre avant de toucher

Si BitLocker est activé, changer Secure Boot ou les réglages TPM peut déclencher le mode récupération. Ce n’est pas BitLocker qui est « cassé ». Il fait son travail.

Avant des changements planifiés du firmware, suspendez la protection, effectuez le changement, démarrez correctement, puis reprenez. Vérifiez que vous pouvez récupérer les clés depuis l’endroit où vous les stockez.

État du magasin de composants : garder le servicing propre

Les installations non supportées sont parfois accusées d’échecs qui sont en réalité de la corruption de servicing Windows portée depuis longtemps. Si les updates semblent hantés, réparez le servicing.

cr0x@server:~$ powershell.exe -NoProfile -Command "DISM /Online /Cleanup-Image /ScanHealth"
Deployment Image Servicing and Management tool
Version: 10.0.22621.1

Image Version: 10.0.22631.3007

No component store corruption detected.
The operation completed successfully.

Sens : Le magasin de servicing est propre.

Décision : Si une corruption est détectée, lancez /RestoreHealth avant de chasser des pilotes ou d’accuser « non supporté ».

cr0x@server:~$ powershell.exe -NoProfile -Command "sfc /scannow"
Beginning system scan. This process will take some time.

Windows Resource Protection did not find any integrity violations.

Sens : Les fichiers système semblent cohérents.

Décision : S’il trouve des violations qu’il ne peut pas réparer, vous êtes sur du territoire de réparation in‑place ou d’installation propre.

Journaux d’événements : votre meilleur outil « pourquoi »

Quand quelque chose est instable—reprise de veille, reset de pilote, échecs d’update—allez voir les logs. Windows est bruyant, mais pas muet.

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-WinEvent -LogName System -MaxEvents 20 | Select-Object TimeCreated,Id,LevelDisplayName,ProviderName,Message | Format-Table -AutoSize"
TimeCreated           Id LevelDisplayName ProviderName               Message
-----------           -- ---------------- ------------               -------
2/4/2026 9:01:12 PM  41 Critical         Microsoft-Windows-Kernel-Power The system has rebooted without cleanly shutting down first.
2/4/2026 8:59:44 PM 129 Warning          storahci                    Reset to device, \Device\RaidPort0, was issued.

Sens : Avertissements de reset stockage plus reboot inattendu est une signature classique d’« instabilité du stack de stockage ».

Décision : Mettez à jour les pilotes/firmware du contrôleur de stockage, vérifiez les câbles (sur desktop), contrôlez la santé du SSD. Ne perdez pas de temps à tweaker l’UI.

FAQ

1) Les mises à jour Windows 11 cesseront‑elles de fonctionner sur du matériel non supporté ?

Parfois elles continuent longtemps. Parfois une cumulative update ou feature update devient la falaise. Si vous contournez, surveillez le succès des updates et gardez un plan de rollback.

2) Est‑il plus sûr de contourner le TPM ou Secure Boot ?

Si votre matériel les supporte, ne contournez ni l’un ni l’autre—activez‑les correctement. Si vous devez contourner quelque chose, contourner les contrôles CPU est souvent moins immédiatement risqué que d’exécuter sans Secure Boot sur un portable qui voyage.

3) Puis‑je activer le TPM après une installation avec contournement ?

Souvent oui, si la plateforme a un TPM firmware (PTT/fTPM) et qu’il est juste désactivé. Mais activer le TPM après coup peut impacter le chiffrement et les fonctionnalités d’identité. Faites‑le délibérément et gardez les clés de récupération à portée.

4) Devrais‑je faire une mise à niveau in‑place ou une installation propre ?

Installation propre si vous tenez à la fiabilité. Upgrade in‑place si vous êtes contraint par des applications installées, l’état utilisateur ou des contrôles d’entreprise—et si vous avez une image de sauvegarde vérifiée.

5) Windows 11 tourne‑t‑il bien sur des CPU anciens si j’ai un SSD ?

Généralement c’est « acceptable » et utilisable, surtout avec 16 Go de RAM et des pilotes décents. Le risque principal est le support des pilotes et l’apparition occasionnelle d’une fonctionnalité de sécurité provoquant des problèmes de performance ou de stabilité.

6) Activer VBS/Memory Integrity ralentira‑t‑il ma machine ?

Ça peut, surtout sur des CPU plus anciens ou sur des charges lourdes en I/O et en changements de contexte. Testez sur votre charge. Si vous observez des régressions mesurables ou des instabilités de pilotes, priorisez la stabilité et revenez dessus plus tard.

7) Puis‑je utiliser BitLocker sans TPM 2.0 ?

Oui, mais vous devrez peut‑être utiliser des protecteurs par mot de passe/clé USB, et l’expérience sera moins fluide. La protection avec TPM est généralement plus pratique et plus sûre quand elle est disponible.

8) Quel est le prédicteur unique le plus important d’une bonne expérience Windows 11 sur du matériel « non supporté » ?

Le stockage. Un SSD sain avec une latence raisonnable vaut presque tout le reste. Ensuite : disponibilité des pilotes, puis maturité du firmware.

9) « This PC can’t run Windows 11 » est‑il toujours exact ?

Il est exact par rapport aux exigences de Microsoft, pas par rapport à la capacité physique d’exécuter l’OS. La question est de savoir si vous pouvez l’exploiter en sécurité et le tenir patché sans drame.

10) Si je contourne maintenant, suis‑je coincé pour toujours ?

Non, mais vous devriez prévoir un avenir où vous remplacez l’appareil ou revenez en arrière. Gardez les médias d’installation et les sauvegardes, et évitez les tweaks uniques que vous ne pouvez pas reproduire.

Étapes suivantes

Faites cela dans l’ordre et vous éviterez la plupart des blessures auto‑infligées :

  1. Inventaire de la réalité : lancez les vérifications ci‑dessus (UEFI/GPT, TPM, Secure Boot, santé disque, latence).
  2. Réparez le stockage d’abord : si vous n’êtes pas sur un SSD sain, arrêtez‑vous et corrigez ça.
  3. Activez les fonctions firmware plutôt que de les contourner quand c’est possible.
  4. Choisissez une installation propre sauf raison impérieuse contraire.
  5. Contournez uniquement ce qui est nécessaire, et documentez ce que vous avez changé.
  6. Validez après installation : mises à jour, pilotes, journaux d’événements, latence disque, comportement du chiffrement.
  7. Gardez un plan de rollback : images de sauvegarde et médias de récupération ne sont pas optionnels quand vous opérez hors des garde‑fous.

L’objectif n’est pas de « battre » l’installateur. L’objectif est une machine qui démarre proprement, se met à jour proprement et ne transforme pas vos soirées en archéologie médico‑légale.

Dimensionnement des alimentations pour serveurs — Arrêtez de deviner, commencez à mesurer

La façon la plus rapide de vous ridiculiser dans un datacenter est de « savoir » qu’un serveur est une boîte de 500W parce que la fiche technique le dit—jusqu’à ce qu’une mise à jour
de firmware fasse tourner les ventilateurs comme des réacteurs, que le disjoncteur saute, et que votre « petite somme » se transforme en ticket d’incident avec votre nom dessus.

L’alimentation est une dépendance de production. Traitez-la comme telle. Si vous savez tracer la latence, vous savez tracer les watts. Et si vous pouvez mesurer les watts, vous pouvez
arrêter d’acheter des alimentations comme si vous choisissiez des pneus d’hiver à l’intuition.

Pourquoi le dimensionnement des alimentations est un problème SRE, pas un problème d’achat

Le dimensionnement des alimentations est souvent vu comme une case à cocher procurement : choisir une puissance, indiquer « redondant », expédier. En production, cette approche échoue pour la même
raison que « on ajoutera juste des nœuds » échoue : elle ignore les limites physiques qui claquent en premier.

L’alimentation est l’endroit où votre charge de travail rencontre la physique. Les pics de workload deviennent des pics de courant. Le comportement du firmware devient la puissance des ventilateurs.
Une nouvelle carte réseau devient quelques watts supplémentaires que vous n’aviez jamais budgétisés. Et la partie la plus humiliante : quand l’alimentation déraille, les symptômes n’annoncent pas toujours
« alimentation ». Vous obtenez des disques instables, des réboots surprises, des réinitialisations de NIC, des capteurs BMC corrompus, ou des panics kernel « aléatoires ». Les problèmes d’alimentation se déguisent en problèmes logiciels.

Vous voulez trois résultats :

  • Pas d’incidents causés par des disjonctions, surcharge d’alimentation ou baisses de tension.
  • Pas de gaspillage dû à des alimentations massivement surdimensionnées fonctionnant à faible charge inefficace.
  • Rétablissement rapide lorsqu’une alimentation tombe, qu’un circuit chute ou qu’un PDU vous ment.

Si votre méthode actuelle de dimensionnement est « additionner les TDP et arrondir à la hausse », vous faites tourner la production sur de l’espoir. L’espoir n’est pas une source d’alimentation.

Faits intéressants et un peu d’histoire (pour que vous cessiez de répéter de vieilles erreurs)

  1. Les premières alimentations PC étaient centrées sur des charges lourdes en 5V. Les serveurs modernes sont largement centrés sur le 12V, et la conversion DC-DC a migré sur la carte.
  2. ATX12V (début des années 2000) a poussé plus de puissance vers le 12V pour alimenter les CPU, changeant l’importance des « rails » et des limites de courant dans les vraies configurations.
  3. 80 PLUS (milieu des années 2000) a fait de l’efficacité un argument marketing et d’achat, mais ses points de test ne couvrent pas vos charges de travail impulsionnelles.
  4. Les datacenters ont basculé de la pensée « un gros UPS » vers des UPS distribués et des PDUs intelligents, rendant la mesure plus simple—si vous l’utilisez vraiment.
  5. Les alimentations redondantes sont devenues la norme non pas parce qu’elles sont sexy, mais parce que le hot-swap d’une alimentation vaut mieux qu’une fenêtre de maintenance à 2h du matin.
  6. Les CPU et GPU modernes ont introduit des comportements de boost agressifs ; la puissance instantanée peut dépasser le « TDP » de façons que les dossiers procurement mentionnent rarement.
  7. Les courbes des ventilateurs ont changé la donne : des ventilateurs haute pression statique peuvent consommer une puissance significative en pleine vitesse, et une mise à jour de firmware peut altérer ce comportement du jour au lendemain.
  8. La densité en rack a explosé avec la virtualisation et les GPU ; la puissance et le refroidissement sont devenus les premières contraintes, pas les unités en rack.
  9. La coordination des disjoncteurs dans les installations a évolué, mais les disjoncteurs réagissent encore plus vite que vos alertes parfois—surtout lors d’inrush.

Un modèle mental sain : moyenne, pic et les secondes gênantes entre les deux

Les erreurs de dimensionnement viennent de l’utilisation d’un seul chiffre alors qu’il en faut au moins trois :

  • Moyenne en régime permanent : ce que le serveur consomme la plupart du temps.
  • Pic soutenu : ce qu’il tire pendant le vrai travail, pas les calculs synthétiques « TDP ».
  • Transitoire/inrush : ce qu’il tire au démarrage, lors d’un spin-up simultané de disques, d’un ramping de ventilateurs ou de pics GPU.

Ajoutez un quatrième si vous avez de la redondance :
mode mono-alimentation—car dans une configuration 1+1, vous devez quand même survivre avec une seule alimentation sans vous effondrer.

Ce que « puissance PSU » signifie réellement

Une alimentation « 1200W » est typiquement spécifiée pour une certaine tension d’entrée, température, flux d’air, et parfois altitude. Elle implique aussi une puissance DC maximale en sortie dans ces
conditions. Elle ne signifie pas que votre système peut tirer en toute sécurité 1200W en continu dans n’importe quel rack, à n’importe quelle température, sur n’importe quelle alimentation,
pendant que les moutons de poussière montent un fonds d’investissement isolant à l’intérieur du châssis.

Une citation à garder au mur

« L’espoir n’est pas une stratégie. » — Gen. Gordon R. Sullivan

Pas un SRE, mais le sentiment est cruellement pertinent. En planification de puissance, « ça ne montera probablement pas » est de l’espoir déguisé en ingénierie.

Blague #1 : Une alimentation de serveur, c’est comme un parachute : si vous découvrez qu’elle est sous-dimensionnée quand vous en avez besoin, vous allez passer une mauvaise journée.

Ce qu’il faut mesurer (et ce que les fiches techniques ne vous diront pas)

Les fiches techniques sont écrites pour vendre du matériel, pas pour garder votre cluster en vie. Elles sont utiles—mais seulement comme conditions limites. Votre travail est de
mesurer la réalité dans votre environnement, avec votre firmware, et votre mix de charges.

Mesurer à plusieurs niveaux

  • Puissance d’entrée mur/PDU : ce que vous payez et ce qui fait sauter les disjoncteurs.
  • Sortie PSU (rarement visible directement) : ce que le système consomme en termes DC.
  • Indices au niveau composant : puissance package CPU, puissance GPU, activité des disques, RPM et PWM des ventilateurs.

Connaître les limites qui comptent

  • Circuit branché (calibre du disjoncteur ; les pratiques de dérating de charge continue varient selon la région et le code).
  • PDU et prise limites (C13/C14 vs C19/C20, calibre du cordon, limites par prise).
  • Puissance unitaire PSU selon votre tension d’entrée (piège fréquent : performances 120V vs 208/230V et marge disponible).
  • Mode redondance (partage de charge vs actif/standby ; et si la plateforme peut survivre sur une seule alimentation à pleine charge).

Ne confondez pas ces termes

  • TDP : un point de conception thermique, pas un plafond contractuel de puissance.
  • PL1/PL2 (et équivalents constructeurs) : politique de puissance soutenue vs boost ; le firmware peut les modifier.
  • Puissance apparente (VA) vs puissance active (W) : les UPS et PDUs peuvent rapporter l’un ou l’autre ; le facteur de puissance compte quand vous êtes près des limites.

Tâches de mesure pratiques (commandes, sorties, décisions)

Vous ne pouvez pas « architecturer » votre chemin hors de la mesure. Voici des tâches concrètes et exécutables. Chacune a : une commande, ce que signifie la sortie, et la décision qu’elle soutient.
Utilisez-les pour construire un profil de puissance par modèle de serveur et par classe de charge.

Task 1: Read BMC-reported instantaneous power (IPMI)

cr0x@server:~$ ipmitool sensor | egrep -i 'Power|Pwr Consumption|Watts'
Pwr Consumption   | 312        | Watts      | ok

Signification : Le BMC estime que le système tire ~312W en ce moment (souvent la puissance d’entrée, parfois calculée).
Décision : Si c’est loin de votre attente, validez la source BMC contre la mesure PDU avant de lui faire confiance pour la planification de capacité.

Task 2: Pull power history / min-max if the platform exposes it

cr0x@server:~$ ipmitool sdr elist | egrep -i 'Pwr|Power'
System Level      | 00h | ok  |  3.1 | Power Meter
System Level      | 01h | ok  |  3.2 | Power Max
System Level      | 02h | ok  |  3.3 | Power Min

Signification : Certains vendeurs exposent max/min depuis le boot ou la réinitialisation.
Décision : Si le max est proche des limites PSU ou circuit, ne l’« moyennez » pas. Prévoyez-le ou limitez-le.

Task 3: Measure CPU package power limits and current draw (Intel RAPL via powercap)

cr0x@server:~$ sudo cat /sys/class/powercap/intel-rapl:0/constraint_0_power_limit_uw
225000000

Signification : 225,000,000 µW = 225W limite package long terme (style PL1) pour ce domaine RAPL.
Décision : Si votre dimensionnement PSU supposait « CPU = 165W », mais que le firmware permet 225W soutenu, mettez à jour votre budget ou imposez une limite.

Task 4: Sample RAPL energy to estimate average CPU power over an interval

cr0x@server:~$ E1=$(cat /sys/class/powercap/intel-rapl:0/energy_uj); sleep 10; E2=$(cat /sys/class/powercap/intel-rapl:0/energy_uj); echo $(( (E2-E1)/10000000 ))
186

Signification : Environ 186W en moyenne pour ce package sur 10 secondes (énergie en µJ divisée par 10s).
Décision : Identifiez les charges avec une puissance CPU soutenue élevée ; ce sont elles qui transforment un « pic » en événement fréquent.

Task 5: Check GPU power draw and limits (NVIDIA)

cr0x@server:~$ nvidia-smi --query-gpu=name,power.draw,power.limit,clocks.sm --format=csv,noheader
NVIDIA A10, 126.54 W, 150.00 W, 1395 MHz

Signification : La puissance GPU en temps réel est de 126W, avec une limite à 150W.
Décision : Pour les serveurs GPU, dimensionner sans télémétrie réelle GPU, c’est du cosplay. Si plusieurs GPU peuvent atteindre leur limite simultanément, budgétez ce pic.

Task 6: Verify current CPU frequency and throttle status (quick sanity check)

cr0x@server:~$ lscpu | egrep -i 'Model name|CPU max MHz|CPU MHz'
Model name:          Intel(R) Xeon(R) Gold 6338 CPU @ 2.00GHz
CPU max MHz:         3200.0000
CPU MHz:             2001.102

Signification : La fréquence actuelle n’est pas en boost ; sous charge elle peut grimper et augmenter la consommation.
Décision : Si vous observez une fréquence basse persistante sous charge, vous êtes peut-être limité en puissance ou en thermique—les deux renvoient à l’alimentation et au refroidissement.

Task 7: Check for power-related events in kernel logs

cr0x@server:~$ sudo journalctl -k -b | egrep -i 'power|brown|thrott|vrm|PSU|over current|watchdog' | tail -n 20
kernel: mce: [Hardware Error]: CPU 0: Machine Check: 0 Bank 27: b200000000070005
kernel: EDAC MC0: CPU power throttling detected

Signification : Le hardware/firmware rapporte du throttling ou des erreurs qui peuvent être liées à la distribution d’énergie (pas toujours, mais à corréler).
Décision : Si cela corrèle avec des pics ou des reboots, arrêtez de debugger une « instabilité aléatoire » et inspectez les feeds d’alimentation, les PSU et les thermiques.

Task 8: Check PSU status and redundancy mode via IPMI (if supported)

cr0x@server:~$ ipmitool sdr type 'Power Supply'
PS1 Status       | ok
PS2 Status       | ok
PS1 Input Power  | 165 Watts
PS2 Input Power  | 162 Watts

Signification : Les deux PSUs sont actifs et partagent la charge à peu près également.
Décision : Si vous vous attendiez à un mode 1+1 avec une unité au repos et une active, vous n’êtes peut‑être pas dans le mode de redondance attendu. Mettez à jour votre modèle de défaillance.

Task 9: Measure wall power via a metered rack PDU (SNMP example)

cr0x@server:~$ snmpget -v2c -c public pdu01 1.3.6.1.4.1.318.1.1.26.6.3.1.7.1
SNMPv2-SMI::enterprises.318.1.1.26.6.3.1.7.1 = INTEGER: 356

Signification : L’OID fournisseur retourne la puissance de la prise en watts (exemple : 356W). La sémantique des MIB varie ; confirmez les unités une fois, puis automatisez.
Décision : Utilisez les relevés PDU comme vérité terrain pour la planification de circuit et le risque de disjonction. Les lectures BMC sont « utiles », pas votre référence comptable.

Task 10: Check PDU outlet current to spot near-trip risk

cr0x@server:~$ snmpget -v2c -c public pdu01 1.3.6.1.4.1.318.1.1.26.6.3.1.5.1
SNMPv2-SMI::enterprises.318.1.1.26.6.3.1.5.1 = INTEGER: 28

Signification : Courant de la prise (exemple : 2.8A si l’appareil utilise des déci-ampères ; encore une fois dépendant du fournisseur).
Décision : Convertissez en ampères, comparez aux limites du circuit et de la prise PDU. Si vous êtes proche, n’ajoutez pas « juste un nœud de plus ».

Task 11: Correlate workload with power using a controlled load test (CPU)

cr0x@server:~$ sudo apt-get -y install stress-ng
...
cr0x@server:~$ stress-ng --cpu 32 --cpu-method matrixprod --timeout 60s --metrics-brief
stress-ng: info:  [8421] dispatching hogs: 32 cpu
stress-ng: metrc: [8421] cpu                60.00s  19184.12 bogo ops/s

Signification : Vous avez généré une charge CPU reproductible. Associez ceci à des relevés PDU/BMC simultanés.
Décision : Construisez une base de référence « pic CPU seul » par plateforme. Faites ensuite la même chose avec disque et réseau pour voir les pics combinés.

Task 12: Disk activity and drive count matter—measure it (storage load)

cr0x@server:~$ iostat -dx 2 3
Device            r/s     w/s   rMB/s   wMB/s avgrq-sz avgqu-sz await  svctm  %util
nvme0n1         820.0   110.0   128.0    24.0     358     2.10   2.1   0.6   55.0

Signification : Le stockage fait du vrai travail. Les disques et contrôleurs consomment plus en charge ; les HDD ont aussi des pics de spin-up.
Décision : Si votre pic de puissance coïncide avec des rebuilds/resyncs, budgétez la « puissance en mode défaillance », pas seulement la puissance en chemin heureux.

Task 13: Check for RAID/HBA controller battery/flash module charging events

cr0x@server:~$ sudo dmesg | egrep -i 'battery|cachevault|supercap|charging' | tail -n 20
megaraid_sas 0000:3b:00.0: CacheVault charging started

Signification : Les modules de protection de cache peuvent consommer de la puissance supplémentaire lors de la charge après maintenance ou longue inactivité.
Décision : Si vous avez eu des démarrages à froid ou des maintenances, attendez-vous à un pic temporaire de puissance. Ne le traitez pas comme des « watts mystères ».

Task 14: Check fan RPM and PWM—fans are not free

cr0x@server:~$ sudo ipmitool sdr | egrep -i 'FAN|RPM' | head
FAN1            | 7800   | RPM  | ok
FAN2            | 8100   | RPM  | ok

Signification : Un RPM élevé implique une consommation plus importante par les ventilateurs et indique souvent un stress thermique ou un changement de profil firmware.
Décision : Si vous voyez des vitesses de ventilateur élevées et soutenues, investiguez l’aération et les températures d’entrée ; votre budget de puissance et les thermiques PSU s’en trouvent affectés.

Task 15: Validate PSU input voltage (because 120V vs 208V matters)

cr0x@server:~$ ipmitool sensor | egrep -i 'Inlet|VIN|AC|Voltage' | head
PS1 Inlet Volt   | 208        | Volts     | ok
PS2 Inlet Volt   | 208        | Volts     | ok

Signification : Les PSUs voient 208V, ce qui améliore généralement l’efficacité et réduit le courant pour la même puissance.
Décision : Si vous êtes en 120V et poussez la densité, envisagez de passer à des alimentations en tension plus élevée si possible. C’est souvent le gain de capacité le plus simple.

Task 16: Quick-and-dirty inrush observation with PDU peak logging (if supported)

cr0x@server:~$ snmpget -v2c -c public pdu01 1.3.6.1.4.1.318.1.1.26.4.3.1.6.1
SNMPv2-SMI::enterprises.318.1.1.26.4.3.1.6.1 = INTEGER: 47

Signification : Un compteur « pic de courant depuis le dernier reset » (exemple). L’OID exacte dépend du fournisseur et du modèle.
Décision : Si le courant pic est bien au-dessus de l’état permanent, étalez les démarrages et évitez l’alimentation synchronisée après coupures.

Alimentations redondantes : 1+1 n’est pas toujours 1+1

Les alimentations redondantes sont vendues comme fiabilité. En pratique, elles n’apportent de la fiabilité que si vous les dimensionnez et alimentez correctement.
Deux alimentations ne garantissent pas que vous pourrez fonctionner à pleine puissance après la défaillance d’une unité. Cela dépend de :

  • Capacité par alimentation vs pic système.
  • Comportement de partage de charge (active/active ou actif/standby).
  • Comportement en capping lorsqu’une alimentation disparaît (certains systèmes se mettent automatiquement à limiter ; d’autres tombent simplement).
  • Indépendance des feeds (deux alimentations sur le même PDU n’est pas de la redondance ; c’est de l’optimisme avec un câble en plus).

Dimensionnement N+1 en termes simples

Si vous avez deux alimentations de 800W en configuration 1+1, la question pertinente est :
Le serveur peut‑il tourner au pic sur une seule alimentation de 800W ?
Si votre pic mesuré réel est de 780W au mur et que votre PSU se dérate à haute température d’entrée, vous n’êtes pas « safe ». Vous êtes équilibré sur une mince subtilité technique.

Le partage de charge n’est pas garanti

Si deux PSUs partagent mal (firmware, PSUs mal appariées, vieillissement ou câblage), une unité peut chauffer et fonctionner près de sa limite. Lorsqu’elle tombe, l’autre prend la charge supplémentaire
qui peut provoquer une deuxième défaillance ou un reboot. C’est le « double-tap de l’alimentation redondante », et ce n’est pas une expérience agréable.

Courant d’appel (inrush) : le disjoncteur se moque de vos tableaux

L’inrush est la surtension quand vous appliquez l’alimentation—chargement des condensateurs, démarrage des ventilateurs, spin-up des disques, réveil des GPU, et chaque régulateur décidant qu’il est temps de faire la fête.
Votre budget de puissance en régime permanent peut sembler correct alors que l’inrush fait sauter le disjoncteur lors d’un reboot massif.

Les équipes facilities s’en soucient parce que c’est la différence entre « l’alimentation rétablie » et « la moitié de la rangée reste dans le noir ». Vous devez vous en préoccuper parce qu’après un événement
datacenter, tout le monde va couper et remettre l’alimentation en même temps, et votre orchestrateur pourrait utilement faire la même chose simultanément.

Blague #2 : Les disjoncteurs sont comme les ingénieurs d’astreinte : ils tolèrent beaucoup, mais ils retiennent exactement une dernière paille.

Comment réduire le risque d’inrush

  • Échelonner les démarrages (PDUs, automatisation hors bande, ou crochets d’orchestration).
  • Éviter le ramping synchronisé des ventilateurs en déployant les firmwares par vagues contrôlées, pas par « toute la flotte le vendredi ».
  • Connaître le comportement des HDD : les réglages de spin-up échelonné sur les HBA peuvent sauver votre disjoncteur et votre fierté.
  • Mesurer le courant pic lorsque possible : certains PDUs et UPS mesurés consignent des pics et événements d’inrush.

Derating : température, altitude, poussière et pourquoi « 1200W » est parfois de la fantaisie

Les spécifications PSU supposent des conditions particulières. Puis vous installez le serveur dans un rack avec des blanking partiels, une allée chaude plus « suggestion tiède » qu’autre chose, et de la poussière
qui transforme les radiateurs en feutre.

Le dérating se manifeste par :

  • Moins de sortie disponible à des températures d’entrée plus élevées.
  • Plus de puissance consommée par les ventilateurs (ce qui augmente la consommation système et réduit l’efficacité).
  • Arrêt thermique plus précoce ou throttling protecteur.

La température est un multiplicateur de risque

Un serveur qui est « correct » à 18°C en entrée peut devenir fragile à 30°C en entrée lorsque l’une des alimentations tombe et que la restante fonctionne plus chaude et plus bruyante.
C’est le pire moment pour apprendre que votre hypothèse de redondance était basée sur une brochure de laboratoire.

L’altitude existe vraiment (oui, vraiment)

La haute altitude réduit la densité d’air, réduisant l’efficacité du refroidissement. Beaucoup de vendeurs spécifient un dérating au‑delà de certaines élévations. Vous pouvez l’ignorer si vous voulez,
mais l’alimentation ne sera pas convaincue par votre confiance.

Courbes d’efficacité : les watts que vous ne tirez pas vous coûtent quand même

L’efficacité n’est pas une constante. C’est une courbe. La plupart des PSUs sont les plus heureux quelque part autour de 40–60% de charge, selon la conception. À très faible charge, l’efficacité chute,
et vous gaspillez de la puissance en chaleur. À très haute charge, l’efficacité peut aussi chuter et les thermiques deviennent désagréables.

Le surdimensionnement par défaut donne l’impression d’être « sûr », mais il peut coûter de l’argent de trois façons :

  • Capex : les modèles d’alimentations plus gros coûtent plus cher.
  • Opex : une efficacité plus faible à l’inactivité sur une flotte n’est pas jolie sur la facture d’électricité.
  • Refroidissement : les watts gaspillés deviennent de la chaleur que votre installation doit évacuer.

Que faire au lieu de surdimensionner aveuglément

Mesurez votre pic réel et choisissez une alimentation telle que :

  • Votre régime permanent se situe dans la zone efficace de la courbe.
  • Votre pic soutenu reste sous un seuil conservateur (surtout en mode N+1).
  • Votre inrush ne fait pas sauter les circuits pendant les événements de flotte.

C’est moins glamour que d’acheter la plus grosse unité disponible. C’est aussi la façon d’éviter de passer vos weekends dans une allée froide avec une lampe torche.

Trois mini-histoires d’entreprise du pays du « ça devrait aller »

Mini-histoire 1 : L’incident causé par une mauvaise hypothèse

Une entreprise a déployé un nouveau lot de serveurs orientés stockage : beaucoup de disques, contrôleurs doubles et PSUs « redondantes ». Procurement a dimensionné les PSUs en ajoutant
TDP CPU, mémoire, et « un peu pour les disques ». Ils se sont aussi standardisés sur une alimentation 120V dans une salle legacy parce que « c’était déjà là ».

Tout semblait correct en régime permanent. Les racks étaient silencieux, les graphes de monitoring ennuyeux, et le déploiement a été déclaré réussi. Puis la facility a fait une maintenance planifiée.
Au retour de l’alimentation, toute la rangée a essayé de démarrer en même temps. Plusieurs disjoncteurs ont sauté immédiatement. Une poignée de racks ont redémarré à moitié : certains serveurs étaient en boot-loop,
certains ont perdu des disques, et quelques contrôleurs sont revenus dégradés.

Le postmortem a été désordonné parce que la première vague de debugging a visé le logiciel : versions du kernel, ordre de boot, firmware RAID. L’indice révélateur fut que les défaillances s’agglutinaient par rack et PDU,
pas par build OS. Quelqu’un a finalement extrait les logs de pic courant du PDU et les a comparés à la capacité du circuit.

La cause racine n’était pas que les serveurs tiraient « trop de puissance » en moyenne. C’était que l’inrush et le spin-up simultané des disques dépassaient la tolérance du disjoncteur en 120V, où le courant est plus élevé
pour la même puissance. Les PSUs « redondantes » n’ont pas aidé parce que la redondance ne protège pas un disjoncteur contre une surcharge.

La correction a été peu excitante : séquençage des démarrages, activation du spin-up échelonné sur les HBA, et déplacement des racks les plus denses vers des alimentations à tension plus élevée disponibles.
Ils ont aussi commencé à capturer la puissance pic au PDU comme test d’acceptation. Le prochain événement de maintenance s’est déroulé sans incident—ce qui est le meilleur type d’événement.

Mini-histoire 2 : L’optimisation qui a échoué

Une autre organisation s’est sérieusement engagée sur l’efficacité et a décidé de « right-size » de manière agressive. Ils ont remarqué que leurs serveurs idlaient entre 120–160W et ont conclu que
des PSUs plus petites amélioreraient l’efficacité à l’inactivité. Ils ont standardisé une config avec des PSUs de moindre puissance sur une nouvelle flotte compute.

Les tests en laboratoire semblaient bons. L’efficacité à l’inactivité s’est améliorée légèrement. Procurement a adoré la réduction de coût. La flotte a été déployée en production, où la charge était bursty—
pensez analytics batch mélangé avec trafic API en pics. Pendant les rafales, le boost CPU a poussé la puissance soutenue plus haut que prévu par quiconque.
C’était encore « dans la spécification » pour une seule alimentation—jusqu’à la défaillance d’un PSU.

En redondance 1+1, une seule alimentation devait maintenant supporter la charge complète. Sur le papier, elle le pouvait. En pratique, avec des températures d’entrée plus élevées et des conditions plus poussiéreuses
que le labo, la PSU restante a chauffé. Le firmware de la plateforme a répondu en bridé la performance. Le service n’est pas tombé, mais la latence est passée de « correcte » à « pourquoi la file fond ? ».
Les SREs l’ont perçu comme une régression logicielle parce que rien n’a planté. C’était juste lent et imprévisible.

L’échec n’était pas l’idée de right-sizing. C’était de le faire basé sur des tests d’inactivité en ignorant le mode défaillance N+1 et le dérating environnemental. La correction a été d’augmenter la taille PSU d’un cran,
d’imposer des caps de puissance sur les nœuds les plus bursty, et d’arrêter d’utiliser uniquement l’efficacité à l’inactivité comme métrique de succès. L’efficacité compte. La prévisibilité compte davantage.

Mini-histoire 3 : La pratique ennuyeuse mais correcte qui a sauvé la mise

Une équipe gérant une flotte mixte (quelques boîtes GPU, quelques nœuds stockage, quelques compute simples) avait une politique terne : chaque nouveau modèle matériel devait passer une « checklist de
caractérisation de puissance » avant d’entrer en production. Cela signifiait mesurer l’inactivité, le 50e centile de charge, le pic soutenu et l’inrush au boot—en utilisant le même modèle de PDU qu’en production.

La checklist demandait aussi de tester la redondance : retirer une alimentation sous charge et confirmer que le nœud reste stable, avec enregistrement de la puissance et des thermiques.
Ce n’était pas optionnel. Ce n’était pas « quand on a le temps ». C’était aussi obligatoire que les tests de rebuild RAID.

Un jour, un vendeur a livré une « révision mineure » d’un modèle serveur. Même famille SKU, même fiche marketing, firmware différent et comportement ventilateur légèrement modifié.
La caractérisation a révélé que la nouvelle révision avait un ramping de ventilateur beaucoup plus abrupt sous certains seuils de capteur, augmentant le pic de consommation suffisamment pour importer
quand une PSU tombait. Le système est resté en ligne, mais la marge a disparu.

Parce qu’ils disposaient de données de référence, cela n’est pas devenu un incident. Ils ont ajusté le placement en rack (densité plus faible par circuit pour cette révision), réglé les paramètres firmware
quand c’était possible, et mis à jour le budget de puissance. Un mois plus tard, une vraie défaillance PSU s’est produite en production pendant un job lourd. Le nœud est resté en ligne.
Aucun impact client. Pas d’héroïsme. Juste la satisfaction discrète d’une ingénierie ennuyeuse qui fonctionne comme prévu.

Guide de diagnostic rapide

Quand quelque chose sent l’alimentation—reboots aléatoires, défaillances corrélées par rack, chutes de performance après une défaillance PSU—ne vous égarez pas. Vérifiez dans cet ordre.
L’objectif est de trouver le goulot en minutes, pas après avoir réécrit la moitié de l’ordonnanceur.

Premier : confirmer ce qui échoue (nœud, rack, feed ou salle)

  • Les défaillances se regroupent-elles par rack/PDU ou par modèle matériel ?
  • Les événements sont-ils corrélés avec des boot storms, de la maintenance ou des pics de température ?
  • Voyez-vous des disjonctions ou des alarmes UPS ?

Deuxième : faites confiance au PDU/UPS pour la puissance d’entrée, puis recoupez avec le BMC

  • Vérifiez les watts/ampères par prise du PDU rack et tout compteur de pic.
  • Comparez aux watts rapportés par le BMC ; de grandes différences suggèrent des capteurs décalés ou des bugs firmware.
  • Validez la tension d’entrée. Une tension basse signifie plus de courant pour la même charge, et moins de marge.

Troisième : testez le comportement de redondance sous charge

  • En condition contrôlée, retirez une PSU et observez : la puissance saute‑t‑elle ? les ventilateurs montent‑ils en régime ? l’hôte est‑il bridé ?
  • Confirmez que chaque PSU est sur des feeds séparés et que les feeds sont réellement indépendants.
  • Si la performance change matériellement, considérez-le comme un risque de production, pas un « agréable à savoir ».

Quatrième : isoler les causes transitoires

  • Démarrage inrush et spin-up disque : cherchez des événements de pic PDU ou disjoncteur pendant la restauration de l’alimentation.
  • Changements firmware / courbe ventilateur : corrélez avec des mises à jour récentes.
  • Rafales de charge : corrélez avec la télémétrie CPU/GPU et le timing des incidents.

Erreurs courantes (symptôme → cause racine → fix)

1) Reboots aléatoires sous charge

Symptôme : Les hôtes rebootent quand des jobs batch démarrent ou que l’utilisation GPU grimpe.
Cause racine : Surcharge PSU ou problèmes de réponse transitoire ; parfois une seule PSU est faible/vieillissante et s’effondre sur une montée en charge rapide.
Fix : Mesurez au PDU pendant la charge. Testez avec une PSU retirée. Remplacez la PSU suspecte. Si les pics sont légitimes, augmentez la capacité PSU ou limitez la puissance.

2) Disjoncteurs qui sautent après maintenance ou rétablissement

Symptôme : Des racks entiers restent dans le noir, les disjoncteurs sautent juste quand tout se remet sous tension.
Cause racine : Courant d’appel plus boot synchronisé ; spin-up HDD et ramping ventilateur amplifient cela, surtout en 120V.
Fix : Échelonnez les démarrages. Activez le spin-up échelonné. Réduisez la densité par circuit ou passez à des feeds en tension plus élevée.

3) « Redondant » mais une défaillance provoque un effondrement de performance

Symptôme : Pas d’arrêt, mais des pics de latence et un effondrement du débit quand une PSU meurt.
Cause racine : Le mode mono-alimentation déclenche du capping ou du stress thermique ; la PSU restante chauffe et le firmware bride CPU/GPU.
Fix : Dimensionnez pour qu’une PSU puisse gérer le pic soutenu avec marge à la pire température d’entrée. Testez et documentez la performance en mode défaillance.

4) PDU montre des watts élevés, le BMC montre des watts faibles (ou l’inverse)

Symptôme : Deux chiffres « autoritaires » divergent de 20–40%.
Cause racine : Différents points de mesure (entrée vs calculé), dérive de calibration des capteurs ou bugs de firmware BMC.
Fix : Considérez PDU/UPS en entrée comme la vérité pour la facturation et les disjoncteurs. Utilisez le BMC pour les tendances. Calibrez une fois avec un wattmètre de référence si nécessaire.

5) Nouveau firmware provoque des dépassements du budget de puissance

Symptôme : Après une mise à jour BIOS/BMC, la puissance rack augmente ou la puissance ventilateur saute ; disjoncteurs ou alarmes UPS apparaissent.
Cause racine : Courbes ventilateur mises à jour, limites de boost CPU plus élevées, ou profils de puissance par défaut différents.
Fix : Re‑caractérisez la puissance après les changements de firmware. Verrouillez les profils de puissance. Déployez les mises à jour par vagues avec monitoring PDU.

6) « On a dimensionné par TDP » et maintenant tout est serré

Symptôme : Le calcul sur la plaque signalétique dit que vous êtes à l’aise ; les mesures réelles disent le contraire.
Cause racine : Le TDP n’est pas un plafond ; overhead plateforme, mémoire, disques, NICs, ventilateurs et comportement de boost n’ont pas été inclus.
Fix : Construisez un modèle de puissance mesuré par plateforme : inactivité, typique, pic soutenu, inrush et mode N+1. Arrêtez d’utiliser la somme des TDP comme réponse finale.

Listes de contrôle / plan étape par étape

Étape par étape : comment dimensionner une alimentation pour un modèle de serveur (sans deviner)

  1. Établissez la source de vérité de mesure. Utilisez les watts d’entrée mesurés par PDU/UPS pour la planification de capacité ; utilisez le BMC pour les tendances et l’état de redondance.
  2. Enregistrez les conditions d’entrée. Notez la tension d’entrée et la température d’entrée approximative pendant les tests. Les données de puissance sans conditions, c’est du commérage.
  3. Mesurez quatre points de puissance :
    • Inactivité (post‑boot, services stables)
    • Charge typique (mix représentatif de production)
    • Pic soutenu (test de stress correspondant aux vrais goulets)
    • Pic de démarrage/inrush (cold boot, pas warm reboot)
  4. Testez le comportement N+1. Sous charge, retirez une PSU et observez stabilité, throttling et comportement des ventilateurs. Enregistrez puissance et thermiques.
  5. Appliquez une marge intentionnelle. Ajoutez de la marge pour l’erreur capteur, la dérive environnementale, le vieillissement et la « surprise firmware ». Évitez le réflexe de doubler.
  6. Validez contre le circuit. Convertissez les watts en ampères à votre tension, et assurez‑vous de ne pas flirter avec les limites du circuit sous pics et inrush.
  7. Décidez de la taille PSU et de la redondance. Choisissez un modèle PSU où le mode mono‑alimentation reste stable au pic soutenu, avec une marge réelle.
  8. Documentez le profil. Stockez les valeurs mesurées et les conditions de test dans votre runbook matériel pour que la prochaine personne n’ait pas à refaire l’archéologie.
  9. Opérationnalisez le monitoring. Alarmez sur les augmentations inhabituelles, mais aussi sur la perte de redondance et les changements inattendus de partage de charge.
  10. Retestez après changements significatifs. BIOS/BMC, nouvelles NICs/HBAs, changements de modèle GPU ou shifts de workload méritent une nouvelle mesure.

Checklist : budget d’alimentation rack que vous pouvez défendre en réunion

  • Par rack : typique mesuré et pic mesuré, pas seulement une somme de nameplates.
  • Par circuit : ampérage à la tension réelle, avec hypothèse claire sur l’utilisation continue autorisée.
  • Plan inrush : procédure de démarrage échelonné documentée et testée.
  • Plan de redondance : PSUs sur feeds séparés ; PDUs sur upstreams séparés quand possible.
  • Tests d’acceptation : chaque nouveau modèle matériel passe une caractérisation de puissance avant déploiement.

Checklist : édition « on ajoute des GPU »

  • Mesurez la limite de puissance GPU par carte et confirmez l’enveloppe totale de la plateforme.
  • Confirmez les limites d’alimentation auxiliaire PCIe et des risers ; ne supposez pas que le câblage du châssis correspond au marketing GPU.
  • Testez le pic combiné CPU+GPU sous charges réelles (pas seulement synthétiques).
  • Confirmez le comportement de redondance quand une PSU est retirée sous charge GPU.
  • Validez le circuit de rack et le type de prise PDU (C13 vs C19) et les caps par prise.

FAQ

1) Puis‑je dimensionner une alimentation en additionnant les TDP des composants ?

Utilisez la somme des TDP seulement comme borne inférieure approximative. Les systèmes réels la dépassent par le comportement de boost, la puissance ventilateur, la charge des contrôleurs et les pics transitoires.
Mesurez au PDU.

2) Dois‑je toujours acheter l’option d’alimentation la plus puissante ?

Non. Le surdimensionnement peut coûter de l’argent et réduire l’efficacité à faible charge. Achetez pour le pic soutenu mesuré plus une marge, et assurez‑vous que le mode mono‑alimentation est sûr si vous
utilisez de la redondance.

3) Quelle marge devrais‑je ajouter ?

Il n’y a pas de chiffre universel. Ajoutez de la marge pour l’erreur de mesure, les changements environnementaux, le vieillissement et les ajouts futurs. La bonne marge est celle qui survive au mode
N+1 à la pire température d’entrée sans throttling ni instabilité.

4) Lequel est le plus fiable : watts BMC ou watts PDU ?

Pour la planification de capacité et les disjoncteurs : watts d’entrée PDU/UPS. Pour le trending par hôte et l’état de redondance : le BMC est utile. S’ils divergent, investiguez, mais budgétez sur le PDU.

5) Pourquoi la consommation augmente‑t‑elle après une mise à jour BIOS/BMC ?

Le firmware peut changer les limites de puissance CPU, les courbes ventilateur, le comportement de training mémoire et les defaults de gestion des périphériques. Traitez les mises à jour firmware comme un
changement matériel : re‑mesurez la puissance.

6) Comment la redondance des PSUs affecte‑t‑elle l’efficacité ?

En partage de charge, chaque PSU fonctionne à un pourcentage de charge inférieur, ce qui peut vous sortir de la zone optimale d’efficacité. En actif/standby, une PSU peut tourner près du point optimal tandis que l’autre
consomme de l’énergie en veille. Mesurez, n’assumez pas.

7) Que signifient VA vs W pour dimensionner UPS et circuits ?

W est la puissance active ; VA est la puissance apparente. Les UPS et PDUs peuvent indiquer l’un ou l’autre. Si le facteur de puissance n’est pas près de 1.0, le VA peut être significativement supérieur au W, et cela peut
devenir le facteur limitant pour la capacité UPS même quand les watts semblent corrects.

8) Comment éviter les disjoncteurs qui sautent lors des redémarrages de flotte ?

Échelonnez les démarrages, activez le spin-up échelonné des disques si applicable, et évitez un comportement d’orchestration « tous les nœuds en même temps ». Confirmez avec les logs de pic PDU et faites un test contrôlé.

9) Dois‑je encore me préoccuper des limites de rails PSU ?

Moins qu’à l’époque des polémiques multi‑rail desktop, mais oui dans certaines plateformes. Les PSUs serveur et les backplanes abstraient généralement cela, mais une forte densité GPU et la distribution de puissance
via les risers peuvent exposer des limites cachées. Si vous observez de l’instabilité sous charge GPU, vérifiez la distribution de puissance de la plateforme, pas seulement le total de watts.

10) Quelle méthode pratique pour limiter la puissance des serveurs et rester dans les limites ?

Utilisez les outils constructeurs ou les profils de firmware lorsque possible, et validez avec des mesures PDU. Pour les CPU, les limites basées sur RAPL peuvent aider, mais confirmez le comportement sous vos workloads—certains
workloads échangent latence contre watts de façon désagréable.

Prochaines étapes que vous pouvez faire cette semaine

  • Choisissez un modèle de serveur et créez un profil de puissance : inactivité, typique, pic soutenu, démarrage/inrush et résultats du test N+1.
  • Faites du PDU votre source de vérité pour la puissance d’entrée et les pics ; intégrez le polling SNMP dans votre pipeline de métriques.
  • Réalisez un test de redondance contrôlé : sous charge significative, retirez une PSU et observez throttling, ramping des ventilateurs et sauts de puissance.
  • Rédigez une procédure de démarrage échelonné et répétez‑la. Après une coupure, ce n’est pas le moment de découvrir que vos outils ne savent pas séquencer.
  • Mettez à jour votre spécification d’achat : exigez des PSUs/BMC mesurés quand c’est possible, et demandez aux vendeurs de déclarer le comportement en mode mono‑alimentation.
  • Recontrôlez après les mises à jour firmware. Traitez un « révision mineure » matérielle comme nouveau matériel jusqu’à ce que vous l’ayez mesuré.

L’objectif n’est pas de devenir ingénieur en puissance. C’est d’arrêter de traiter les watts comme du folklore. Mesurez, budgétez, testez les modes de défaillance, et passez aux problèmes qui sont réellement intéressants—comme pourquoi votre fenêtre de rebuild stockage est encore trop longue.

Craquements audio sur Windows 11 : corriger la latence sans acheter de nouveau matériel

Vous appuyez sur lecture et—snap, pop, craquement. Ce n’est pas la « chaleur du vinyle ». C’est votre machine Windows 11 qui manque des échéances comme un système de production avec une carte réseau en rafales.

La bonne nouvelle : la plupart des craquements audio sous Windows ne viennent pas d’une « mauvaise carte son ». C’est de la latence : des pilotes qui bloquent le CPU trop longtemps, la gestion d’alimentation qui fait des « trucs utiles », ou l’USB qui se comporte comme s’il était allergique au trafic soutenu. Nous allons diagnostiquer ça comme un SRE : mesurer, isoler, changer une chose à la fois, vérifier, et s’arrêter quand c’est ennuyeux.

Ce que sont vraiment les craquements : échéances manquées, pas du « mauvais son »

L’audio Windows est une chaîne presque temps réel qui tourne sur un OS à usage général. Ça fonctionne uniquement parce que des tampons masquent le jitter : l’application écrit des échantillons audio, le moteur audio les mixe, le pilote alimente le périphérique. Si quelque chose bloque le CPU assez longtemps pour que le prochain tampon ne puisse pas être livré à temps, vous l’entendez sous forme :

  • Craquements/pops : de brèves sous-exécutions—échantillons manquants.
  • Saccades : sous-exécutions répétées, ou boucles de resynchronisation sur Bluetooth.
  • Voix robotique/brouillée : dérive d’horloge, rééchantillonnage agressif, ou perte de paquets (fréquent sur Bluetooth).
  • Dropouts : réinitialisations de périphérique, événements d’alimentation USB, ou redémarrages de pilote.

Le terme d’ingénierie que vous verrez dans les outils est latence DPC/ISR :

  • ISR (Interrupt Service Routine) : gestionnaire rapide et de haute priorité pour une interruption matérielle.
  • DPC (Deferred Procedure Call) : travail planifié par une ISR pour s’exécuter peu après, toujours à priorité élevée.

Si un pilote accapare du temps DPC—réseau, GPU, stockage, ACPI, USB—l’audio ne peut pas s’exécuter quand il le faut. Votre utilisation CPU peut être de 10 % et l’audio peut quand même craquer, parce que ce n’est pas du « débit ». C’est de la « latence sous contention ».

Idée paraphrasée de Werner Vogels (CTO d’Amazon) : Tout échoue ; la résilience vient de la conception et de l’exploitation des systèmes pour tolérer et récupérer des pannes.

Même esprit ici. Nous ne visons pas la perfection. Nous éliminons les modes de panne qui transforment des retards d’ordonnancement mineurs en artefacts audibles.

Playbook de diagnostic rapide (faire dans cet ordre)

Premier : classer le craquement

  1. Seulement sur Bluetooth ? Allez à Audio Bluetooth saccadé.
  2. Seulement sur un DAC/casque USB ? Allez à USB et hubs.
  3. Seulement dans une application (Teams/Discord/jeu/DAW) ? Allez à Tampons côté application.
  4. Global au système (YouTube + audio local + notifications) ? C’est généralement DPC/pilotes/alimentation.

Deuxième : mesurer la latence, ne pas la sentir

  1. Exécutez un outil DPC (LatencyMon est le plus courant) et reproduisez le craquement.
  2. Si un pilote est signalé : ne désinstallez pas tout aveuglément. Confirmez avec des basculements ciblés de périphériques (voir tâches ci‑dessous).

Troisième : retirer les trois coupables principaux dans l’ordre le plus sûr

  1. Plan d’alimentation : passez à un plan stable, désactivez la suspension sélective USB, testez.
  2. Réseau : essayez de désactiver temporairement le Wi‑Fi, puis les offloads NIC, puis mise à jour/retour arrière du pilote.
  3. Pilotes GPU/audio HDMI : désactivez les points de terminaison « NVIDIA/AMD High Definition Audio » inutilisés, mettez à jour le pilote GPU avec une installation propre.

Quatrième : verrouiller un format audio connu‑bon

  1. Réglez 48 kHz (ou 44,1 kHz si votre flux de travail est centré musique), 24 bits.
  2. Désactivez les améliorations, désactivez l’audio spatial, testez le mode exclusif activé/désactivé selon votre usage.

Cinquième : si c’est de l’USB, traitez-le comme un bus, pas comme un câble

  1. Déplacez le DAC/casque vers un autre port (avant vs arrière, contrôleur USB 2 vs USB 3).
  2. Retirez hubs/docks. Testez la connexion directe.
  3. Désactivez la suspension sélective USB, et empêchez Windows de couper l’alimentation du périphérique.

Arrêtez quand le craquement cesse. Au‑delà, vous entrez dans le tuning cargo‑cult : edits de registre et applications « optimizeurs de latence » qui aggravent souvent les choses.

Faits intéressants et courte histoire (pourquoi ça revient)

  • L’audio Windows était mélangé au noyau dans les versions anciennes ; Windows moderne a déplacé le mixage en espace utilisateur (WASAPI) pour la stabilité et la sécurité, mais les pilotes comptent toujours.
  • Les pics de latence DPC ne sont pas nouveaux ; ils sont un point douloureux connu depuis au moins l’ère Windows XP pour les utilisateurs pro audio.
  • 48 kHz est devenu un « standard » largement à cause des normes vidéo/télé ; beaucoup de pipelines audio PC partent du principe de 48 kHz même quand les sources musicales sont en 44,1 kHz.
  • La gestion d’alimentation ACPI est devenue plus intelligente (et plus complexe) avec les années, ce qui est super pour l’autonomie et parfois terrible pour les échéances audio temps réel.
  • L’audio USB est isochrone—il réserve de la bande passante et attend une livraison ponctuelle ; si le contrôleur hôte est retardé, vous l’entendez immédiatement.
  • Les pilotes Wi‑Fi sont des coupables fréquents car ils gèrent des rafales, des transitions d’économie d’énergie et des charges d’interruption importantes.
  • Les pilotes GPU peuvent bloquer le système d’une manière qui n’apparaît pas comme « CPU élevé » dans le Gestionnaire des tâches, parce que le temps est passé à IRQL élevé dans DPC/ISR.
  • L’audio Bluetooth est bruyant et tamponné ; il est conçu pour masquer les dropouts via des tampons, mais Windows plus des interférences radios peuvent encore causer des artefacts audibles.
  • Les « améliorations » sont des plugins DSP (APO) insérés dans la chaîne ; certains sont bogués, certains ajoutent de la latence, et d’autres entrent en conflit avec les changements de fréquence d’échantillonnage.

Tâches pratiques : commandes, sorties et décisions (12+)

Celles‑ci sont conçues pour être exécutées sur une machine Windows 11 normale avec des outils intégrés. J’utilise PowerShell et des utilitaires standards. Chaque tâche inclut : commande, sortie d’exemple, ce que ça signifie, et la décision à prendre.

Task 1: Identify your audio endpoints and their status

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class AudioEndpoint | Select-Object Status,FriendlyName,InstanceId | Format-Table -AutoSize"
Status FriendlyName                                   InstanceId
------ ------------                                   ----------
OK     Speakers (Realtek(R) Audio)                    SWD\MMDEVAPI\{0.0.0.00000000}.{...}
OK     Headphones (USB Audio DAC)                     SWD\MMDEVAPI\{0.0.0.00000000}.{...}
OK     NVIDIA High Definition Audio                   SWD\MMDEVAPI\{0.0.0.00000000}.{...}

Sens : Vous voyez chaque point de terminaison de lecture exposé par Windows, y compris l’audio HDMI/DP des GPU.

Décision : Si vous n’utilisez jamais « NVIDIA High Definition Audio » (ou équivalent AMD), prévoyez de désactiver ce point de terminaison pour réduire la surface des pilotes.

Task 2: List actual audio devices (drivers) behind endpoints

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class Sound,VideoAndGameControllers | Select-Object Status,FriendlyName,InstanceId | Format-Table -AutoSize"
Status FriendlyName                 InstanceId
------ ------------                 ----------
OK     Realtek(R) Audio             HDAUDIO\FUNC_01&VEN_10EC&DEV_...
OK     USB Audio DAC                USB\VID_1234&PID_5678\...
OK     NVIDIA Virtual Audio Device  ROOT\...

Sens : Ce sont les pilotes en mode noyau qui peuvent contribuer au comportement DPC.

Décision : Si vous avez plusieurs piles audio (Realtek + USB + périphériques virtuels GPU), simplifiez : désactivez ce que vous n’utilisez pas pendant le diagnostic.

Task 3: Quick check of CPU power plan (common crackle cause)

cr0x@server:~$ powercfg /getactivescheme
Power Scheme GUID: 381b4222-f694-41f0-9685-ff5bb260df2e  (Balanced)

Sens : « Balanced » permet souvent des économies d’énergie agressives (surtout sur les ordinateurs portables).

Décision : Pour les tests, passez à « Haute performance » ou « Ultimate Performance » (si disponible). Si le craquement disparaît, la cause racine est la gestion d’alimentation, pas le « matériel audio ».

Task 4: Switch to High performance (test, don’t marry it)

cr0x@server:~$ powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

Sens : Vous dites à Windows de prioriser la performance et de réduire les états de veille.

Décision : Retestez l’audio sous votre charge de travail la plus lourde (jeu + Discord + navigateur). Si stable, nous créerons plus tard un plan personnalisé au lieu de consommer la batterie en permanence.

Task 5: Check USB selective suspend setting

cr0x@server:~$ powercfg /qh SCHEME_CURRENT SUB_USB | findstr /i "Selective Suspend"
    USB selective suspend setting  (GUID: 2a737441-1930-4402-8d77-b2bebba308a3)
      Current AC Power Setting Index: 0x00000001
      Current DC Power Setting Index: 0x00000001

Sens : L’indice 1 signifie typiquement « Activé ».

Décision : Si vous utilisez de l’audio USB, désactivez la suspension sélective pour le diagnostic (surtout sur les portables et docks).

Task 6: Disable USB selective suspend (AC + DC)

cr0x@server:~$ powercfg /setacvalueindex SCHEME_CURRENT SUB_USB 2a737441-1930-4402-8d77-b2bebba308a3 0
cr0x@server:~$ powercfg /setdcvalueindex SCHEME_CURRENT SUB_USB 2a737441-1930-4402-8d77-b2bebba308a3 0
cr0x@server:~$ powercfg /S SCHEME_CURRENT

Sens : Les ports USB sont moins susceptibles d’être mis hors tension à des moments inopportuns.

Décision : Si cela corrige les craquements sur un DAC/casque USB, laissez‑le désactivé (ou désactivez seulement sur secteur si vous tenez à l’autonomie).

Task 7: Find “power down this device” risks on USB hubs/controllers

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class USB | Where-Object {$_.FriendlyName -match 'Hub|Controller'} | Select-Object Status,FriendlyName | Format-Table -AutoSize"
Status FriendlyName
------ ------------
OK     USB Root Hub (USB 3.0)
OK     Generic USB Hub
OK     USB xHCI Compliant Host Controller

Sens : Vous avez listé l’infrastructure dont dépend votre audio.

Décision : Pour les hubs/contrôleurs, vérifiez dans Gestionnaire de périphériques → onglet Gestion de l’alimentation et décochez « Autoriser l’ordinateur à éteindre ce périphérique pour économiser l’énergie ». (Aucun basculement CLI n’est universellement fiable selon les pilotes.)

Task 8: Identify NICs (network drivers are classic DPC villains)

cr0x@server:~$ powershell -NoProfile -Command "Get-NetAdapter | Select-Object Name,Status,InterfaceDescription,LinkSpeed | Format-Table -AutoSize"
Name   Status InterfaceDescription                     LinkSpeed
----   ------ --------------------                     ---------
Wi-Fi  Up     Intel(R) Wi-Fi 6E AX211                 1.2 Gbps
Ethernet Up   Realtek PCIe GbE Family Controller      1 Gbps

Sens : Vous savez maintenant quels adaptateurs vous pouvez tester en les désactivant temporairement.

Décision : Si le craquement se corrèle avec l’activité réseau (téléchargements, appels Teams), testez d’abord avec le Wi‑Fi désactivé.

Task 9: Temporarily disable Wi‑Fi to isolate driver impact

cr0x@server:~$ powershell -NoProfile -Command "Disable-NetAdapter -Name 'Wi-Fi' -Confirm:\$false"

Sens : Vous avez retiré une source majeure d’interruptions du système.

Décision : Si l’audio devient parfait immédiatement, vous n’avez pas besoin d’un nouveau DAC. Vous avez besoin d’une correction pilote/paramètres Wi‑Fi (mise à jour/rollback du pilote, désactivation de l’économie d’énergie, réglage des offloads).

Task 10: Check for driver install dates (spot recent “helpful” updates)

cr0x@server:~$ powershell -NoProfile -Command "Get-WmiObject Win32_PnPSignedDriver | Where-Object {$_.DeviceClass -in 'MEDIA','NET'} | Select-Object DeviceName,DriverVersion,DriverDate | Sort-Object DriverDate -Descending | Select-Object -First 10 | Format-Table -AutoSize"
DeviceName                           DriverVersion  DriverDate
----------                           -------------  ----------
Intel(R) Wi-Fi 6E AX211              23.40.0.4      2025-01-15
Realtek(R) Audio                     6.0.9652.1     2024-12-02
NVIDIA High Definition Audio         1.4.0.1        2024-11-20

Sens : Vous pouvez corréler le début des craquements avec des changements de pilote.

Décision : Si les craquements ont commencé « récemment », cette liste rend souvent le « récemment » moins mystérieux.

Task 11: Inspect Windows audio service health (rare, but quick)

cr0x@server:~$ powershell -NoProfile -Command "Get-Service Audiosrv,AudioEndpointBuilder | Format-Table -AutoSize Name,Status,StartType"
Name                 Status StartType
----                 ------ ---------
Audiosrv             Running Automatic
AudioEndpointBuilder Running Automatic

Sens : Si ces services sont arrêtés ou instables, vous avez un problème différent de la latence DPC.

Décision : Si non « Running », corrigez l’état du service d’abord (et vérifiez le Visualiseur d’événements pour la cause).

Task 12: Pull relevant system event logs for audio/driver resets

cr0x@server:~$ powershell -NoProfile -Command "wevtutil qe System /q:\"*[System[(Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) <= 86400000]]]\" /f:text /c:40"
Event[0]:
  Log Name: System
  Source:   Kernel-PnP
  Level:    Error
  ...
  Message:  The device USB\VID_1234&PID_5678... was not migrated due to partial or ambiguous match.

Sens : Kernel‑PnP, USB, et erreurs de pilote dans les dernières 24 heures sont souvent des preuves accablantes pour les dropouts.

Décision : Si vous voyez des déconnexions/réconnexions USB répétées ou des erreurs de migration, concentrez‑vous sur l’alimentation USB et les ports, pas sur les réglages de fréquence d’échantillonnage.

Task 13: Check which process is hogging CPU at the moment crackle happens (sanity check)

cr0x@server:~$ powershell -NoProfile -Command "Get-Process | Sort-Object CPU -Descending | Select-Object -First 8 Name,Id,CPU,WorkingSet | Format-Table -AutoSize"
Name            Id    CPU WorkingSet
----            --    --- ----------
chrome        1040  812.4  950000000
dwm           1880  210.1  240000000
audiodg       1324   45.7   65000000

Sens : Ce n’est pas une mesure DPC, mais ça capture des scénarios évidents où le CPU est réellement saturé (onglet du navigateur devenu fou).

Décision : Si quelque chose saturе réellement le CPU, corrigez‑le d’abord. Si le CPU semble calme, retournez chasser la latence des pilotes.

Task 14: Confirm memory pressure isn’t forcing paging during audio

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Memory\Available MBytes','\Memory\Pages/sec' -SampleInterval 1 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -AutoSize"
Path                       CookedValue
----                       -----------
\Memory\Available MBytes        5120
\Memory\Pages/sec                 3

Sens : Une mémoire disponible très faible plus un Pages/sec élevé peut rendre le système imprévisible.

Décision : Si Available MB est minime et Pages/sec constamment élevé pendant le craquement, fermez des applications ou corrigez une fuite mémoire. (Peu glamour. Efficace.)

Task 15: Capture a short performance trace for DPC/ISR evidence (built-in)

cr0x@server:~$ wpr -start generalprofile
cr0x@server:~$ powershell -NoProfile -Command "Start-Sleep -Seconds 20"
cr0x@server:~$ wpr -stop C:\Temp\audio-latency.etl
WPR: Tracing session stopped.
WPR: Trace file saved to C:\Temp\audio-latency.etl

Sens : Vous avez créé un trace ETL que vous pouvez ouvrir dans Windows Performance Analyzer pour voir l’usage CPU par DPC/ISR et quels pilotes en sont responsables.

Décision : Si LatencyMon n’est pas concluant (ou si vous voulez une preuve), cette trace est comment cesser les conjectures et commencer à pointer des pilotes spécifiques.

Triage des pilotes : suspects habituels et comment le prouver

La plupart des incidents « craquements Windows 11 » ne sont pas causés par le pilote audio lui‑même. Le pilote audio est souvent le premier blâmé parce que c’est celui que vous entendez. Les coupables habituels sont :

  • Pilotes Wi‑Fi (tempêtes d’interruptions, transitions d’économie d’énergie).
  • Pilotes GPU (pics DPC, points de terminaison audio HDMI inutilisés).
  • Pilotes de stockage (moins courant aujourd’hui, mais encore possible avec des pilotes RAID/filtre étranges).
  • ACPI / chipset (gestion d’alimentation plateforme, comportement du timer).
  • Contrôleurs USB (problèmes du pilote de contrôleur hôte, suspension sélective).
  • APO d’« améliorations » audio (plugins DSP fournis par les suites OEM).

Ce que « réparer les pilotes » signifie réellement

« Mettre à jour le pilote » est parfois correct et parfois la façon de créer un nouveau problème. En termes de production : les pilotes sont des modules noyau ; traitez‑les comme des déploiements risqués.

  • Si le craquement a commencé après une mise à jour Windows ou OEM : revenir en arrière est une mitigation valide.
  • Si vous êtes sur un pilote très ancien : une mise à jour peut corriger des bugs DPC connus.
  • Si vous utilisez des piles audio personnalisées OEM sur un portable : le « dernier pilote générique » peut supprimer des réglages OEM et casser la détection des prises ou les arrêts de micro.

Désactivez ce que vous n’utilisez pas (réduisez le rayon d’explosion)

Les points de terminaison audio inutilisés chargent toujours des composants et peuvent toujours être sondés. Désactiver les points de terminaison HDMI audio NVIDIA/AMD inutilisés est l’une des mesures les plus sûres pour avoir « moins de choses qui tournent ».

La même logique s’applique aux « effets » audio OEM. Si vous n’en avez pas besoin explicitement, désactivez les améliorations (nous le ferons plus tard). Vos oreilles veulent de la stabilité, pas une salle de concert virtuelle.

Blague n°1 : Le craquement audio Windows, c’est juste votre PC qui essaie d’ajouter de la percussion à votre playlist. Il n’a pas été embauché, donc renvoyez‑le.

Gestion d’alimentation : le générateur silencieux de craquements

L’économie d’énergie fonctionne en laissant le matériel dormir, en mettant en parking les cœurs CPU, et en laissant les horloges réduire leur fréquence. Chaque transition a une latence. L’audio déteste les pics de latence plus que la perte d’un peu de vitesse CPU.

Les réglages qui comptent le plus

  • État minimal du processeur : trop bas, cela peut provoquer des changements de fréquence rapides et des délais de réveil.
  • Gestion d’alimentation du lien PCI Express : peut introduire une latence de réveil pour des périphériques derrière le PCIe (y compris certains chemins audio).
  • Suspension sélective USB : peut mettre votre périphérique audio ou hub en veille au pire moment.
  • Économie d’énergie de l’adaptateur sans fil : échange autonomie contre pics de latence.

Règle opinionnée

Si vous tenez à l’audio temps réel sur un portable Windows, créez un plan d’alimentation « Audio » dédié. Balanced est pour les tableurs. High performance est pour les tests. Un plan personnalisé est pour vivre avec.

En environnement d’entreprise, « on ne peut pas changer les politiques d’alimentation » est courant. Vous pouvez souvent le faire : les réglages de plan d’alimentation par utilisateur sont généralement autorisés même quand les modifications BIOS ne le sont pas.

USB et hubs : où « ça marche bien » meurt

L’audio USB est généralement stable—jusqu’à ce que ce ne soit plus le cas. Le problème principal : l’audio est sensible au temps, et les topologies USB sont désordonnées. Votre « un seul câble » peut être :

  • un casque passant par un hub de moniteur,
  • puis par un dock,
  • puis vers un contrôleur USB partagé avec une webcam,
  • pendant que la suspension sélective essaie d’économiser 0,3 watts,
  • et qu’un pilote génère des pics DPC.

Stratégie pratique d’isolation USB

  1. Connectez directement au PC. Retirez hubs/docks.
  2. Essayez un autre contrôleur. Les ports arrière diffèrent souvent des ports avant ; les ports USB‑C peuvent être sur un autre contrôleur.
  3. Privilégiez les ports USB 2 pour certains DAC si le fournisseur le recommande. Ce n’est pas « plus lent » ; c’est parfois moins compliqué.
  4. Désactivez la suspension sélective (Tâche 6).
  5. Désactivez « Autoriser l’ordinateur à éteindre ce périphérique » pour les hubs/contrôleurs dans le Gestionnaire de périphériques.

Ce qu’il ne faut pas faire

  • Ne « réparez » pas les craquements en achetant un hub alimenté au hasard. C’est pile ou face avec des câbles supplémentaires.
  • Ne supposez pas qu’un DAC USB est immunisé à la latence système. Le bus a toujours besoin d’être servi à temps.

Audio Bluetooth saccadé : la latence avec des étapes supplémentaires

Le Bluetooth ajoute des interférences radio, une négociation de codecs et du buffering. Il peut craquer alors que l’audio filaire est nickel. Diagnostiquez Bluetooth séparément ; sinon vous perdrez du temps à « régler » le mauvais sous‑système.

Modes d’échec Bluetooth courants

  • Congestion 2,4 GHz : Wi‑Fi, micro‑ondes, bruit USB 3 et dongles bon marché se battent ici.
  • Prise de contrôle par le profil mains‑libres : le casque bascule en mode HFP/HSP pour l’emploi du micro et la qualité audio chute, parfois avec des artefacts.
  • Économie d’énergie : la radio se met en veille à des moments inopportuns.
  • Pile de pilotes : les stacks Bluetooth OEM varient énormément.

Ce qui aide réellement

  • Utilisez le Wi‑Fi 5 GHz (ou Ethernet) pour réduire la contention 2,4 GHz.
  • Éloignez l’antenne/dongle Bluetooth des ports/câbles USB 3 (USB 3 peut générer du bruit RF dans la bande 2,4 GHz).
  • Dans les applications de communication, choisissez le bon périphérique : les points de terminaison « Headset » vs « Headphones » sont importants.
  • Mettez à jour les pilotes Bluetooth fournis par le fabricant/laptop si le système utilise une puce combo Wi‑Fi/Bluetooth.

Blague n°2 : L’audio Bluetooth, c’est comme une réunion debout sur le Wi‑Fi d’un hôtel : ça marche jusqu’à ce que ça compte, puis ça invente de nouveaux syllabes.

Paramètres son Windows qui comptent vraiment

Les paramètres sonores sont l’endroit où les gens cliquent au hasard jusqu’à ce que le craquement change. Faisons moins de clics, avec intention.

Choisir un format par défaut sensé

Choisissez une fréquence d’échantillonnage et gardez‑la cohérente. Les changements fréquents de format peuvent déclencher des glitches sur certains pilotes.

  • Pour Windows général + vidéo : 48 kHz, 24 bits.
  • Pour production musicale centrée sur 44,1 kHz : 44,1 kHz, 24 bits, et alignez votre DAW.

Désactiver améliorations et audio spatial (pour le diagnostic)

Les améliorations sont des Audio Processing Objects (APO). Elles peuvent être correctes. Elles peuvent aussi être tout le problème.

Pour le diagnostic : désactivez les améliorations et l’audio spatial. Si le craquement s’arrête, réactivez une fonctionnalité à la fois—comme un déploiement contrôlé, pas un festival.

Mode exclusif : savoir ce que ça fait

Le mode exclusif permet à une application de parler directement au périphérique, en contournant le mixeur partagé. Cela peut réduire la latence et le rééchantillonnage, mais cela peut aussi :

  • créer des conflits quand plusieurs applications veulent l’audio,
  • exposer des chemins pilotes bogués,
  • faire disparaître les sons système à des moments gênants.

Si vous dépannez un craquement système global, testez les deux : exclusif activé et désactivé. Si vous êtes utilisateur DAW, l’exclusif (ou ASIO) est souvent la bonne option ; pour un « portable de travail avec Teams », la stabilité en mode partagé gagne.

Tampons côté application et DAW : sanity check

Si le craquement n’apparaît que dans une application, ne blâmez pas immédiatement Windows. Les applications choisissent les tailles de tampon, les fréquences d’échantillonnage, et parfois utilisent le mode exclusif sans demander poliment.

Navigateurs et applications de conférence

  • Teams/Zoom/Discord : ils peuvent changer de périphérique, prendre des chemins exclusifs, et déclencher des changements de profil Bluetooth quand le micro est activé.
  • Navigateur : les paramètres d’accélération matérielle peuvent modifier le comportement du pilote GPU et influencer indirectement les pics de latence.

DAW et pro audio

Si vous utilisez un DAW :

  • Commencez par une taille de tampon qui privilégie la stabilité (256–512 échantillons) et ne la réduisez que si vous faites de l’enregistrement en monitoring direct.
  • Utilisez le pilote ASIO du fournisseur quand disponible ; le mode partagé WASAPI n’est pas l’outil idéal pour la production faible latence.
  • Alignez la fréquence d’échantillonnage du projet sur celle du périphérique pour éviter un rééchantillonnage constant.

Le pro audio sur Windows peut être solide. Il exige juste que vous traitiez les changements de pilotes et d’alimentation comme des changements de production : un à la fois, avec plan de retour arrière.

Trois mini-histoires d’entreprise depuis les tranchées de la latence

Incident #1 : la mauvaise hypothèse (et une réunion coûteuse)

Une entreprise de taille moyenne a déployé des portables Windows 11 à une équipe commerciale. En une semaine, les plaintes sont arrivées : « l’audio craque pendant les démonstrations clients. » L’hypothèse interne classique : les haut‑parleurs intégrés sont bon marché, donc achetez des casques. Les achats ont accéléré. Les boîtes sont arrivées. Les craquements ont persisté.

L’équipe IT a mis en place une « war room ». Ils ont reproduit le problème de façon fiable : démarrer un partage d’écran, lancer un appel, puis ouvrir un gros téléchargement en arrière‑plan. Le craquement apparaissait comme par horloge. L’utilisation CPU restait faible. Ce détail comptait ; il excluait « pas assez de puissance ».

Ils ont finalement exécuté des outils de latence et ont vu des pics DPC liés au pilote Wi‑Fi. Le détail killer : les portables étaient configurés avec une économie d’énergie Wi‑Fi agressive pour maximiser la batterie en déplacement. Belle intention, mauvais environnement. Les démonstrations commerciales ne sont pas une étude de sommeil.

La correction n’était pas un casque. C’était un changement de politique : désactiver l’économie d’énergie Wi‑Fi la plus agressive sur secteur, mettre à jour le pilote Wi‑Fi vers une version stable, et empêcher l’OS de mettre l’adaptateur en veille pendant un appel. Les craquements ont disparu. Les casques sont redevenus « optionnels » et les achats automatiques ont été arrêtés discrètement.

La leçon : le périphérique audio était innocent. L’ordonnanceur était correct. Le comportement d’interruption d’un seul pilote sous une charge spécifique était le véritable domaine de panne.

Incident #2 : une optimisation qui a mal tourné (la batterie gagne, l’audio perd)

Une autre organisation—orientée ingénierie, beaucoup de réunions vidéo—décide de standardiser sur les économies d’énergie. Ils ont poussé des réglages pour réduire la consommation de fond : abaisser l’état minimal du processeur, suspension sélective USB plus agressive, et gestion de lien PCIe plus agressive. L’autonomie de la flotte s’est améliorée sur le papier, ce qui a rendu le tableau de bord très vert.

Puis la file d’assistance s’est transformée en musée audio : pops, saccades, « voix robot », surtout pour les personnes utilisant des hauts‑parleurs USB et des stations d’accueil. Le motif était subtil : c’était pire après que la machine ait été inactive un moment. Premier appel de la journée ? Bien. Deuxième appel après le déjeuner ? Chaos.

L’équipe a supposé que les docks étaient en cause. Ils en ont remplacé quelques‑uns. Toujours pareil. Ils ont accusé les haut‑parleurs USB. Ils en ont remplacé quelques‑uns. Toujours pareil. C’est là que « optimisation » devient « superstition coûteuse ».

Finalement, quelqu’un a corrélé les logs d’événements avec le craquement : transitions d’alimentation des hubs USB et réinitialisations de périphériques correspondaient aux débuts d’appel. La suspension sélective faisait son travail : mettre des parties de la chaîne USB en veille. Mais quand le trafic audio reprenait, la latence de réveil et l’occasionnelle ré‑énumération créaient des dropouts.

La correction était peu glamour : désactiver la suspension sélective pour les utilisateurs avec audio USB sur dock, et ajuster les réglages d’alimentation différemment sur secteur vs batterie. L’autonomie a un peu chuté. L’audio a cessé d’embarrasser les gens. Les tableaux de bord sont devenus moins verts. Les transcriptions de réunion sont redevenues plus précises.

Incident #3 : la pratique ennuyeuse qui a sauvé la journée (contrôle des changements pour les pilotes)

Un petit groupe IT à tendance SRE supportait une salle de trading où l’audio importait pour les appels enregistrés et la conformité. Ils avaient une règle : pas de mise à jour de pilote sur le floor sans anneau de staging. Ça paraissait bureaucratique jusqu’au jour où ce ne l’était plus.

Windows Update a proposé un nouveau package de pilote GPU. Sur une flotte de bureau normale, on hausserait les épaules. Sur ce floor, les pilotes GPU étaient liés à plusieurs moniteurs, décodage vidéo et—surprise—points de terminaison audio HDMI. Une machine du ring pilote a pris la mise à jour. En quelques heures, l’utilisateur pilote a signalé des pops intermittents en déplaçant des fenêtres entre les moniteurs pendant un appel.

L’équipe a capturé une trace (WPR) et a vu des pics DPC liés au chemin pilote GPU lors d’événements de reconfiguration d’affichage. Ils ont rollbacké le pilote sur la machine pilote, validé la stabilité, et bloqué la mise à jour pour le reste du ring pendant qu’ils testaient une autre version.

Pas d’héroïsme. Pas de minuit. Juste un déploiement progressif et un rollback. La pratique était ennuyeuse, et c’est précisément pourquoi elle a fonctionné. L’audio de production est resté propre. La conformité n’a appelé personne. L’utilisateur pilote a reçu un café et une appréciation modérée, ce qui est à peu près l’émotion maximale dans cet environnement.

Erreurs courantes : symptôme → cause racine → correctif

Craquements seulement lors de téléchargements ou d’appels

  • Symptôme : l’audio pop pendant l’activité réseau ; autrement correct.
  • Cause racine : pics DPC du pilote NIC/Wi‑Fi, offloads, transitions d’économie d’énergie.
  • Correctif : mettre à jour/rollback du pilote NIC, désactiver l’économie d’énergie Wi‑Fi agressive, tester avec Wi‑Fi désactivé (Tâche 9), privilégier Ethernet pour les appels.

Casque USB craque après une inactivité ou lors du docking

  • Symptôme : le premier son après l’inactivité craque ; le docking/undocking provoque des dropouts.
  • Cause racine : suspension sélective USB, gestion d’alimentation des hubs, topologie du dock.
  • Correctif : désactiver la suspension sélective USB (Tâches 5–6), désactiver la mise hors tension des hubs, connecter le périphérique directement ou à un autre contrôleur/port.

Craquements après une mise à jour du pilote GPU

  • Symptôme : pops en jouant, en déplaçant des fenêtres, ou en changeant de moniteur.
  • Cause racine : pics DPC du pilote GPU ; points de terminaison audio HDMI inutilisés ; overlays.
  • Correctif : installation propre d’un pilote GPU stable, désactiver les endpoints audio GPU inutilisés, réduire les overlays, retester avec les paramètres d’accélération matérielle dans l’app.

Seulement Bluetooth saccade ; filaire est propre

  • Symptôme : l’audio Bluetooth se brise ; USB/Jack 3,5 mm est propre.
  • Cause racine : interférences 2,4 GHz, basculement de profil, économie d’énergie Bluetooth/pilote.
  • Correctif : utilisez le Wi‑Fi 5 GHz, éloignez le dongle du bruit USB 3, assurez la sélection correcte du point de terminaison, mettez à jour les pilotes Bluetooth.

Craquements dans une application spécifique

  • Symptôme : DAW qui craque à faible tampon ; autres apps ok.
  • Cause racine : tampon trop bas, décalage de fréquence, conflit de mode exclusif.
  • Correctif : augmentez le tampon, alignez la fréquence, utilisez ASIO, désactivez les autres apps audio, testez le mode exclusif.

Craquements avec les « améliorations » activées

  • Symptôme : activer l’audio spatial/les améliorations empire les pops.
  • Cause racine : APO/DSP bogué, latence de traitement supplémentaire.
  • Correctif : désactivez améliorations/spatial ; si indispensables, mettez à jour le logiciel audio OEM et réactivez effet par effet.

Craquements malgré un CPU bas et « tout à jour »

  • Symptôme : le Gestionnaire des tâches semble calme ; l’audio poppe quand même.
  • Cause racine : temps DPC/ISR élevé (priorité noyau), non visible comme CPU utilisateur.
  • Correctif : mesurer avec des outils de latence ; isoler en désactivant temporairement des périphériques ; utiliser une trace WPR (Tâche 15) pour identifier le pilote.

Listes de vérification / plan étape par étape

Checklist A: plan « 20 minutes pour arrêter »

  1. Reproduisez le craquement à la demande (même chanson/vidéo, même volume, même charge).
  2. Passez au plan Haute performance (Tâche 4). Retestez.
  3. Désactivez la suspension sélective USB (Tâche 6). Retestez (surtout pour l’audio USB).
  4. Désactivez temporairement le Wi‑Fi (Tâche 9). Retestez avec audio local.
  5. Désactivez les points de terminaison audio inutilisés (audio HDMI GPU, périphériques virtuels) dans le Gestionnaire de périphériques. Retestez.
  6. Désactivez les améliorations/spatial pour le périphérique de lecture actif. Retestez.
  7. Réglez le format par défaut sur 48 kHz 24 bits (ou alignez‑le avec votre flux). Retestez.
  8. Si Bluetooth : branchez en filaire pour un test afin de confirmer que c’est lié à la radio.

Checklist B: stabiliser sans vivre en Haute performance

  1. Clonez votre plan actuel dans un plan personnalisé « Audio ».
  2. Sur secteur : augmentez l’état minimal du processeur, désactivez la suspension sélective USB, réduisez la gestion d’alimentation du lien PCIe.
  3. Sur batterie : gardez des valeurs sensées, mais évitez l’économie d’énergie d’adaptateur sans fil la plus agressive si vous prenez des appels sur batterie.
  4. Documentez les versions de pilotes stables (Wi‑Fi, GPU, audio, chipset).
  5. Après chaque cycle de mise à jour Windows : revalidez avec un stress test audio de 5 minutes.

Checklist C: quand il vous faut une preuve (pour l’IT, les vendors, ou vous‑même)

  1. Capturez une trace WPR pendant le craquement (Tâche 15).
  2. Exportez les logs système pertinents autour des horodatages (Tâche 12).
  3. Notez : périphérique utilisé (USB/Bluetooth/interne), état d’alimentation (AC/DC), et réseau actif (Wi‑Fi/Ethernet).
  4. Faites un seul changement. Retestez. Prenez des notes.

FAQ

1) Pourquoi l’audio craque quand l’utilisation CPU est faible ?

Parce que le problème est habituellement la latence DPC/ISR, pas la charge CPU moyenne. Un pilote peut bloquer brièvement l’ordonnancement temps réel et provoquer des sous‑exécutions de tampon.

2) LatencyMon est‑il requis ?

Non, mais il est pratique. Vous pouvez aussi utiliser les outils intégrés WPR/WPA (Tâche 15) pour voir le comportement DPC/ISR et identifier les pilotes problématiques.

3) Dois‑je désactiver les « améliorations audio » ?

Pour le diagnostic, oui. Les améliorations sont des composants DSP qui peuvent ajouter de la latence ou être bogués. Si la désactivation règle le problème, réactivez uniquement ce que vous souhaitez réellement.

4) Quelle fréquence d’échantillonnage choisir : 44,1 kHz ou 48 kHz ?

Pour Windows général et la vidéo, 48 kHz est souvent le moins surprenant. Pour la production musicale centrée sur 44,1 kHz, réglez le périphérique et le projet sur 44,1 kHz pour réduire le rééchantillonnage.

5) Acheter un DAC USB externe règle‑t‑il toujours les craquements ?

Non. Il peut améliorer le bruit analogique et contourner un codec intégré défectueux, mais il ne résout pas magiquement la latence DPC ou les problèmes de gestion d’alimentation USB.

6) Pourquoi le Bluetooth est‑il pire que le filaire ?

Le Bluetooth ajoute des interférences radio, du buffering de codec et des basculements de profil (surtout quand le micro est actif). Les chemins filaires éliminent une classe entière de modes de panne.

7) Dois‑je utiliser « Ultimate Performance » ?

Utilisez‑le pour tester. Si ça corrige les craquements, créez un plan personnalisé qui conserve les réglages nécessaires sans dévorer la batterie en permanence.

8) Quelle est la manière la plus rapide d’isoler le pilote coupable ?

Désactivez les périphériques un par un : Wi‑Fi, Bluetooth, points de terminaison audio GPU inutilisés, docks/hubs. Si vous avez besoin de preuves solides, capturez une trace WPR et inspectez DPC/ISR par pilote.

9) J’entends des craquements seulement dans les jeux—que tester en premier ?

Testez la stabilité du pilote GPU (installation propre), désactivez les overlays et confirmez que le jeu n’impose pas un format audio bizarre. Vérifiez aussi les réglages d’alimentation—les portables gaming adorent les transitions d’énergie agressives.

10) Le stockage peut‑il causer des craquements audio ?

Moins courant sur les systèmes modernes, mais oui : pilotes filtre, pilotes de chiffrement ou contrôleurs de stockage défectueux peuvent créer des pics de latence. Si les logs montrent des réinitialisations de stockage, ne les ignorez pas.

Prochaines étapes (l’état stable et ennuyeux)

Si vous voulez un audio sans craquements sur Windows 11 sans acheter de matériel, la bonne démarche n’est pas un réglage magique. C’est une boucle disciplinée :

  1. Reproduisez le problème de façon fiable. Si vous ne pouvez pas le reproduire, vous ne pouvez pas le corriger—seulement le déplacer.
  2. Mesurez la latence, ne devinez pas. Utilisez des outils de latence ou une trace WPR si nécessaire.
  3. Stabilisez l’alimentation. Un plan « Audio » personnalisé vaut mieux que le permanent « Haute performance ».
  4. Simplifiez les pilotes. Désactivez ce que vous n’utilisez pas ; mettez à jour ou revenez en arrière pour le coupable.
  5. Gardez l’USB simple. Ports directs, pas de roulette de hubs, pas de suspension sélective pour l’audio USB.
  6. Changez une chose à la fois. Vous déboguez, vous ne pratiquez pas un rituel.

Faites cela, et les craquements disparaîtront. Votre système deviendra ennuyeux. Ce qui, en exploitation, est le plus grand compliment.

WSL2 + Kubernetes : la configuration qui ne fait pas fondre votre portable

Vous avez installé Kubernetes en local parce que vous vouliez de la rapidité : itérer vite, tester des charts, déboguer des controllers, peut‑être exécuter une petite pile plateforme.
Puis vos ventilateurs se mettent à hurler, votre SSD commence à trimer, et votre « cluster de dev rapide » devient la raison pour laquelle Slack vous demande si vous êtes en ligne.

WSL2 peut être un excellent endroit pour exécuter Kubernetes — si vous le traitez comme une vraie VM avec contraintes de stockage et de mémoire, et non comme un dossier Linux magique.
Voici la configuration pratique qui évite les modes de défaillance classiques : RAM en fuite, E/S lentes, bizarreries DNS et « pourquoi kubectl bloque ? ».

Ce que vous construisez réellement (et pourquoi ça fait fondre les portables)

Sur Windows avec WSL2, « exécuter Kubernetes » n’est rarement juste « exécuter Kubernetes ».
C’est une pile d’abstractions imbriquées qui ont chacune des opinions sur l’ordonnancement CPU, la récupération de mémoire, la sémantique du système de fichiers et le réseau.
Quand une couche devine mal, votre portable en fait les frais.

La configuration typique Kubernetes sur WSL2 ressemble à ceci :

  • Système hôte Windows
  • VM WSL2 (une VM légère Hyper‑V avec un disque virtuel)
  • Distribution Linux userland (Ubuntu, Debian, etc.)
  • Runtime de conteneurs (Docker Engine, containerd ou la stack nerdctl)
  • Distribution Kubernetes (kind, k3d, minikube, microk8s ou le cluster intégré de Docker Desktop)
  • Vos workloads : bases de données, operators, pipelines de build, contrôleurs d’ingress, maillage de services — aka « petit production »

La fonte se produit généralement à partir d’un de ces trois endroits :

  1. Mémoire : WSL2 met volontiers en cache la page cache et ne la rend pas toujours rapidement. Kubernetes programme les pods jusqu’à ce que le nœud soit « bon »… jusqu’à ce qu’il ne le soit plus.
  2. Stockage : franchir la frontière Windows/Linux peut transformer des E/S normales en incident au ralenti. Les bases de données amplifient ça avec fsync et de petites écritures aléatoires.
  3. Réseau/DNS : kube‑dns, le DNS Windows, les NIC virtuels WSL2 et les clients VPN forment un triangle de tristesse.

L’objectif n’est pas « le rendre rapide pour des benchmarks ». L’objectif est « le rendre suffisamment rapidement et de manière prévisible »,
et, plus important, rendre les modes de défaillance évidents.
La fiabilité en dev compte parce que c’est là que vous décidez ce que vous regretterez en prod.

Quelques faits et contexte historique (pour que les parties bizarres fassent sens)

Ces points sont volontairement courts. Ce sont des mises à jour de modèle mental qui évitent des heures de chasse aux fantômes.

  1. WSL1 faisait de la traduction d’appels système ; WSL2 est un vrai noyau Linux dans une VM. C’est pourquoi WSL2 peut faire tourner Kubernetes correctement, mais aussi pourquoi il se comporte comme une VM avec son propre disque et ses politiques mémoire.
  2. WSL2 stocke les fichiers Linux dans un disque virtuel (VHDX) par défaut. Ce disque peut croître rapidement et ne rétrécit pas toujours sauf si vous le compactez explicitement.
  3. Accéder aux fichiers Linux depuis Windows n’est pas la même chose qu’accéder aux fichiers Windows depuis Linux. Les caractéristiques de performance diffèrent drastiquement, et le chemin lent punira les bases de données et les builds d’images.
  4. Kubernetes n’a pas été conçu pour les portables. Il a été conçu pour des clusters où « un nœud est une VM » et on peut brûler du CPU sur des boucles de reconciliation sans entendre de ventilateurs.
  5. kind exécute Kubernetes dans des conteneurs Docker. C’est excellent pour la reproductibilité, mais cela ajoute une couche supplémentaire où le stockage et le réseau peuvent devenir « créatifs ».
  6. k3s (et donc k3d) a été conçu pour être léger. Il utilise SQLite par défaut, ce qui est acceptable en local, mais il sollicite toujours le stockage si vous cumulez beaucoup de controllers.
  7. cgroups v2 a changé le comportement de l’isolation des ressources. Beaucoup de « pourquoi ma limite mémoire est ignorée ? » sont en réalité des conversations « quel mode de cgroup suis‑je ? ».
  8. Le DNS est un mode de défaillance majeur dans les clusters locaux. Pas parce que le DNS est difficile, mais parce que les VPN d’entreprise et le DNS à horizon partagé peuvent tout remplacer silencieusement.
  9. Les builds d’images punissent les métadonnées du système de fichiers. La différence entre un système de fichiers rapide et un système ponté devient évidente quand vous lancez des builds multi‑étapes avec des milliers de petits fichiers.

Choisir votre Kubernetes local : kind vs k3d vs minikube (et ce que je recommande)

Ma recommandation par défaut : kind dans WSL2, avec contraintes

Pour la plupart des développeurs et SRE travaillant sur la plateforme, kind vous apporte répétabilité, rapidité et teardown propre.
Le cluster est « juste des conteneurs », et vous pouvez corriger la version de Kubernetes facilement.
L’important est de contraindre les ressources WSL2 et de garder vos workloads sur le système de fichiers Linux.

Quand préférer k3d (k3s dans Docker)

Si votre objectif est « exécuter une pile plateforme pratique avec un minimum de surcharge », k3d est excellent.
k3s enlève du superflu : moins de composants, moins de mémoire. Il est indulgent sur des portables modestes.
Il se rapproche aussi de ce que beaucoup d’edge setups utilisent, utile si vous déployez vers des environnements contraints.

Quand utiliser minikube

minikube est pratique quand vous voulez « un outil qui gère plusieurs drivers ».
Mais sur WSL2, minikube peut vous laisser face à une matrice de drivers déroutante : driver Docker, KVM (rarement), Hyper‑V (côté Windows),
et vous passez alors plus de temps à déboguer le driver qu’à déboguer le cluster.
Si vous êtes déjà content avec Docker dans WSL2, le driver Docker de minikube fonctionne.

À éviter (sauf si vous avez une raison)

  • Exécuter des workloads denses en état sur /mnt/c puis accuser Kubernetes de lenteur. Ce n’est pas Kubernetes ; c’est la frontière du système de fichiers qui vous demande d’arrêter.
  • Sur‑allouer CPU et RAM « parce que c’est local ». WSL2 prendra, Windows ripostera, et votre navigateur souffrira.
  • Faire du « prod‑like » avec tout activé. Service mesh + tracing distribué + trois operators + une base + un système CI n’est pas un cluster de dev ; c’est un centre de données hobby.

Une petite blague courte, comme promis : Kubernetes, c’est comme une cuisine avec 30 chefs — personne ne cuisine plus vite, mais tout le monde fait un rapport d’état.

Base WSL2 : limites, noyau et ce que Windows ne vous dira pas

Fixez des limites WSL2 ou acceptez le chaos

Par défaut, WSL2 augmentera l’utilisation mémoire jusqu’à une large fraction de la RAM système.
Ce n’est pas malveillant. C’est Linux qui fait des choses Linux — utiliser la mémoire pour le cache.
Le problème est que Windows ne la récupère pas toujours de manière « polie ».

Placez un fichier .wslconfig dans votre répertoire de profil utilisateur Windows (côté Windows).
Vous voulez un plafond pour la mémoire et le CPU, et vous voulez un swap mais pas un substitut permanent de la RAM.

cr0x@server:~$ cat /mnt/c/Users/$WINUSER/.wslconfig
[wsl2]
memory=8GB
processors=4
swap=4GB
localhostForwarding=true

Décision : Si vous avez 16Go de RAM total, 8Go pour WSL2 est généralement raisonnable.
Si vous avez 32Go, 12–16Go est acceptable. Plus que cela tend à masquer des fuites et des limites de pods mal définies.

Comportement de récupération WSL2 : utilisez les outils que vous avez

La récupération mémoire de WSL2 s’est améliorée, mais elle peut encore sembler collante après des builds lourds ou du churn de cluster.
Si vous devez récupérer de la mémoire rapidement, arrêter WSL est l’outil brutal qui fonctionne.

cr0x@server:~$ wsl.exe --shutdown
...output...

Signification de la sortie : Aucune sortie est normale. Cela arrête toutes les distributions WSL et la VM WSL2.
Décision : Utilisez‑le quand Windows est à court de RAM et que vous avez besoin de récupérer maintenant, pas quand vous debuggez un problème dans le cluster.

Utilisez systemd dans WSL2 (si disponible) et soyez explicite

WSL moderne supporte systemd. Ça rend l’exécution de Docker/containerd et des outils Kubernetes moins maladroite.
Vérifiez si systemd est activé.

cr0x@server:~$ ps -p 1 -o comm=
systemd

Signification de la sortie : Si PID 1 est systemd, vous pouvez utiliser la gestion de services normale.
Si c’est autre chose (comme init), vous devrez gérer les daemons différemment.
Décision : Préférez un WSL avec systemd activé pour la stabilité et moins de mystères « pourquoi ça n’a pas démarré ? ».

Stockage sur WSL2 : la différence entre « ça marche » et « ça ne vous déteste pas »

Règle n°1 : conservez les données Kubernetes sur le système de fichiers Linux

Placez l’état du cluster, les images de conteneurs et les données de volumes persistants sous votre système de fichiers de distribution Linux (par ex. /home, /var).
Évitez de stocker des workloads à forte écriture sur /mnt/c.
La couche d’interop peut convenir pour éditer du code, mais c’est un piège pour les bases de données et tout ce qui dépend fortement de fsync.

Règle n°2 : comprenez où vont vos octets

Docker/containerd stocke les images et les couches modifiables quelque part sous /var/lib.
kind et k3d ajoutent leurs propres couches.
Si vous construisez beaucoup d’images ou exécutez des workloads type CI, votre VHDX grossit. Il peut ne pas se réduire.
Ce n’est pas une faute morale ; c’est le fonctionnement des disques virtuels.

Règle n°3 : mesurez les E/S de la manière simple

Vous n’avez pas besoin d’outils de stockage sophistiqués pour attraper les gros problèmes. Vous avez besoin de deux comparaisons :
performance du FS Linux et performance du FS monté depuis Windows.
Si l’un est 10× plus lent, ne « tunez pas Kubernetes ». Déplacez le workload.

cr0x@server:~$ dd if=/dev/zero of=/home/cr0x/io-test.bin bs=1M count=512 conv=fdatasync
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 1.24 s, 433 MB/s

Signification de la sortie : C’est un test d’écriture séquentielle avec flush. Des centaines de Mo/s sont attendus sur un stockage SSD.
Décision : Si c’est en chiffres simples de Mo/s, votre VM subit une pression E/S ou votre disque est mal en point. Corrigez ça avant Kubernetes.

cr0x@server:~$ dd if=/dev/zero of=/mnt/c/Users/$WINUSER/io-test.bin bs=1M count=256 conv=fdatasync
256+0 records in
256+0 records out
268435456 bytes (268 MB, 256 MiB) copied, 12.8 s, 21.0 MB/s

Signification de la sortie : Si vous voyez cette chute, c’est la voie d’interop.
Décision : Ne placez pas /var/lib/docker, /var/lib/containerd ou les répertoires PV sur /mnt/c.
Gardez le code là si nécessaire, mais conservez les caches de build et les bases de données dans l’espace Linux.

Croissance du VHDX : compacter est une tâche de maintenance, pas un remède unique

Si votre disque virtuel WSL2 grossit à cause des builds d’images et du churn, vous pouvez le compacter — mais le compactage n’est pas automatique.
D’abord, nettoyez à l’intérieur de Linux : supprimez les images inutilisées, prunez les volumes, videz les caches.
Puis compressez depuis Windows. Les étapes exactes diffèrent selon la build Windows et les outils, mais le principe est cohérent :
supprimez les blocs inutilisés dans le guest, puis dites à l’hôte de compacter.

La vérité ennuyeuse : les clusters locaux créent des données. Ils ne suppriment pas les données aussi agressivement que vous le pensez.
Si vous traitez votre environnement dev comme la prod, vous planifierez une maintenance comme en prod. C’est le deal.

Réseau : NodePorts, ingress, DNS et le piège du localhost

Localhost n’est pas une philosophie ; c’est une décision de routage

Dans WSL2, « localhost » peut signifier le localhost Windows ou le localhost WSL selon la manière dont vous avez démarré le processus.
Avec localhostForwarding=true, WSL peut forwarder des ports vers Windows, mais ce n’est pas magique pour tous les modèles de trafic.

Si vous exécutez kind dans WSL2 et exposez un service avec NodePort, vous y accéderez souvent depuis Windows via des ports forwardés
ou en ciblant l’IP de la VM WSL. Les deux fonctionnent. L’important est d’être consistant et de documenter la méthode utilisée par votre équipe.

DNS : le tueur silencieux de kubectl

Beaucoup de plaintes « Kubernetes est lent » sont en réalité des timeouts DNS.
kubectl semble bloqué, mais il attend des appels au serveur API qui ne se résolvent pas proprement.
Les clients VPN aggravent cela en injectant des resolvers ou en forçant du split DNS.

Votre travail est de séparer « serveur API lent » de « résolution de noms lente » en moins de cinq minutes.
Plus tard, vous pourrez discuter avec l’outillage VPN de l’entreprise.

Tâches pratiques (commandes, sorties et décisions)

Ce sont de vraies tâches que vous exécuterez lors de la mise en place et du débogage.
Chacune inclut ce que signifie la sortie et la décision que vous en tirez.
Faites‑les dans l’ordre quand vous construisez un nouveau setup ; faites‑les sélectivement quand tout brûle.

Task 1: Confirmer que vous êtes sur WSL2 (pas WSL1)

cr0x@server:~$ wsl.exe -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

Signification de la sortie : VERSION 2 signifie une vraie VM noyau Linux. VERSION 1 signifie traduction d’appels système.
Décision : Si vous êtes en VERSION 1, stoppez et convertissez. Kubernetes a besoin du vrai comportement du noyau.

Task 2: Vérifier le noyau et le mode cgroup

cr0x@server:~$ uname -r
5.15.146.1-microsoft-standard-WSL2
cr0x@server:~$ mount | grep cgroup2
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)

Signification de la sortie : cgroup2 monté signifie hiérarchie unifiée.
Décision : Si vos outils supposent cgroup v1 (anciens configs Docker, certains agents de monitoring), attendez‑vous à des surprises.

Task 3: Vérifier systemd et le contrôle des services

cr0x@server:~$ systemctl is-system-running
running

Signification de la sortie : systemd est actif et stable.
Décision : Si vous voyez degraded, vérifiez les unités failed avant d’accuser Kubernetes de problèmes « aléatoires ».

Task 4: Confirmer la santé du runtime de conteneurs (exemple Docker)

cr0x@server:~$ docker info --format '{{.ServerVersion}} {{.CgroupVersion}}'
24.0.7 2

Signification de la sortie : Docker est joignable et rapporte la version de cgroup.
Décision : Si cette commande est lente ou bloque, corrigez Docker avant de toucher à kind/k3d.

Task 5: Mesurer rapidement la pression mémoire

cr0x@server:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       5.9Gi       310Mi       160Mi       1.5Gi       1.3Gi
Swap:          4.0Gi       1.2Gi       2.8Gi

Signification de la sortie : available compte plus que free. L’utilisation du swap indique une pression.
Décision : Si available est < ~1Gi et que le swap augmente, réduisez le cluster, baissez les limites ou augmentez la mémoire WSL.

Task 6: Vérifier l’usage disque là où ça compte

cr0x@server:~$ df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb       250G  180G   71G  72% /

Signification de la sortie : C’est votre système de fichiers de distribution soutenu par VHDX.
Décision : Au‑dessus de ~85% d’utilisation, les performances et le comportement de compaction se dégradent. Prunez images et PVs anciens.

Task 7: Installer et créer un cluster kind avec des valeurs par défaut sensées

cr0x@server:~$ kind create cluster --name dev --image kindest/node:v1.29.2
Creating cluster "dev" ...
 ✓ Ensuring node image (kindest/node:v1.29.2) 🖼
 ✓ Preparing nodes 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
Set kubectl context to "kind-dev"
You can now use your cluster with:

kubectl cluster-info --context kind-dev

Signification de la sortie : Cluster créé, contexte défini. StorageClass installé (généralement standard).
Décision : Si l’installation du CNI bloque, suspectez DNS/proxy/VPN ou problèmes de pull d’images — ne relancez pas aveuglément.

Task 8: Vérifier la vivacité du cluster et la santé des composants

cr0x@server:~$ kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:40685
CoreDNS is running at https://127.0.0.1:40685/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
cr0x@server:~$ kubectl get nodes -o wide
NAME                STATUS   ROLES           AGE   VERSION   INTERNAL-IP   OS-IMAGE
dev-control-plane   Ready    control-plane   2m    v1.29.2   172.18.0.2    Debian GNU/Linux 12 (bookworm)

Signification de la sortie : API server joignable, nœud Ready, IP interne assignée.
Décision : Si le nœud est NotReady, passez directement à kubectl describe node et aux logs CNI — ne réinstallez pas tout immédiatement.

Task 9: Repérer les vrais gloutons de ressources (nœuds + pods)

cr0x@server:~$ kubectl top nodes
NAME                CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
dev-control-plane   620m         15%    2240Mi          56%

Signification de la sortie : Metrics‑server fonctionne (kind l’inclut souvent via des addons ou vous l’avez installé).
Décision : Si la mémoire est élevée à l’arrêt, vérifiez les controllers bavards, les builds en fuite ou un expéditeur de logs bloqué.

Task 10: Valider le DNS dans le cluster (test fumée bon marché)

cr0x@server:~$ kubectl run -it --rm dns-test --image=busybox:1.36 --restart=Never -- nslookup kubernetes.default.svc.cluster.local
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default.svc.cluster.local
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
pod "dns-test" deleted

Signification de la sortie : CoreDNS répond, la découverte de services fonctionne.
Décision : Si cela timeoute, corrigez le DNS avant de déboguer votre app. Votre application est innocente jusqu’à preuve du contraire.

Task 11: Confirmer si kubectl lent est dû au réseau ou à la latence API

cr0x@server:~$ time kubectl get pods -A
NAMESPACE     NAME                                        READY   STATUS    RESTARTS   AGE
kube-system   coredns-76f75df574-2lq9r                    1/1     Running   0          4m
kube-system   coredns-76f75df574-9x2ns                    1/1     Running   0          4m
kube-system   etcd-dev-control-plane                      1/1     Running   0          4m
kube-system   kindnet-4cdbf                               1/1     Running   0          4m
kube-system   kube-apiserver-dev-control-plane            1/1     Running   0          4m
kube-system   kube-controller-manager-dev-control-plane   1/1     Running   0          4m
kube-system   kube-proxy-4xw26                            1/1     Running   0          4m
kube-system   kube-scheduler-dev-control-plane            1/1     Running   0          4m

real    0m0.312s
user    0m0.127s
sys     0m0.046s

Signification de la sortie : 300ms est acceptable en local. Plusieurs secondes suggèrent DNS, confusion de contexte kubeconfig, ou un API server en difficulté.
Décision : Si c’est lent, lancez kubectl get --raw /readyz?verbose ensuite.

Task 12: Vérifier les endpoints readiness de l’API server pour trouver le réel blocage

cr0x@server:~$ kubectl get --raw='/readyz?verbose'
[+]ping ok
[+]log ok
[+]etcd ok
[+]informer-sync ok
[+]poststarthook/start-apiserver-admission-initializer ok
[+]poststarthook/start-apiextensions-informers ok
[+]poststarthook/start-apiextensions-controllers ok
readyz check passed

Signification de la sortie : Si etcd ou informer sync est lent/échoue, le plan de contrôle est le goulot.
Décision : etcd lent signifie souvent latence stockage. C’est votre signal pour vérifier le disque et éviter l’I/O cross‑filesystem.

Task 13: Trouver le pod qui brûle votre portable (CPU/mémoire)

cr0x@server:~$ kubectl top pods -A --sort-by=memory | tail -n 10
default       api-7b7c7d8f6c-9bq5m             1/1     980Mi
observability prometheus-0                      2/2     1210Mi
observability loki-0                            1/1     1530Mi

Signification de la sortie : Vous voyez les plus gros consommateurs.
Décision : Si votre cluster de dev inclut Prometheus/Loki par défaut, vous venez de trouver la réponse « pourquoi il fait chaud ? ».
Réduisez l’échelle, diminuez la rétention ou utilisez des outils plus légers en local.

Task 14: Vérifier l’utilisation disque du runtime de conteneurs (Docker)

cr0x@server:~$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          42        12        18.4GB    12.1GB (65%)
Containers      19        6         1.2GB     720MB (60%)
Local Volumes   27        9         9.8GB     6.3GB (64%)
Build Cache     124       0         22.6GB    22.6GB

Signification de la sortie : Le build cache est souvent le consommateur silencieux de disque.
Décision : Si la part reclaimable est grande, prunez délibérément. N’attendez pas que votre VHDX atteigne 95% et que tout ralentisse.

Task 15: Pruner en sécurité (et accepter le compromis)

cr0x@server:~$ docker builder prune --all --force
Deleted build cache objects:
v8m3q8qgk7yq4o0l5u3f7s1m2
...
Total reclaimed space: 22.6GB

Signification de la sortie : Vous avez récupéré de l’espace, au prix de reconstruire des couches plus tard.
Décision : En dev, l’espace disque et la stabilité valent mieux que gagner 90 secondes sur le prochain build.

Task 16: Confirmer que vous n’exécutez pas accidentellement des workloads sur /mnt/c

cr0x@server:~$ kubectl get pv -A -o wide
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                      STORAGECLASS   REASON   AGE   VOLUMEMODE
pvc-1d2c7f7e-2f5d-4c0d-9a3a-2c6f9d8b1a7c   10Gi       RWO            Delete           Bound    default/db-data           standard                8m    Filesystem

Signification de la sortie : Cela n’affiche pas le chemin hôte. Dans kind, local‑path et le provisioner par défaut diffèrent.
Décision : Inspectez la storage class et le comportement du provisioner ; si ça bind sur hostPath vers un chemin monté Windows, corrigez‑le immédiatement.

Task 17: Diagnostiquer kubelet/container via les logs du nœud (container du nœud kind)

cr0x@server:~$ docker ps --format 'table {{.Names}}\t{{.Status}}' | grep dev-control-plane
dev-control-plane   Up 6 minutes
cr0x@server:~$ docker logs dev-control-plane | tail -n 20
I0205 09:10:12.123456       1 server.go:472] "Kubelet version" kubeletVersion="v1.29.2"
I0205 09:10:15.234567       1 kubelet.go:2050] "Skipping pod synchronization" error="PLEG is not healthy"
...

Signification de la sortie : Si PLEG est unhealthy, le kubelet peine — souvent à cause d’E/S disque ou de lenteur du runtime conteneur.
Décision : Vérifiez la latence disque, la santé du runtime conteneur et le niveau de churn des logs.

Task 18: Vérification rapide des tempêtes de logs (elles peuvent être votre workload le plus chaud)

cr0x@server:~$ kubectl logs -n kube-system deploy/coredns --tail=20
.:53
[INFO] plugin/reload: Running configuration SHA512 = 7a9b...
[INFO] 10.244.0.1:52044 - 46483 "A IN kubernetes.default.svc.cluster.local. udp 62 false 512" NOERROR qr,aa,rd 114 0.000131268s

Signification de la sortie : Quelques logs DNS sont normaux. Des milliers par seconde ne le sont pas.
Décision : Si les logs sont chauds, réduisez la verbosité, corrigez la boucle de retry du client, sinon vous paierez en CPU et en écritures disque.

Trois mini‑histoires d’entreprise issues du terrain

Mini‑histoire 1 : L’incident causé par une mauvaise hypothèse

Une équipe avec laquelle j’ai travaillé avait standardisé WSL2 pour les clusters dev car c’était « à peu près Linux ».
Ils gardaient leur repo sur le système de fichiers Windows pour une intégration IDE facile, puis le montaient dans des conteneurs pour les builds et tests.
Ça semblait correct pour de petits services. Puis l’équipe plateforme a ajouté un Postgres local, un controller et une suite de tests lançant des migrations à chaque exécution.

Le symptôme était étrange : les migrations prenaient parfois 30 secondes, parfois 10 minutes.
Les gens accusaient « l’overhead Kubernetes » et « cet operator qu’on a ajouté ».
Un ingénieur a essayé d’y remédier en augmentant les limites CPU. Ça a empiré — plus de CPU a juste fait atteindre plus vite le goulot stockage.

La mauvaise hypothèse était simple : ils pensaient que /mnt/c était « juste un autre système de fichiers ».
Ce n’est pas le cas. C’est une frontière avec un comportement de cache différent, des performances métadonnées différentes et des sémantiques de flush différentes.
Leur volume de base de données et leurs caches de build étaient sur le chemin lent.

La correction fut peu flatteuse : déplacer la base et le cache de build dans le système de fichiers Linux, et ne garder le checkout source sur Windows que si nécessaire.
Ils ont aussi ajouté un script preflight qui refusait de démarrer la stack s’il détectait des PV pointant vers /mnt/c.
Les performances se sont stabilisées instantanément. Personne n’a fait la fête — c’est souvent le signe d’une bonne correction.

Mini‑histoire 2 : L’optimisation qui a mal tourné

Une autre entreprise voulait des « clusters locaux plus rapides », ils ont donc préchargé tout : stack observabilité, ingress, cert‑manager et quelques operators.
L’idée était noble : réduire le temps d’onboarding, s’assurer que tout le monde ait la même base, éviter « ça marche sur mon portable ».
Ils ont même construit un script interne qui créait le cluster et installait tous les charts en une fois.

Puis les tickets ont commencé. Les portables chauffaient pendant les réunions. L’autonomie chutait.
kubectl mettait parfois plusieurs secondes. Les développeurs ont commencé à désactiver des composants « temporairement », ce qui est vite devenu une dérive permanente.
L’équipe plateforme a réagi en poussant plus de limites par défaut et plus de réplicas, pour « parité prod ».

Le retour de bâton venait du churn des controllers et du travail en arrière‑plan.
Le scraping Prometheus, l’ingestion Loki, la reconciliation de cert‑manager et les boucles d’operator ne sont pas gratuits.
Dans un vrai cluster, on amortit ce coût sur des serveurs. Sur un portable, vous le sentez à chaque accélération de ventilateur.

La correction fut de définir deux profils : core (ingress + DNS + storage + metrics‑server) et full (la pile lourde).
Core est par défaut ; full est opt‑in pour le debug.
Ils ont aussi réduit les intervalles de scraping et la rétention en mode local. L’ironie : l’onboarding a été plus rapide parce que les gens ont arrêté de lutter contre leur environnement.

Mini‑histoire 3 : La pratique ennuyeuse mais correcte qui a sauvé la mise

Une entreprise régulée (du genre qui adore les tableurs) avait une expérience WSL2 Kubernetes remarquablement lisse.
Leur secret n’était pas une chaîne d’outils fancy. C’était la discipline : verrouillage de versions, création de cluster reproductible et nettoyage agressif.
Chaque développeur avait la même image kind node, les mêmes versions de charts et les mêmes limites par défaut.

Ils avaient aussi une routine de maintenance hebdomadaire : prune des images inutilisées, suppression des namespaces inutiles et compaction de l’environnement dev quand nécessaire.
C’était planifié, documenté et ennuyeux.
Les développeurs se sont plaints au début — personne n’aime une « journée maintenance » sur son portable.

Puis un jour une mise à jour Windows a modifié quelque chose de subtil dans le réseau.
La moitié des clusters de l’organisation a commencé à avoir des pannes DNS intermittentes.
Les équipes avec des environnements dérivés ont eu un gros bazar : versions CNI différentes, kubeconfigs aléatoires, overrides DNS locaux incohérents.
Les équipes disciplinées pouvaient reproduire rapidement et comparer à l’identique.

Elles l’ont isolé au comportement des resolvers sous VPN, ont déployé un contournement standardisé et sont retournées travailler.
La pratique ennuyeuse a sauvé la mise : versions cohérentes et baselines identiques rendent le débogage fini et rapide.

Procédure de diagnostic rapide : quoi vérifier en premier, second, troisième

Quand votre portable fond ou que votre cluster est « lent », vous n’avez pas le temps d’admirer l’architecture.
Vous avez besoin d’un chemin déterministe vers le goulot.

Premier : L’hôte (Windows + WSL2) est‑il sous pression de ressources ?

  1. Vérifier l’utilisation mémoire et swap WSL2 : free -h. Si available est bas et le swap augmente, vous êtes limité par la mémoire.
  2. Vérifier le remplissage disque : df -h /. Si proche du plein, tout devient plus lent et fragile.
  3. Vérifier rapidement l’intégrité I/O : dd ... conv=fdatasync sur le FS Linux vs /mnt/c. Si le FS Linux est aussi lent, vous avez une pression I/O au niveau système.

Second : Le plan de contrôle Kubernetes est‑il sain ou bloqué ?

  1. API readyz : kubectl get --raw='/readyz?verbose'. Si les checks etcd sont lents, suspectez la latence stockage.
  2. Statut des nœuds : kubectl get nodes et kubectl describe node. Si NotReady, regardez les symptômes CNI et kubelet.
  3. Test fumée CoreDNS : lancez un nslookup depuis busybox. Si le DNS est cassé, arrêtez de faire semblant que l’app est le problème.

Troisième : Quel workload brûle réellement CPU/mémoire/E/S ?

  1. Gros consommateurs : kubectl top pods -A --sort-by=memory et --sort-by=cpu.
  2. Tempêtes de logs : vérifiez les logs des pods suspects. Taux d’écriture élevé = pression I/O = ralentissement global.
  3. Churn image/build : docker system df et prune du build cache si ça a gonflé.

Idée paraphrasée de Werner Vogels : « Tout échoue, tout le temps. » Construisez votre setup local pour que l’échec soit rapide à identifier, pas mystérieux.

Erreurs courantes : symptôme → cause racine → correction

1) Symptom : Les ventilateurs du portable s’emballent quand le cluster est « idle »

Cause racine : controllers en arrière‑plan (stack d’observabilité, operators) qui effectuent une reconciliation constante ; ou un pod en crash loop qui écrit des logs.

Correction : kubectl top pods -A, trouvez le glouton ; scale down ; réduisez la rétention/intervalles de scrape ; corrigez les crash loops ; définissez des requests/limits sensés.

2) Symptom : kubectl prend 5–30 secondes aléatoirement

Cause racine : timeouts DNS ou interférence de resolvers VPN ; parfois kubeconfig pointe vers un contexte mort.

Correction : lancez time kubectl get pods -A, puis kubectl get --raw='/readyz?verbose'. Si readyz est OK, testez le DNS dans le cluster. Si le DNS échoue, corrigez resolv.conf/politiques split DNS du VPN ou travaillez hors VPN pour les tâches locales.

3) Symptom : Postgres/MySQL dans le cluster est affreusement lent

Cause racine : PV ou bind mounts sur /mnt/c ou autre frontière lente ; workloads fsync‑heavy l’amplifient.

Correction : conservez les données PV sur le système de fichiers Linux ; utilisez un provisioner local‑path qui écrit dans /var à l’intérieur de WSL, pas sur des montages Windows.

4) Symptom : WSL2 mange de la RAM et ne la rend jamais

Cause racine : page cache Linux + comportement de récupération WSL2 ; gros builds et pulls d’images remplissent le cache ; limite mémoire non configurée.

Correction : définissez un plafond dans .wslconfig ; redémarrez WSL avec wsl.exe --shutdown quand nécessaire ; réduisez l’empreinte du cluster et évitez d’exécuter tout en même temps.

5) Symptom : Le disque se remplit « mystérieusement »

Cause racine : couches d’images conteneurs, build cache, données PV restantes et logs ; VHDX qui grossit ; absence de prune.

Correction : docker system df et docker builder prune --all ; supprimez namespaces/PVs inutilisés ; surveillez df -h.

6) Symptom : Nœud devient NotReady ; pods bloqués en ContainerCreating

Cause racine : CNI cassé ou kubelet/runtime conteneur en difficulté à cause de la pression I/O ; container du nœud kind unhealthy.

Correction : vérifiez les logs du container du nœud kind ; vérifiez les pods CNI dans kube-system ; corrigez la pression disque ; recréez le cluster si l’image du nœud est corrompue.

7) Symptom : L’ingress fonctionne depuis WSL mais pas depuis Windows

Cause racine : attentes de forwarding des ports erronées ; pare‑feu Windows/VPN ; confusion entre IP WSL et localhost Windows.

Correction : décidez d’une méthode d’accès (localhost forwardé vs IP VM WSL) ; documentez‑la ; exposez l’ingress avec un mapping prévisible ; vérifiez avec curl des deux côtés.

8) Symptom : Les builds dans des conteneurs sont plus lents que sur Windows

Cause racine : arbre source sur le montage Windows ; opérations métadonnées lourdes à travers la frontière ; antivirus scannant le chemin Windows.

Correction : gardez la source dans le système de fichiers Linux pour les builds ; utilisez l’IDE Windows via l’intégration WSL ; excluez les répertoires de build de l’AV Windows si la politique le permet.

Seconde et dernière petite blague : Si votre cluster dev a besoin d’un runbook, bravo — vous avez construit un petit environnement de production avec un pire financement.

Checklists / plan étape par étape

Plan d’installation (faire une fois par portable)

  1. Définir les limites WSL2 dans .wslconfig : plafonner mémoire et CPU ; activer un swap raisonnable.
  2. Activer systemd dans WSL (si supporté) et standardiser cela dans votre équipe.
  3. Choisir un runtime : Docker Engine dans WSL2 est bien ; évitez de mélanger Docker Desktop + Docker WSL sauf si vous aimez l’ambiguïté.
  4. Choisir un outil Kubernetes : kind (recommandé) ou k3d. Choisissez‑en un et standardisez les scripts de création de cluster.
  5. Garder les données du cluster sur le FS Linux : assurez‑vous que le stockage du runtime et les chemins PV ne sont pas sur /mnt/c.
  6. Définir des profils : « core » par défaut ; « full » opt‑in. Votre portable n’est pas un cluster de staging.
  7. Verrouiller les versions : image kind node, versions de charts et addons critiques.

Checklist workflow quotidien (rester rapide, rester sain)

  1. Avant un gros travail : free -h et df -h /. Si vous êtes bas, prunez d’abord.
  2. Après une grosse journée de builds : docker system df. Si le build cache est énorme, prunez‑le.
  3. Quand quelque chose paraît lent : lancez le test fumée DNS et les checks /readyz avant de changer quoi que ce soit.
  4. Gardez votre repo là où vos outils sont les plus rapides : si les builds se font en Linux, conservez la copie de travail en Linux.

Checklist maintenance hebdomadaire (ennuyeux, efficace)

  1. Pruner le build cache : docker builder prune --all.
  2. Pruner images et containers inutilisés : docker system prune (attention : comprendre ce que ça supprime).
  3. Supprimer namespaces et PVs inutilisés dans le cluster dev.
  4. Recréer le cluster s’il a accumulé trop de dérive. Le teardown est une fonctionnalité.
  5. Récupérer la mémoire si Windows est serré : wsl.exe --shutdown.

FAQ

1) Dois‑je utiliser Docker Desktop ou Docker Engine dans WSL2 ?

Si vous voulez l’intégration Windows la plus simple et que votre entreprise la standardise, Docker Desktop est acceptable.
Si vous voulez moins de pièces en mouvement et un comportement Linux plus clair, utilisez Docker Engine dans WSL2.
Choisissez‑en un et engagez‑vous ; les setups mixtes créent du folklore de débogage.

2) Pourquoi stocker des données sur /mnt/c pose‑t‑il problème ?

Parce que vous franchissez une frontière virtualisation/interop avec des sémantiques de cache et de métadonnées différentes.
Les bases de données effectuent beaucoup de petites écritures et d’appels fsync. Ce chemin les punit.
Gardez les I/O lourdes dans le FS Linux et considérez /mnt/c comme « bon pour les documents, pas pour les données chaudes ».

3) kind ou k3d : lequel est le moins susceptible de faire fondre mon portable ?

k3d utilise souvent moins de mémoire de base parce que k3s est plus petit.
kind est extrêmement prévisible et simple à verrouiller en version. Les deux peuvent être sûrs pour un portable si vous gardez les workloads légers et fixez des limites WSL2.
Ma préférence : kind pour le travail sur plateforme et la simulation multi‑nœuds ; k3d pour « juste exécuter la stack ».

4) Combien de RAM dois‑je allouer à WSL2 ?

Sur 16Go total : 6–8Go est un bon plafond.
Sur 32Go : 12–16Go est approprié.
Si vous allouez trop, vous masquez de mauvais limits de pods et affamez subtilement les apps Windows.

5) Pourquoi WSL2 conserve‑t‑il la mémoire après avoir arrêté des workloads ?

Linux utilise agressivement la mémoire pour le cache de fichier. C’est normalement une bonne chose.
La restitution de cette mémoire par WSL2 vers Windows peut être plus lente que souhaitée.
Si vous avez besoin de RAM immédiatement, arrêtez WSL ; si vous voulez de la sérénité à long terme, contraignez la mémoire et réduisez le churn en arrière‑plan.

6) Pourquoi mes commandes kubectl sont lentes seulement quand le VPN est activé ?

Les clients VPN injectent souvent des resolvers DNS et des règles de routage.
Kubernetes repose sur le DNS en interne, et kubectl sur une connectivité fiable vers le endpoint API.
Diagnosez avec le test fumée DNS et les checks readyz ; puis décidez de split‑tunnel, d’ajustements des resolvers ou de travailler hors VPN pour les tâches locales.

7) Comment exposer des services vers Windows depuis un cluster tournant dans WSL2 ?

Décidez si vous utilisez des ports localhost forwardés ou l’IP de la VM WSL.
Pour une UX dev prévisible, beaucoup d’équipes font du port‑forward (kubectl port‑forward) ou exécutent un ingress mappé sur des ports connus.
Documentez la méthode afin que votre équipe n’aille pas déboguer « localhost » pour le plaisir.

8) Puis‑je exécuter des workloads stateful (Postgres, Kafka) localement dans WSL2 Kubernetes ?

Oui, mais soyez réaliste. Postgres convient pour le dev si ses données résident sur le FS Linux et que vous n’exécutez pas cinq autres piles lourdes.
Kafka est possible, mais c’est souvent là que la « parité locale » devient « punition locale ». Envisagez des substituts plus légers sauf si vous debuggez un comportement Kafka spécifique.

9) À quelle fréquence dois‑je recréer mon cluster local ?

Si vous faites du travail plateforme avec beaucoup de CRDs et d’installations de controllers, recréer hebdomadairement ou bi‑hebdomadairement est normal.
Si votre cluster est stable et léger, vous pouvez le garder plus longtemps.
Recréez immédiatement dès que vous suspectez de la dérive : DNS étrange, webhooks bloqués ou échecs d’admission mystérieux.

10) Quelle est la cause la plus fréquente de « tout est lent » ?

Le stockage. Soit le workload est sur le mauvais chemin de FS, soit le disque est presque plein, soit le système écrit des logs comme si on payait au nombre de lignes.
La mémoire arrive en second. Le DNS en troisième. Kubernetes lui‑même est rarement la cause première ; il n’est que la scène où le problème se joue.

Prochaines étapes que vous pouvez faire aujourd’hui

  1. Définissez vos limites WSL2 (mémoire, CPU, swap). Si vous ne faites qu’une chose, faites‑cela.
  2. Déplacez les données chaudes hors de /mnt/c : stockage runtime, PVs, bases, caches de build — gardez‑les sur le FS Linux.
  3. Choisissez un profil cluster léger par défaut : kind ou k3d avec seulement les addons core. Faites du « full stack » un profil opt‑in.
  4. Adoptez la procédure de diagnostic rapide : vérifiez la pression hôte, puis la santé du plan de contrôle, puis les plus gros consommateurs. Arrêtez de deviner.
  5. Planifiez la maintenance ennuyeuse : prune des caches, suppression des namespaces inutiles et recréation du cluster quand la dérive s’installe.

L’objectif final n’est pas de construire le cluster local le plus impressionnant. C’est d’en construire un qui se comporte de manière cohérente sous contrainte.
La prévisibilité est ce qui garde votre portable au frais — et votre cerveau aussi.

Industrie informatique : le mythe du « réécrire depuis zéro » — pourquoi ça échoue et ce qui marche

Vous héritez d’un système maintenu par des cron jobs, du savoir tribal et un schéma de base de données qui a l’air d’avoir été conçu lors d’un exercice d’évacuation. Quelqu’un prononce les mots magiques : « Réécrivons-le depuis zéro. » Les têtes hochent. Les feuilles de route sont rafraîchies. Un nouveau dépôt apparaît comme un cahier tout neuf le 1er janvier.

Puis la production arrive. La réécriture ne connaît pas vos clients, vos cas limites, vos contraintes opérationnelles ni la gravité des données. Et votre rotation on-call ne s’est certainement pas engagée pour « deux systèmes, tous deux cassés, pour toujours ».

Le mythe : pourquoi « réécrire depuis zéro » semble vrai

Les réécritures vendent de l’espoir. Elles offrent une rupture propre avec le bazar accumulé : plus de frameworks hérités, plus de hacks « temporaires » de 2017, plus de modules non testables, plus de cette procédure stockée que tout le monde redoute de toucher. L’argument a raison sur le plan émotionnel. Le problème est que les systèmes en production ne fonctionnent pas sur les émotions. Ils fonctionnent sur des invariants.

Une réécriture depuis zéro est généralement vendue comme un projet technique. C’est en réalité un pari organisationnel : que vous pouvez reconstruire non seulement le code, mais aussi le comportement, la sémantique des données, la posture opérationnelle et la gestion des pannes — tandis que l’ancien système continue d’évoluer sous la charge réelle des clients.

Voici la partie que les gens omettent dans le diaporama de réécriture : l’ancien système est un registre fossile d’incidents réels. Il contient le tissu cicatriciel des pannes, des tentatives de fraude, des appareils clients bizarres, des défaillances partielles et des surprises réglementaires. Ce tissu cicatriciel est laid. Il est aussi précieux.

Les réécritures ignorent que les « exigences » ne sont pas dans le système de tickets. Elles sont dans les graphiques de production, dans les notes du on-call et dans les hypothèses silencieuses qui maintiennent les lumières allumées. Quand vous réécrivez, vous supprimez ces hypothèses — puis vous les redécouvrez à 2h13 du matin.

Blague n°1 : Un plan de réécriture, c’est comme acheter un nouveau tapis de course pour se mettre en forme. L’achat donne l’impression d’être productif ; la partie course est celle où la réalité se manifeste.

Pourquoi les réécritures échouent en production (les vraies raisons)

1) La parité fonctionnelle est un piège, pas un jalon

Les équipes considèrent la « parité de fonctionnalités » comme une checklist. En pratique, l’ancien système n’a pas des fonctionnalités ; il a des comportements. Les comportements incluent des valeurs par défaut non documentées, des bizarreries de temporisation, des attentes d’idempotence, des sémantiques de retry et des flux de correction de données qui se produisent hors du chemin heureux.

Quand une réécriture vise la parité, elle cible la surface visible UI/API et rate les parties sales qui comptent : comment le système se comporte quand une passerelle de paiement timeoute, quand un downstream est lent, quand un client retry un POST, quand les horloges divergent, quand il faut retraiter une journée d’événements.

2) Les données sont le produit, et les données sont lourdes

La plupart des systèmes sont des systèmes de données déguisés en interface utilisateur. Une réécriture qui ne commence pas par la sémantique des données — ce que signifient les enregistrements, comment ils évoluent, ce qui peut être en cohérence éventuelle — dérivera vers « un nouveau schéma de base de données qui semble plus joli » puis s’écrasera contre la réalité au moment du cutover.

La migration des données n’est pas un projet de week-end. C’est un exercice de fiabilité soutenu avec backfills, écritures doubles (ou change data capture), réconciliation et plans de rollback. Si votre plan de réécriture n’inclut pas des mois d’exécution des deux chemins de données, vous ne planifiez pas un cutover — vous planifiez un lancer de pièce.

3) La réécriture crée une organisation à cerveau divisé

Deux bases de code signifie deux priorités, deux files de bugs, deux modèles opérationnels et une base client partagée qui attend le même service. En général, les personnes seniors sont attirées par la réécriture, laissant le système legacy avec une capacité réduite et un risque croissant. Puis un incident survient dans le legacy, et l’agenda de réécriture est pillé pour répondre. La réécriture ralentit. Le legacy se dégrade. Tout le monde perd.

4) La préparation opérationnelle n’est pas « on a maintenant Kubernetes »

Les stacks modernes peuvent aggraver les choses quand elles sont utilisées comme accessoires de crédibilité. Échanger un ensemble de modes de défaillance contre un autre n’est pas un progrès ; ce sont juste de nouvelles façons de pager les gens.

La préparation opérationnelle concerne : des SLO bien définis, de l’instrumentation, la qualité des alertes, des rollouts contrôlés, la modélisation de capacité, la gestion des dépendances, des runbooks et une culture capable de soutenir le changement continu. Si l’équipe de réécriture ne sait pas bien faire tourner l’ancien système, elle ne fera pas mieux avec le nouveau — juste avec du YAML plus brillant.

5) La performance est une propriété émergente, on ne peut pas l’« unit-test »

L’ancien système comporte des optimisations de performance issues du combat : cache à des couches étranges, tables dénormalisées, agrégats précomputés, index savamment placés, coalescence de requêtes et règles « ne faites pas ça sur le chemin chaud ». La réécriture commence souvent propre, puis des régressions de performance apparaissent sous une charge de production. Ensuite vous collez des caches, des queues et des jobs en arrière-plan, reconstruisant finalement la même complexité — sans la mémoire institutionnelle.

6) Le nouveau système est correct à petite échelle et faux à grande échelle

Les revues de code détectent les problèmes locaux. Elles ne détectent pas le comportement système sous pannes partielles. Les réécritures échouent parce qu’elles modélisent le monde comme fiable et cohérent. La production n’est ni l’un ni l’autre.

7) La sécurité et la conformité ne sont pas « pour plus tard »

Les réécritures reportent fréquemment les contrôles de sécurité, les pistes d’audit, les règles de rétention et le principe du moindre privilège. Ensuite vous découvrez que les « logs bizarres » et les patterns d’accès de l’ancien système existaient parce qu’un auditeur avait posé une question très précise. Vous paniquez ou vous retardez le cutover. Les deux coûtent cher.

Faits et histoire : l’industrie est déjà passée par là

  • Années 1980–1990 : De grandes organisations ont tenté à répétition des réécritures pilotées par des outils CASE des systèmes mainframe ; beaucoup se sont effondrées sous la complexité du périmètre et de la migration des données.
  • L’effort de l’an 2000 (Y2K) a enseigné aux entreprises une leçon brutale : remplacer tout n’est rarement faisable ; la correction ciblée et le triage basé sur le risque l’emportent souvent.
  • L’ère des déploiements ERP « big bang » a montré un schéma : les cutovers échouent quand les processus métier ne sont pas cartographiés vers des workflows réels et leurs exceptions.
  • L’essor de l’architecture orientée services (SOA) promettait de la modularité ; beaucoup de projets ont livré des monolithes distribués avec plus de latence et un débogage plus difficile.
  • Popularité des microservices (mi-2010s) a accru la tentation de réécrire, mais a aussi augmenté le coût de la maturité opérationnelle : tracing, cartographie des dépendances et confinement des pannes sont devenus obligatoires.
  • L’outillage Change Data Capture (CDC) a mûri et a rendu les migrations incrémentales plus pratiques, déplaçant l’économie loin des réécritures en big-bang.
  • L’élasticité du cloud a réduit certains risques de capacité, mais introduit de nouveaux : voisins bruyants, quotas de services et incidents liés à la facturation.
  • L’observabilité comme discipline (métriques, logs, traces) est devenue mainstream ; elle a exposé que beaucoup de pannes « legacy » étaient en réalité des problèmes de dépendance et de capacité.

Trois mini-récits des tranchées d’entreprise

Mini-récit 1 : L’incident causé par une mauvaise hypothèse

Une entreprise SaaS de taille moyenne a réécrit son service de facturation dans un nouveau langage pour « le rendre maintenable ». L’équipe a fait un travail minutieux sur les tests unitaires et le contrat API. Ils ont construit un schéma de base de données propre et déployé derrière un feature flag.

L’hypothèse erronée était subtile : ils supposaient que tous les clients traiteraient POST /charge comme non-idempotent et ne renverraient jamais automatiquement de retry. Le système legacy avait implémenté en douce l’idempotence via un token fourni par le client, parce qu’années auparavant un client mobile renvoyait des requêtes sur des réseaux instables.

La réécriture ne l’a pas implémenté. Lors d’un événement de jitter réseau entre régions, un sous-ensemble de clients a renvoyé des charges. Le nouveau service a créé plusieurs charges. Le support s’est enflammé. Les finances sont intervenues. Les ingénieurs ont été pagés pour un « incident d’exactitude des données », un type d’incident qui ne cesse de faire mal même quand les graphiques redeviennent verts.

La correction n’était pas « ajouter plus de tests ». Il a fallu traiter l’idempotence et les retries comme des exigences de premier ordre, les documenter comme invariants et construire des outils de réconciliation. Ils ont aussi ajouté un canary qui simulait des retries et vérifiait que le grand-livre restait stable.

Morale : si vous ne modélisez pas explicitement le comportement des clients, le réseau le fera pour vous.

Mini-récit 2 : L’optimisation qui s’est retournée contre eux

Une équipe plateforme interne d’entreprise a réécrit un pipeline de reporting pour réduire les coûts. Ils ont remplacé un job d’agrégation piloté par la base par un pipeline streaming et ont réglé les batchs de façon agressive pour minimiser CPU et stockage.

L’optimisation brillait dans les benchmarks synthétiques. La production était différente. Leur batching a augmenté la latence de bout en bout et créé des pics de charge sur les services downstream. Un pipeline « bon marché » est devenu un générateur de thundering herd. Le downstream a limité le débit. Les retries se sont accumulés. Les buffers internes du système streaming ont grossi, puis la logique de backpressure a commencé à abandonner des messages sous charge soutenue.

Le système avait maintenant deux problèmes au lieu d’un : les rapports étaient en retard et certains étaient erronés. L’équipe a passé des semaines à construire des contrôles compensatoires : dead-letter queues, outils de replay et un processus de correction des « données tardives ». Les coûts ont augmenté, pas diminué, parce que la surcharge opérationnelle est aussi un coût — payé en attention humaine.

Ils ont finalement réduit le batching, accepté un coût de calcul steady-state plus élevé et mis des SLO stricts sur la fraîcheur et l’exactitude. L’« optimisation » avait optimisé la mauvaise chose : la facture, pas le produit.

Mini-récit 3 : La pratique ennuyeuse mais correcte qui a sauvé la mise

Une société modernisant une pile d’authentification a résisté à la tentation de réécrire et a fait quelque chose douloureusement peu glamour : ils ont construit une suite de tests de compatibilité basée sur le trafic de production réel. Pas seulement des tests unitaires — des requêtes enregistrées, des tokens cas limites et des modes de défaillance représentatifs.

Ils ont déployé le nouveau service d’abord en shadow reader. Il validait les tokens et calculait des décisions sans les appliquer. Pendant des semaines il comparait ses sorties à celles du système legacy et consignait les divergences avec assez de contexte pour déboguer.

Ils ont découvert une longue traîne d’anomalies : tolérance au skew d’horloge, un ancien algorithme de signature encore utilisé par un client, et un code d’erreur spécifique sur lequel un partenaire comptait. Rien de cela n’était dans la spécification. Tout cela comptait.

Quand ils ont finalement basculé le trafic, le lancement a été presque ennuyeux. Le on-call a reçu quelques pages — surtout parce que les tableaux de bord étaient trop sensibles — puis les choses se sont stabilisées. La « pratique ennuyeuse » a été de traiter la migration comme un exercice de collecte de preuves, pas comme un saut héroïque.

Ce qui fonctionne réellement : des patterns qui survivent au contact de la réalité

Commencez par les invariants, pas par l’architecture

Avant de débattre des frameworks, écrivez les invariants. Les choses qui doivent rester vraies même quand les dépendances échouent :

  • Règles d’idempotence : quelles opérations peuvent être réessayées sans risque, et comment.
  • Contraintes d’exactitude des données : ce qui « ne peut pas arriver » (double facturation, solde négatif, enregistrement d’audit perdu).
  • Budgets de latence et objectifs de disponibilité : ce que l’utilisateur tolérera.
  • Exigences de cohérence : où la cohérence éventuelle est acceptable et où elle ne l’est pas.
  • Exigences de rollback : ce que signifie annuler un déploiement, une migration, un backfill.

Utilisez le pattern strangler fig (et engagez-vous à l’appliquer)

Le pattern strangler fig fonctionne parce qu’il respecte que les systèmes en production sont des écosystèmes vivants. Vous ne remplacez pas l’arbre en un jour ; vous faites pousser un nouveau système autour et vous transférez progressivement les responsabilités.

Concrètement, cela signifie :

  • Mettre une couche de routage (API gateway, reverse proxy ou ingress service mesh) devant l’ancien système.
  • Déplacer un endpoint, un workflow ou une tranche de domaine à la fois.
  • Conserver un rollback rapide : router le trafic en arrière immédiatement.
  • Utiliser des lectures shadow et des comparaisons lorsque c’est possible.

Privilégiez « remplacer derrière une interface » plutôt que « tout réécrire »

Quand un sous-système est vraiment pourri, remplacez-le derrière une interface stable. Gardez le contrat. Gardez les métriques. Gardez les runbooks opérationnels. Changez l’implémentation interne. Cela réduit le rayon d’explosion et empêche les équipes de reconstruire tout l’univers juste pour réparer un mur.

Migration des données : dual-write ou CDC, plus réconciliation

Choisissez votre poison avec soin :

  • Dual-write : l’application écrit dans l’ancien et le nouveau store. Conceptuellement plus simple, plus difficile à rendre correct sous défaillance partielle.
  • CDC : traiter l’ancienne base comme source de vérité et streamer les changements vers le nouveau store. Souvent plus robuste, mais exige un contrôle strict de l’ordre et de l’évolution des schémas.

Quoi qu’il en soit, vous avez besoin de réconciliation : jobs périodiques comparant comptes, checksums et invariants entre ancien et nouveau. Sans réconciliation, vous fonctionnez au feeling.

Construisez la parité opérationnelle avant la parité fonctionnelle

La parité opérationnelle est la capacité à faire tourner, déboguer et récupérer. Elle inclut :

  • Tableaux de bord montrant saturation, erreurs, latence et santé des dépendances.
  • Alertes actionnables (pages sur les symptômes, pas sur le bruit).
  • Runbooks qui supposent des pannes partielles et incluent des rollbacks.
  • Tests de charge reproduisant la forme du trafic production, pas seulement le volume.

Une citation à coller sur votre écran

L’espoir n’est pas une stratégie. — James Cameron

Les opérations ne sont pas cyniques ; elles sont allergiques à la pensée magique. Planifiez les modes de défaillance que vous aurez forcément.

Gardez l’ancien système sain pendant la migration

C’est là que le leadership doit grandir. Si vous affamez le système legacy pendant que vous construisez le remplacement, le legacy s’effondrera et consommera l’équipe de remplacement. Allouez une capacité explicite pour le travail de fiabilité legacy pendant la migration. Traitez-le comme de la réduction de risque, pas comme un « effort gaspillé ».

Blague n°2 : La seule chose pire qu’un système fragile est deux systèmes fragiles qui ne sont pas d’accord sur qui est responsable.

Tâches pratiques : commandes, sorties, ce que cela signifie et ce que vous décidez

Voici les tâches que vous exécutez réellement quand quelqu’un affirme « la réécriture résoudra la performance/la fiabilité ». Vous n’argumentez pas. Vous mesurez. Chaque tâche ci‑dessous inclut une commande réaliste, une sortie typique, ce que cette sortie signifie et la décision que vous en tirez.

1) Identifier saturation CPU vs plaintes de latence

cr0x@server:~$ uptime
 14:22:01 up 37 days,  4:11,  2 users,  load average: 18.42, 17.96, 16.88

Ce que cela signifie : Une charge moyenne bien au-dessus du nombre de CPU (vous devez connaître le nombre de cœurs) suggère une contention CPU ou un embouteillage de la queue runnable, éventuellement aussi de l’attente I/O suivant la charge.

Décision : Ne lancez pas une réécriture parce que « c’est lent ». Déterminez d’abord si vous êtes lié par le CPU, l’I/O ou des verrous. Ensuite : vérifiez la répartition CPU et la file d’exécution.

2) Vérifier l’utilisation par CPU et iowait

cr0x@server:~$ mpstat -P ALL 1 3
Linux 6.5.0 (prod-app-01)  02/04/2026  _x86_64_  (16 CPU)

22:22:10     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
22:22:11     all   62.11    0.00   11.83   18.44    0.00    0.52    0.00    0.00    0.00    7.10
22:22:11       0   71.00    0.00   12.00   10.00    0.00    0.00    0.00    0.00    0.00    7.00

Ce que cela signifie : Un %iowait élevé suggère que le CPU attend le stockage disque/réseau. Un %usr élevé suggère une charge processeur. Ici c’est mixte : le CPU est occupé et attend de l’I/O.

Décision : Enquêter sur la latence de stockage et de base de données avant de réécrire la logique applicative. Une réécriture ne changera pas vos disques.

3) Vérifier la pression mémoire et le swapping

cr0x@server:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:            62Gi        54Gi       1.1Gi       1.8Gi       6.9Gi       4.2Gi
Swap:          8.0Gi       2.7Gi       5.3Gi

Ce que cela signifie : L’utilisation du swap est non négligeable. Si le système swappe activement, la latence tail va grimper.

Décision : Avant de réécrire, corrigez le dimensionnement mémoire, les fuites ou les limites de conteneurs. Si vous ne pouvez pas faire tourner le service actuel sans swap, le nouveau le fera probablement aussi — juste plus vite.

4) Vérifier le swapping actif et les fautes majeures

cr0x@server:~$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 8  2 2795520 1187328  9120 6852140   0  64  1220  1780 8210 9230 61 11  7 21  0
 7  1 2795584 1169000  9120 6854100   0 128  1100  1650 8030 9012 60 12  8 20  0

Ce que cela signifie : so (swap out) indique du swapping actif. wa est aussi élevé, cohérent avec de l’attente I/O.

Décision : Traitez cela comme un incident ops, pas comme une opportunité roadmap. Réduisez l’empreinte mémoire, corrigez les voisins bruyants ou scalez. La réécriture ne guérira pas le swapping.

5) Trouver les plus gros consommateurs CPU

cr0x@server:~$ ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head
  PID COMMAND         %CPU %MEM
 8123 java            345.2 18.4
 9001 redis-server     72.1  3.2
 7442 nginx            38.0  0.8

Ce que cela signifie : Un seul processus consommant plusieurs cœurs peut être attendu, mais confirmez que cela s’aligne sur le débit. Si le CPU est élevé et que le débit est faible, vous êtes en train de tourner en rond ou enfermé sur des locks.

Décision : Profilez le processus chaud et vérifiez la contention des threads. Si l’argument de réécriture est « le nouveau langage sera plus rapide », exigez des preuves avec des flame graphs d’abord.

6) Identifier rapidement les goulots disques

cr0x@server:~$ iostat -xz 1 3
Linux 6.5.0 (prod-db-01)  02/04/2026  _x86_64_  (16 CPU)

Device            r/s     w/s   rMB/s   wMB/s  await  svctm  %util
nvme0n1         220.0   410.0    35.2    88.1  18.40   0.90  92.50

Ce que cela signifie : %util élevé et await croissant implique que le périphérique est saturé ou que les queues s’accumulent. Un svctm bas avec await élevé indique la profondeur de queue/la latence, pas la lenteur brute du périphérique.

Décision : Vous avez besoin d’optimisation de requêtes, de changements d’index ou d’une distribution I/O. Une réécriture qui conserve les mêmes patterns d’accès heurtera le même mur.

7) Vérifier la capacité du système de fichiers et l’épuisement des inodes

cr0x@server:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p2  900G  855G   45G  96% /
cr0x@server:~$ df -i
Filesystem       Inodes   IUsed    IFree IUse% Mounted on
/dev/nvme0n1p2  5900000 5892000     8000  100% /

Ce que cela signifie : Un disque presque plein est mauvais ; l’épuisement des inodes est plus sournois et peut casser les déploiements, le logging et les fichiers temporaires.

Décision : Stoppez. Nettoyez. Ajoutez des politiques de rétention. Si votre réécriture est « parce que les déploiements échouent », et que la raison est les inodes, vous n’avez pas besoin d’une nouvelle base de code — vous avez besoin d’entretien.

8) Vérifier les erreurs réseau et les retransmissions

cr0x@server:~$ netstat -s | egrep -i 'retrans|listen|listenoverflows|packet receive errors' | head
    12455 segments retransmitted
    37 packet receive errors

Ce que cela signifie : Les retransmissions et erreurs de réception peuvent produire de la « latence aléatoire ». Votre appli peut être innocente.

Décision : Enquêtez sur la NIC, des mismatches MTU, des load balancers surchargés ou des problèmes inter-AZ avant de réécrire la couche service.

9) Inspecter les états de connexion TCP (fuites ou clients lents)

cr0x@server:~$ ss -s
Total: 14021
TCP:   10234 (estab 812, closed 9132, orphaned 5, timewait 7210)

Transport Total     IP        IPv6
RAW       0         0         0
UDP       29        25        4
TCP       1102      1011      91
INET      1131      1036      95
FRAG      0         0         0

Ce que cela signifie : Un nombre excessif de timewait peut indiquer des connexions de courte durée sans keep-alives, ou un comportement client agressif en retry.

Décision : Ajustez la réutilisation des connexions, les paramètres du load balancer et le comportement des clients. Une réécriture ne changera pas la physique TCP.

10) Vérifier le throttling des conteneurs (les limites CPU Kubernetes mordent)

cr0x@server:~$ kubectl -n payments top pods | head
NAME                           CPU(cores)   MEMORY(bytes)
payments-api-6d8d6c6b6c-2qz7m  980m         740Mi
payments-api-6d8d6c6b6c-pk9h4  995m         755Mi
cr0x@server:~$ kubectl -n payments describe pod payments-api-6d8d6c6b6c-2qz7m | egrep -i 'Limits|Requests|throttl' -n | head -n 20
118:    Limits:
119:      cpu:     1
120:      memory:  1Gi

Ce que cela signifie : Des pods coincés à la limite CPU subissent probablement du throttling, provoquant des pics de latence qui ressemblent à « la nouvelle appli est plus lente ».

Décision : Réexaminez les limits/requests CPU et les politiques HPA. Si vous réécrivez sur Kubernetes sans comprendre le throttling, vous avez juste déplacé le problème dans du YAML.

11) Identifier la contention sur les verrous de base de données (un angle mort classique des réécritures)

cr0x@server:~$ psql -U postgres -d appdb -c "select pid, wait_event_type, wait_event, state, query from pg_stat_activity where wait_event_type is not null order by pid limit 5;"
 pid  | wait_event_type |   wait_event   | state  |                  query
------+-----------------+----------------+--------+------------------------------------------
 4142 | Lock            | transactionid  | active | UPDATE invoices SET status='paid' ...
 4221 | Lock            | relation       | active | ALTER TABLE ledger ADD COLUMN ...

Ce que cela signifie : Les requêtes sont bloquées sur des verrous. Les problèmes de performance peuvent être dus à des DDL de migration, pas à la qualité du code applicatif.

Décision : Planifiez les migrations lourdes, réduisez la portée des verrous, utilisez des techniques de changement de schéma en ligne. Ne réécrivez pas parce que « Postgres est lent » alors que vous tenez des verrous.

12) Vérifier les requêtes lentes et cibler les plus coupables

cr0x@server:~$ psql -U postgres -d appdb -c "select calls, mean_exec_time, rows, left(query,120) as q from pg_stat_statements order by mean_exec_time desc limit 5;"
 calls | mean_exec_time | rows | q
-------+----------------+------+------------------------------------------------------------
   412 |         982.14 |   12 | SELECT * FROM orders WHERE customer_id = $1 ORDER BY created_at DESC LIMIT 50
   201 |         744.33 |    1 | SELECT balance FROM accounts WHERE id = $1 FOR UPDATE

Ce que cela signifie : Vous avez des cibles concrètes : ajouter des index, changer la forme des requêtes, réduire le locking. Ceci est généralement moins coûteux qu’une réécriture.

Décision : Corrigez d’abord les requêtes chaudes. Si vous voulez quand même réécrire, au moins conservez les leçons des requêtes afin que le nouveau système ne les reproduise pas.

13) Valider le lag de réplication avant un cutover

cr0x@server:~$ mysql -e "SHOW SLAVE STATUS\G" | egrep -i 'Seconds_Behind_Master|Slave_IO_Running|Slave_SQL_Running'
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 43

Ce que cela signifie : Un lag de réplication signifie que votre « lecture depuis le nouveau système » peut être obsolète. Cela peut casser les attentes des utilisateurs pendant la migration.

Décision : Acceptez la staleness explicitement (et concevez pour ça) ou ne basculez pas les lectures tant que le lag n’est pas constamment bas.

14) Détecter les changements de taux d’erreur pendant un canary

cr0x@server:~$ kubectl -n payments logs deploy/payments-api --since=5m | egrep -c " 5[0-9][0-9] "
27

Ce que cela signifie : Une augmentation des 5xx après un déploiement est une défaillance canary jusqu’à preuve du contraire.

Décision : Rollback rapide, puis debug avec traces et vérifications de dépendances. Ne « forcez pas » parce que la feuille de route de réécriture l’exige.

15) Confirmer que vous avez assez de descripteurs de fichiers sous charge

cr0x@server:~$ ulimit -n
1024
cr0x@server:~$ cat /proc/$(pgrep -n nginx)/limits | egrep -i "open files"
Max open files            1024                 1024                 files

Ce que cela signifie : 1024 FD est souvent trop bas pour des proxies/services très sollicités. Vous pouvez rencontrer des échecs de connexion qui ressemblent à « la nouvelle appli est instable ».

Décision : Augmentez les limites, vérifiez les paramètres du runtime de conteneur et retestez. Encore une fois : corrigez les fondamentaux avant de redessiner l’univers.

Playbook de diagnostic rapide : quoi vérifier en premier/deuxième/troisième

Ceci est le drill quand quelqu’un affirme « le système legacy est le goulot » ou « la réécriture sera plus rapide ». Vous pouvez l’exécuter en moins d’une heure sur un incident live (avec précaution) ou en staging avec une charge proche de la production.

Première étape : saturation, erreurs ou latence dépendance ?

  • Vérifier les taux d’erreur (pics 5xx/4xx, timeouts). Si les erreurs ont grimpé, la performance peut être un symptôme d’une défaillance partielle.
  • Vérifier la saturation : CPU iowait, await disque, retransmissions réseau, connexions BD, pools de threads.
  • Vérifier la santé des dépendances : BD, cache, broker de messages, APIs externes, DNS, expiration de certificats.

Objectif : classer le problème : lié au calcul, à l’I/O, aux verrous, au réseau ou à une défaillance de dépendance.

Deuxième étape : trouver la boucle serrée dans le chemin de requête

  • Choisir un endpoint orienté utilisateur (trafic le plus élevé ou latence la plus importante).
  • Tracer de bout en bout (distributed tracing si disponible ; sinon corrélation par IDs de logs).
  • Mesurer le temps passé dans : CPU appli, requête BD, cache, upstream, sérialisation, retries.

Objectif : identifier où le temps est réellement passé, pas où il en a l’air.

Troisième étape : valider par une expérience contrôlée

  • Faire un seul changement (index, TTL de cache, taille du pool de connexions, limite CPU).
  • Canary sur une petite tranche de trafic.
  • Comparer : percentiles de latence, taux d’erreur, métriques de saturation.

Objectif : décisions basées sur des preuves. Si la proposition de réécriture ne résiste pas à ce niveau de contrôle, c’est un projet de moral, pas un projet d’ingénierie.

Erreurs courantes : symptômes → cause racine → correctif

« On a réécrit et la latence a empiré »

Symptômes : latence p95/p99 en hausse, CPU correct, tableaux de bord montrent plus d’appels réseau.

Cause racine : Vous avez décomposé en services sans budget de latence, transformant des appels in-process en chaînes RPC. Vous avez construit un monolithe distribué.

Correctif : Resserrez des frontières bavardes, batcher les appels, introduisez un cache local et imposez des budgets par hop. Privilégiez des APIs coarse-grained plutôt que des frontières microservice « pures ».

« Le cutover a fonctionné, puis un dérive des données est apparue »

Symptômes : Les rapports ne correspondent pas, les soldes diffèrent, les clients voient des états incohérents des jours plus tard.

Cause racine : Écriture double sans sémantique exactly-once ; absence de réconciliation ; événements hors ordre ; règles de fuseau/arrondi incohérentes.

Correctif : Implémentez des jobs de réconciliation et des checks d’invariants ; utilisez des clés d’idempotence ; définissez une source autoritaire par champ ; adoptez CDC avec garanties d’ordre quand possible.

« Le nouveau système est stable, mais l’on-call est pire »

Symptômes : Plus d’alertes, debug plus difficile, plus d’inconnues.

Cause racine : Observabilité et runbooks différés ; alertes basées sur métriques brutes plutôt que sur signaux d’impact client ; absence de tracing.

Correctif : Instrumentez les golden signals (latence, trafic, erreurs, saturation). Ajoutez du tracing. Réécrivez les alertes pour qu’elles soient basées sur les symptômes et liées aux SLO.

« On ne peut pas livrer parce qu’on course la parité pour toujours »

Symptômes : Projet de réécriture qui dure trimestres/années, le business continue d’ajouter des fonctionnalités au legacy, la réécriture n’arrive jamais à rattraper.

Cause racine : Mentalité big-bang ; pas de cutovers incrémentaux ; équipe de réécriture isolée des priorités produit réelles.

Correctif : Pattern strangler avec tranches verticales fines. Déplacez un workflow bout à bout. Geler certaines fonctionnalités legacy ou rediriger les nouvelles fonctionnalités vers le nouveau chemin uniquement.

« On a remplacé le schéma de la base et tout a souffert »

Symptômes : Requêtes lentes, contention de verrous, fenêtres de migration qui s’allongent, rollbacks risqués.

Cause racine : Redesign du schéma ignorant les patterns d’accès et les contraintes opérationnelles ; index manquants ; migrations non bornées.

Correctif : Commencez par le profiling des requêtes et une stratégie d’index. Utilisez des migrations en ligne, des backfills et des contraintes phaseées. Conservez l’ancien schéma comme couche d’adaptation si nécessaire.

« On a réécrit pour améliorer la sécurité et on a introduit de nouvelles failles »

Symptômes : Pistes d’audit manquantes, contrôles d’autorisation plus faibles, prolifération des secrets.

Cause racine : Les contrôles de sécurité étaient implicites dans le legacy et non modélisés ; la nouvelle stack a été livrée sans threat modeling.

Correctif : Inventoriez les invariants de sécurité (règles authz, logs d’audit, rétention). Ajoutez des contrôles automatisés dans le CI. Utilisez le moindre privilège et une gestion centralisée des secrets dès le premier jour.

Checklists / plan pas à pas

Checklist de décision : devriez-vous réécrire du tout ?

  1. Pouvez-vous nommer le goulot ? Si non, faites de la mesure d’abord (voir tâches et playbook de diagnostic).
  2. Le problème est-il la maintenabilité du code ou le comportement du système ? Si les incidents sont principalement de capacité/dépendance, réécrire le code applicatif n’aidera pas.
  3. Existe-t-il un contrat stable ? Si l’interface est instable, verrouillez-la avant de changer l’implémentation interne.
  4. Y a-t-il un plan de données ? Si vous ne pouvez pas articuler dual-write/CDC, réconciliation et rollback, vous n’êtes pas prêt.
  5. Avez-vous la maturité ops ? Tableaux de bord, alertes, tracing, runbooks, rollouts en étapes. Si non, construisez cela d’abord.
  6. Pouvez-vous staffer deux systèmes ? Si non, faites un remplacement incrémental, pas des réécritures parallèles.

Un plan de modernisation plus sûr (fonctionne même avec peu de temps)

  1. Inventoriez les invariants : idempotence, règles d’exactitude, rétention, authz, codes d’erreur, limites de débit.
  2. Instrumentez le système legacy s’il est aveugle : ajoutez des request IDs, histogrammes de latence, taxonomies d’erreur.
  3. Mettez une couche de routage devant : gateway/proxy qui peut splitter le trafic et rollbacker instantanément.
  4. Choisissez une tranche verticale : un workflow qui apporte une vraie valeur et sollicite des dépendances réelles.
  5. Shadow d’abord : le nouveau système calcule des réponses et logge les divergences, mais ne les sert pas.
  6. Canary : 1% trafic, puis 5%, puis 25%, en mesurant SLOs et invariants.
  7. Basculez les lectures prudemment : les lectures obsolètes sont visibles par l’utilisateur. Utilisez des budgets de cohérence et un comportement clair.
  8. Basculez les écritures en dernier : assurez-vous que l’idempotence, les retries et la réconciliation sont prouvés.
  9. Retirez en morceaux : supprimez les endpoints legacy au fur et à mesure qu’ils arrivent à zéro trafic ; conservez des chemins d’accès d’archive pour l’audit.

Checklist de release pour un composant migré

  • SLO défini ; tableaux de bord montrent les golden signals.
  • Alerting réglé ; on-call a des runbooks et instructions de rollback.
  • Capacité testée avec une forme de charge proche de la production.
  • Timeouts et retries des dépendances configurés (avec budgets).
  • Idempotence implémentée pour les opérations non sûres.
  • Jobs de réconciliation des données en place ; processus de triage des divergences défini.
  • Contrôles de sécurité validés : parité authz, logs d’audit, rétention.
  • Game day réalisé : défaillance de dépendance, BD lente, déploiement partiel, rollback.

FAQ

1) Quand une réécriture est-elle réellement justifiée ?

Quand le système actuel ne peut pas être évolué en toute sécurité : runtime non supporté avec risque de sécurité inpatchable, contraintes de licence ou architecture qui bloque des exigences métier critiques. Même dans ce cas, préférez un remplacement incrémental derrière des interfaces stables.

2) La migration incrémentale n’est-elle pas plus lente que la réécriture ?

L’incrémental paraît plus lent parce qu’il est honnête sur l’opération de deux réalités. Les grosses réécritures paraissent rapides jusqu’à ce que l’intégration, les données et les opérations se pointent — puis le temps explose. La migration incrémentale gagne en livrant de la valeur tôt et en réduisant le risque existentiel.

3) Nous avons un code de qualité épouvantable. Cela n’exige-t-il pas une réécriture ?

La mauvaise qualité demande des frontières, des tests autour des invariants et une visibilité opérationnelle. Souvent vous pouvez isoler les pires modules et les remplacer derrière une interface. Une réécriture complète remet la qualité du code à « inconnue », ce qui n’est pas automatiquement mieux.

4) Comment éviter « deux systèmes pour toujours » ?

En migrant par tranches qui retirent complètement les responsabilités legacy. Ne construisez pas un système parallèle qui duplique tout avant de livrer. Routez le trafic, basculez une tranche, puis supprimez l’ancienne tranche. La suppression est un jalon.

5) Quel est le plus grand risque caché des réécritures ?

Dérive sémantique : le nouveau système se comporte différemment sous retries, pannes partielles et entrées étranges. Les utilisateurs ne déposent pas de tickets pour la « dérive sémantique ». Ils déposent des tickets pour de l’argent manquant, des données erronées et « votre API est instable ».

6) L’architecture microservices exige-t-elle une réécriture ?

Non. Vous pouvez découper un monolithe en services au fil du temps. La première étape est souvent de créer des frontières modulaires internes et d’extraire un domaine avec une propriété claire et des contrats de données.

7) Comment gérer la migration des données sans downtime ?

Utilisez CDC ou dual-write, puis réconciliez. Basculez les lectures quand la staleness est acceptable ou atténuée, basculez les écritures en dernier avec une idempotence forte. Ayez toujours une route de rollback et un plan pour les backfills.

8) Que doit mesurer la direction pour savoir si la migration est saine ?

Pas les story points. Mesurez l’atteinte des SLO, le taux d’incidents, la fréquence des rollbacks, le temps de détection/temps de récupération et le progrès de migration en surface legacy retirée (endpoints/workflows supprimés).

9) Comment empêcher les ingénieurs de « bouillir l’océan » ?

Définissez une tranche verticale fine qui atteint la production, puis exigez que chaque extension inclue un plan de sortie pour le chemin legacy équivalent. Récompensez la suppression et la stabilité opérationnelle, pas la nouveauté.

Prochaines étapes que vous pouvez livrer ce trimestre

Si vous êtes dans une réunion où quelqu’un propose une réécriture comme panacée, voici ce que vous faites à la place — concrètement, sans drame :

  1. Exécutez le playbook de diagnostic rapide et publiez la classification du goulot. Sortez le débat du registre esthétique.
  2. Rédigez les invariants (idempotence, exactitude, budgets de latence, règles authz). Rendez-les révisables et testables.
  3. Choisissez un workflow et migrez-le en utilisant routage + canary + rollback. Prouvez que vous pouvez déplacer des tranches en sécurité.
  4. Investissez dans la parité opérationnelle : tableaux de bord, tracing, hygiène des alertes, runbooks. Rendez l’exploitation des systèmes plus facile que d’en discuter.
  5. Faites de la réconciliation des données une fonctionnalité produit, pas une quête secondaire. Si vous ne pouvez pas prouver l’exactitude des données, vous n’avez pas d’exactitude.

Le mythe du « réécrire depuis zéro » survit parce qu’il offre une histoire où la complexité disparaît. Dans les systèmes réels, la complexité ne disparaît pas ; elle se déplace. Votre travail est de la déplacer vers des endroits où elle est mesurable, contrôlable et ennuyeuse. L’ennuyeux est sous-estimé. L’ennuyeux expédie.

Panneau de configuration NVIDIA manquant — récupérez-le sans tâtonnements

Vous faites un clic droit sur le bureau pour changer un réglage et… rien. Pas de panneau de configuration NVIDIA. Le GPU est bien présent, les jeux tournent, les ventilateurs s’activent, et pourtant l’interface dont vous avez besoin a disparu comme si elle avait assisté à une réunion inconfortable.

Ce problème fait perdre du temps parce que beaucoup de gens le traitent comme une superstition « réinstallez le pilote ». Ne faites pas ça. Traitez-le comme un incident : confirmez le modèle de pilote, vérifiez les services, validez le package de l’application, puis appliquez la correction la plus petite qui vous rend le contrôle.

Guide de diagnostic rapide (premier/deuxième/troisième)

Quand le panneau de configuration NVIDIA est « manquant », le goulot d’étranglement est généralement l’un des trois éléments suivants : le mauvais type de pilote (DCH vs Standard), un package d’application corrompu (Store/UWP), ou un service NVIDIA Display Container arrêté. Vous pouvez identifier lequel en quelques minutes.

Premier : établissez ce que vous exécutez (matériel, modèle de pilote, session)

  • Êtes-vous sur un ordinateur portable avec graphique hybride ? Si la dalle interne est pilotée par l’iGPU, les options du panneau NVIDIA peuvent être limitées ou déplacées.
  • Êtes-vous sur des pilotes DCH ? Si oui, le panneau de configuration est souvent livré comme un package d’application Microsoft Store ; il peut disparaître indépendamment du pilote.
  • Êtes-vous en RDP/VM ? Les sessions à distance et les machines virtuelles peuvent cacher l’interface ou présenter un adaptateur différent.

Deuxième : vérifiez le service qui héberge l’interface

  • NVDisplay.ContainerLocalSystem est le coupable habituel. S’il est arrêté/désactivé, le panneau peut ne pas apparaître dans le menu contextuel ou ne pas se lancer correctement.

Troisième : vérifiez l’enregistrement de l’application (package Store / exécutable)

  • Si DCH : confirmez que le package NVIDIA Control Panel AppX existe pour votre utilisateur et n’est pas dans un état corrompu.
  • Si Standard : confirmez que nvcplui.exe existe et peut être lancé.

Ce n’est qu’après ces étapes que vous devez sortir la grosse boîte à outils (DDU, réinstallation complète). La plupart du temps, vous pouvez résoudre cela sans détruire votre pile de pilotes.

Faits et contexte intéressants (pourquoi ça revient souvent)

Une partie de ce bordel est historique. Une autre partie vient de la plomberie moderne des applications Windows. Quoi qu’il en soit, vous dépannerez plus vite si vous connaissez la structure du système que vous intervenez.

  1. Les pilotes DCH ont changé les mécanismes de distribution. Avec DCH (Declarative, Componentized, Hardware Support Apps), les fournisseurs peuvent livrer des parties de leur interface comme des applications séparées au lieu d’intégrer tout dans l’installateur du pilote.
  2. Le panneau NVIDIA peut être une application « HSA » distribuée par le Store. Sur de nombreux systèmes, le panneau est un package AppX ; Windows peut le mettre à jour ou le supprimer indépendamment du pilote GPU.
  3. Le menu contextuel par clic droit n’est pas une garantie. Les shells Windows et les gestionnaires de menu contextuel varient selon la stratégie, la build et si l’Explorateur redémarre proprement.
  4. Les images OEM épinglent souvent une branche de pilote spécifique. Les fabricants d’ordinateurs portables personnalisent parfois les fichiers INF et incluent des utilitaires ; passer à un pilote générique peut orpheliner des éléments de l’interface.
  5. NVIDIA fournissait autrefois plus de composants d’interface toujours actifs. Au fil du temps, les fournisseurs ont réduit l’impact au démarrage. C’est bien… jusqu’à ce que le service qui lie l’interface à l’état du pilote soit désactivé.
  6. Microsoft a renforcé la séparation pilote/interface pour la sécurité et la maintenance. L’approche « componentized » améliore la fiabilité des mises à jour en théorie, mais ajoute plus d’éléments susceptibles de tomber en panne en pratique.
  7. Les stratégies peuvent bloquer le Store et AppX. En environnement d’entreprise, les applications Store peuvent être restreintes, provoquant la disparition de l’interface DCH alors que le pilote fonctionne toujours.
  8. Le bureau à distance peut vous tromper. Une session RDP peut présenter un chemin de pilote d’affichage différent ; vous diagnostiquez peut‑être le protocole distant plutôt que la pile GPU.
  9. Les mises à jour Windows remplacent parfois les pilotes. Une mise à jour fonctionnelle peut changer votre package NVIDIA pour une autre branche, laissant le panneau hors synchronisation ou supprimé.

Ce que signifie vraiment « manquant » (modes de panne)

« Panneau de configuration NVIDIA manquant » est un symptôme, pas un diagnostic. En termes d’exploitation, c’est une alerte sans étiquette. Voici les vrais modes de panne que vous rencontrerez sur le terrain :

1) L’application d’interface n’est pas installée (ou installée pour un autre utilisateur)

Fréquent avec les pilotes DCH. Le pilote est présent, nvidia-smi fonctionne, mais le package du panneau n’est pas installé pour votre profil utilisateur actuel, ou il manque totalement.

2) L’application est installée mais cassée (problème d’enregistrement AppX ou dépendance)

Les packages d’application Store peuvent se retrouver dans un état étrange après une migration de profil, des outils de « nettoyage » ou des stratégies d’entreprise. Le package existe mais ne se lance pas, ou il s’ouvre puis se ferme instantanément.

3) Le service hôte est arrêté/désactivé

Le panneau dépend de services et de tâches planifiées. Si NVDisplay.ContainerLocalSystem est arrêté ou désactivé, l’intégration de l’interface disparaît souvent.

4) Vous n’utilisez pas réellement le GPU NVIDIA pour le chemin d’affichage

Sur les portables Optimus/hybrides, l’iGPU peut piloter l’écran tandis que NVIDIA gère le rendu/accélération. Certains réglages se déplacent, disparaissent ou nécessitent que le GPU NVIDIA soit le sortie d’affichage principale.

5) L’installation du pilote est partielle ou corrompue

C’est l’état classique « ça marche à moitié » : le périphérique apparaît, mais des composants clés manquent. Souvent causé par des mises à jour interrompues, des outils de nettoyage supprimant des éléments du magasin de pilotes, ou le mélange de packages OEM et génériques.

6) Mauvaises attentes : menu contextuel Windows 11 et extensions de shell

Même quand tout est installé correctement, le menu contextuel de Windows 11 peut masquer les entrées héritées derrière « Afficher plus d’options », ou des stratégies peuvent retirer des gestionnaires.

Une vérité sèche issue de l’ingénierie de la fiabilité s’applique : « Si vous ne pouvez pas le mesurer, vous ne pouvez pas le réparer. » C’est une idée paraphrasée souvent attribuée à W. Edwards Deming. Donc nous mesurons : services, packages, pilotes et stratégie.

Blague n°1 : Le panneau de configuration NVIDIA ne « disparaît » pas. Il a juste été promu à un poste de middle management où personne ne le trouve.

Tâches pratiques : commandes, sorties, décisions

Voici des tâches réelles que vous pouvez exécuter sous Windows. Chaque élément inclut : une commande, ce qu’une sortie plausible signifie, et la décision suivante. Lancez PowerShell en tant qu’administrateur sauf indication contraire.

Tâche 1 : Confirmer la build et l’édition de Windows (les politiques Store comptent)

cr0x@server:~$ powershell -NoProfile -Command "Get-ComputerInfo | Select-Object WindowsProductName,WindowsVersion,OsBuildNumber"
WindowsProductName WindowsVersion OsBuildNumber
----------------- -------------- -------------
Windows 11 Pro     23H2           22631

Ce que ça signifie : Vous êtes sur Windows 11 Pro 23H2. Le comportement du Store et d’AppX diffère selon les builds ; la politique d’entreprise est courante sur Pro/Enterprise.

Décision : Gardez « DCH + application Store » en haut de la liste des suspects. Si c’est Enterprise, supposez des restrictions du Store jusqu’à preuve du contraire.

Tâche 2 : Vérifier que le GPU NVIDIA est présent et la version du pilote installée

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class Display | Format-Table -AutoSize Status,FriendlyName,InstanceId"
Status FriendlyName                      InstanceId
------ ------------                      ----------
OK     NVIDIA GeForce RTX 3070 Laptop GPU PCI\VEN_10DE&DEV_24DD&SUBSYS_...
OK     Intel(R) Iris(R) Xe Graphics      PCI\VEN_8086&DEV_9A49&SUBSYS_...

Ce que ça signifie : Graphiques hybrides. Si l’écran interne est piloté par l’iGPU, certaines options du panneau NVIDIA peuvent être limitées.

Décision : Ne confondez pas encore « options manquantes » avec « application manquante ». Confirmez d’abord si l’application est absente ou simplement pas exposée dans le shell.

Tâche 3 : Vérifier la date/version du pilote depuis Windows

cr0x@server:~$ powershell -NoProfile -Command "Get-WmiObject Win32_PnPSignedDriver | Where-Object {$_.DeviceClass -eq 'DISPLAY' -and $_.Manufacturer -match 'NVIDIA'} | Select-Object DeviceName,DriverVersion,DriverDate | Format-Table -AutoSize"
DeviceName                         DriverVersion DriverDate
----------                         ------------- ----------
NVIDIA GeForce RTX 3070 Laptop GPU 31.0.15.5176  2024-01-15

Ce que ça signifie : Pilote installé et reconnu par Windows.

Décision : Si le panneau est manquant, il s’agit probablement d’un problème de packaging/service/shell plutôt que d’« absence de pilote ».

Tâche 4 : Confirmer que les services NVIDIA sont présents et en cours

cr0x@server:~$ powershell -NoProfile -Command "Get-Service *NVIDIA* | Sort-Object Status,Name | Format-Table -AutoSize Name,Status,StartType"
Name                         Status  StartType
----                         ------  ---------
NVDisplay.ContainerLocalSystem Stopped Automatic
NVIDIAFrameViewSDKService     Running Manual
NvContainerLocalSystem        Running Automatic

Ce que ça signifie : Le service Display Container est arrêté. C’est un indicateur fort pour l’absence d’intégration du panneau.

Décision : Démarrez-le et retestez le panneau. S’il ne démarre pas, récupérez ensuite les logs.

Tâche 5 : Démarrer le service Display Container (gain rapide)

cr0x@server:~$ powershell -NoProfile -Command "Start-Service NVDisplay.ContainerLocalSystem; Get-Service NVDisplay.ContainerLocalSystem | Format-List Status,StartType"
Status    : Running
StartType : Automatic

Ce que ça signifie : Le service démarre proprement.

Décision : Déconnectez-vous/reconnectez-vous ou redémarrez Explorer ; puis vérifiez le menu contextuel du bureau et le menu Démarrer pour le panneau NVIDIA.

Tâche 6 : S’il ne démarre pas, extraire l’erreur du journal Système

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='System'; StartTime=(Get-Date).AddHours(-2)} | Where-Object {$_.Message -match 'NVDisplay.Container'} | Select-Object -First 3 TimeCreated,Id,LevelDisplayName,Message | Format-List"
TimeCreated      : 2/4/2026 8:12:44 AM
Id               : 7000
LevelDisplayName : Error
Message          : The NVDisplay.ContainerLocalSystem service failed to start due to the following error: The system cannot find the file specified.

Ce que ça signifie : Le service pointe vers un binaire manquant. C’est une installation cassée ou un outil de nettoyage trop zélé.

Décision : Arrêtez d’essayer de « basculer » les services. Passez à la réparation/réinstallation propre du package pilote.

Tâche 7 : Déterminer si le panneau est installé comme package AppX (chemin DCH)

cr0x@server:~$ powershell -NoProfile -Command "Get-AppxPackage -Name *NVIDIACorp.NVIDIAControlPanel* | Select-Object Name,Version,Status,PackageFullName"
Name                             Version      Status PackageFullName
----                             -------      ------ ---------------
NVIDIACorp.NVIDIAControlPanel    8.1.962.0    Ok     NVIDIACorp.NVIDIAControlPanel_8.1.962.0_x64__56jybvy8sckqj

Ce que ça signifie : Le package de l’application est installé et sain.

Décision : S’il est toujours « manquant », vous avez probablement affaire à des problèmes de shell/menu contextuel ou à un problème de chemin de lancement.

Tâche 8 : Si le package AppX manque, confirmer que le Store est bloqué par une stratégie

cr0x@server:~$ powershell -NoProfile -Command "reg query HKLM\SOFTWARE\Policies\Microsoft\WindowsStore /v RemoveWindowsStore"
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsStore
    RemoveWindowsStore    REG_DWORD    0x1

Ce que ça signifie : Le Store est désactivé par stratégie. Sur les systèmes DCH, cela équivaut souvent à « pas de panneau de configuration ».

Décision : Soit (a) obtenez une exception de stratégie pour l’application NVIDIA Control Panel, soit (b) adoptez une stratégie de pilote qui inclut l’interface sans dépendre du Store (souvent OEM ou non‑DCH/Standard lorsque pris en charge).

Tâche 9 : Lancer directement le panneau NVIDIA (fonctionne même quand les menus ne le font pas)

cr0x@server:~$ powershell -NoProfile -Command "Start-Process shell:AppsFolder\\NVIDIACorp.NVIDIAControlPanel_56jybvy8sckqj!NVIDIACorp.NVIDIAControlPanel"

Ce que ça signifie : Si le panneau s’ouvre, l’application est correcte ; votre problème est la découvrabilité (menu contextuel/index de recherche) et non l’installation.

Décision : Corrigez l’intégration du shell (redémarrage d’Explorer, paramètres du menu contextuel, santé des services) plutôt que de tout réinstaller.

Tâche 10 : Redémarrer Explorer pour restaurer les gestionnaires de menu contextuel

cr0x@server:~$ powershell -NoProfile -Command "Stop-Process -Name explorer -Force; Start-Process explorer.exe"

Ce que ça signifie : Explorer redémarre. Cela restaure souvent les entrées du clic droit après une mise à jour d’un service ou d’une application.

Décision : Si le panneau réapparaît, vous avez confirmé un problème de rafraîchissement du shell. Sinon, poursuivez le diagnostic des services et des packages.

Tâche 11 : Vérifier l’exécutable classique sur les pilotes Standard

cr0x@server:~$ powershell -NoProfile -Command "Test-Path 'C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe'; Get-Item 'C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe' -ErrorAction SilentlyContinue | Select-Object FullName,Length,LastWriteTime"
True

FullName                                                       Length LastWriteTime
--------                                                       ------ -------------
C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe  708512 1/15/2024 6:34:10 PM

Ce que ça signifie : L’exécutable existe. Si l’application est « manquante », c’est probablement un problème de raccourci/menu contextuel, pas du binaire.

Décision : Essayez de le lancer ; si ça échoue, inspectez l’état des dépendances/services.

Tâche 12 : Lancer l’exécutable directement (chemin Standard)

cr0x@server:~$ powershell -NoProfile -Command "& 'C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe'"

Ce que ça signifie : S’il s’ouvre, vous pouvez créer un raccourci dans le menu Démarrer et arrêter de perdre l’après‑midi.

Décision : Restaurez la découvrabilité (raccourcis, menu contextuel) plutôt que de réinstaller.

Tâche 13 : Vérifier l’enregistrement du menu contextuel NVIDIA (contrôle de cohérence)

cr0x@server:~$ powershell -NoProfile -Command "reg query 'HKCR\Directory\Background\shellex\ContextMenuHandlers' | findstr /i nvidia"
{0BB76A54-...}
NvCplDesktopContext

Ce que ça signifie : Le gestionnaire existe. Si l’entrée du menu est toujours absente, Windows 11 peut la cacher sous « Afficher plus d’options », ou Explorer a besoin d’un rafraîchissement.

Décision : Testez le menu contextuel classique ; considérez les conflits d’extensions de shell ; redémarrez Explorer.

Tâche 14 : Confirmer que le pilote NVIDIA fonctionne via nvidia-smi

cr0x@server:~$ nvidia-smi
Tue Feb  4 09:10:12 2026
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 551.76       Driver Version: 551.76       CUDA Version: 12.4     |
|-------------------------------+----------------------+----------------------|
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
|  0  RTX 3070 ... Off          | 00000000:01:00.0  On |                  N/A |
+-------------------------------+----------------------+----------------------+

Ce que ça signifie : Le pilote est chargé et fonctionne au moins pour les requêtes de gestion.

Décision : Concentrez-vous sur la livraison de l’interface (AppX/service/shell) plutôt que sur la détection du GPU.

Tâche 15 : Auditer les installations/mises à jour récentes du pilote (qui a changé quoi)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -LogName 'Microsoft-Windows-DriverFrameworks-UserMode/Operational' -MaxEvents 20 | Select-Object TimeCreated,Id,Message | Format-Table -AutoSize"
TimeCreated           Id Message
-----------           -- -------
2/3/2026 6:44:18 PM 2003 Driver package added: oem86.inf
2/3/2026 6:44:21 PM 2004 Driver package installed for device PCI\VEN_10DE...

Ce que ça signifie : Quelque chose a changé récemment, et c’est enregistré. Très bien.

Décision : Si le panneau a disparu juste après cela, supposez un changement de saveur de pilote (DCH/Standard ou OEM/générique) ou une mise à jour partielle.

Tâche 16 : Vérifier les bases de l’intégrité du disque (oui, vraiment)

cr0x@server:~$ powershell -NoProfile -Command "Get-PhysicalDisk | Select-Object FriendlyName,HealthStatus,OperationalStatus | Format-Table -AutoSize"
FriendlyName      HealthStatus OperationalStatus
------------      ------------ -----------------
NVMe Samsung 980  Healthy      OK

Ce que ça signifie : Le stockage ne s’effondre pas à première vue.

Décision : Si le disque était défaillant, les « fichiers manquants » pourraient être littéraux. N’ignorez pas le substrat.

Blague n°2 : « Vous avez essayé de l’éteindre et de le rallumer ? » est drôle jusqu’à ce que ça marche et que maintenant vous devez présenter des excuses à l’univers.

Trois mini-récits d’entreprise depuis le terrain

Mini-récit 1 : L’incident causé par une mauvaise hypothèse

Le contexte : une équipe de design sur des portables Windows 11 utilisant des écrans externes. Du jour au lendemain, plusieurs utilisateurs ont signalé la disparition du panneau NVIDIA et des profils de couleur qui ne se comportaient plus comme leur workflow d’étalonnage l’exigeait. Le support a fait ce que fait le support : réinstaller les pilotes. La moitié des machines alla mieux. L’autre moitié empirait.

La mauvaise hypothèse était simple : « Le panneau fait partie du pilote. » Sur ces portables, le service IT était passé aux pilotes DCH des mois plus tôt pour simplifier le déploiement. L’interface provenait d’un package AppX, et l’accès au Store de l’entreprise était verrouillé plus fort que le processus budgétaire.

Que s’est‑il passé ? Windows Update a livré une mise à jour du pilote. Le pilote s’est installé correctement. Mais l’application NVIDIA Control Panel n’a pas pu être réinstallée ou mise à jour parce que le Store était bloqué et que le pipeline de provisionnement AppX n’était pas configuré pour cette application. Les utilisateurs n’ont pas perdu l’accélération GPU — ils ont perdu l’interface qui contrôlait les réglages dont ils avaient besoin.

La solution n’a pas été de réinstaller le pilote. La solution a été la politique et le packaging : ils ont mis l’application sur liste blanche pour le déploiement et l’ont provisionnée pour tous les utilisateurs sur les machines concernées. Puis ils l’ont documenté sérieusement, avec une vérification qui confirmait l’existence du package AppX.

Après l’incident, l’équipe a cessé de traiter « panneau manquant » comme une défaillance de pilote et a commencé à le considérer comme une défaillance de livraison. Le temps moyen de réparation a chuté, et le support a arrêté de jouer à la roulette avec les réinstallations.

Mini-récit 2 : L’optimisation qui a mal tourné

Un service financier se plaignait que les portables étaient « lents au login ». Quelqu’un a voulu optimiser et a créé une GPO « optimisation au démarrage » : désactiver les services non essentiels, réduire les icônes dans la zone de notification et limiter les tâches en arrière-plan. Ça a marché — les connexions étaient visiblement plus rapides.

Deux semaines plus tard, les équipes d’ingénierie ont commencé à signaler la disparition du panneau NVIDIA et la perte des entrées contextuelles liées au GPU. Certaines machines ont aussi perdu la persistance des réglages d’affichage au redémarrage. Les systèmes avaient toujours les pilotes NVIDIA. nvidia-smi fonctionnait encore. Cela rendait les plaintes plus difficiles à prendre au sérieux jusqu’à ce que quelques personnes perdent des heures à cause d’un mauvais scaling d’écran externe.

La cause racine : la stratégie avait désactivé NVDisplay.ContainerLocalSystem. Quelqu’un a vu « container » et supposé que c’était une chose moderne et optionnelle, probablement cloud. Cette hypothèse mérite sa place dans un musée des mauvaises idées.

Réactiver le service a réparé le problème immédiatement sur les postes affectés. L’« optimisation » a été annulée et remplacée par une liste soignée qui gardait les services fournisseurs critiques activés. La leçon finale, ennuyeuse mais précieuse : l’optimisation Windows n’est pas un buffet gratuit. Si vous ne savez pas ce qu’un service fait, ne le désactivez pas sur des machines de production.

Mini-récit 3 : La pratique ennuyeuse mais correcte qui a sauvé la mise

Un studio VFX utilisait une image de workstation standard pour plusieurs équipes. Leur responsable IT était allergique aux « changements mystérieux », donc ils gardaient une baseline de pilote par modèle matériel, épinglée par ID de périphérique, et validée trimestriellement. Ils avaient aussi un petit script vérifiant : présence du périphérique NVIDIA, Display Container en cours, package Control Panel installé (si applicable), et une méthode de lancement connue fonctionnelle.

Un lundi, après une vague de mises à jour de fonctionnalités Windows, quelques machines ont perdu le panneau NVIDIA. La panique habituelle a commencé. Mais les vérifications de baseline du studio s’exécutaient à la connexion et ont signalé l’échec exact : le package AppX manquait pour les nouveaux profils utilisateur créés après la mise à jour.

Ils n’ont pas réinstallé les pilotes. Ils n’ont pas formaté les machines. Ils ont provisionné l’application pour tous les utilisateurs et l’ont réenregistrée pour les profils affectés. Le problème a disparu avant le déjeuner, et les artistes sont retournés à leurs discussions sur le flou d’objectif plutôt que sur les UI de pilotes.

La « pratique ennuyeuse » consistait simplement à traiter les postes comme une flotte : baselines épinglées, petits contrôles de santé, et chemins de récupération documentés. Ce n’est pas glamour. C’est ce qui maintient les lumières allumées.

Erreurs fréquentes : symptôme → cause racine → correction

Cette section existe pour vous empêcher de faire des choses coûteuses pour des problèmes peu coûteux.

1) Symptom : panneau non présent dans le menu clic droit du bureau (Windows 11)

Cause racine : Windows 11 cache les entrées héritées derrière « Afficher plus d’options », ou Explorer n’a pas rafraîchi après l’installation/la mise à jour.

Correction : Utilisez « Afficher plus d’options », redémarrez Explorer et lancez via AppsFolder. Si le lancement AppsFolder fonctionne, c’est réglé.

2) Symptom : panneau absent de la recherche du menu Démarrer

Cause racine : AppX installé mais index de recherche non mis à jour ; ou installation spécifique au profil utilisateur manquante.

Correction : Lancez directement (AppsFolder ou nvcplui.exe), puis épinglez-le. Si c’est manquant pour un seul utilisateur, réenregistrez l’AppX pour cet utilisateur.

3) Symptom : le panneau s’ouvre puis se ferme instantanément

Cause racine : enregistrement AppX cassé, composants incompatibles après mise à jour du pilote, ou Display Container NVIDIA désactivé.

Correction : Vérifiez que le service Display Container fonctionne. Si oui, réinscrivez/réinstallez le package Control Panel AppX. Si le service ne démarre pas en raison d’un fichier manquant, faites une réinstallation propre du pilote.

4) Symptom : NVIDIA Control Panel est installé, mais les réglages « Affichage » manquent

Cause racine : Graphiques hybrides ; l’iGPU contrôle le pipeline d’affichage (commun sur portables). Le panneau NVIDIA n’affichera pas les réglages d’affichage qu’il ne contrôle pas.

Correction : Utilisez les paramètres d’affichage Windows et les contrôles Intel/AMD de l’iGPU ; ou connectez l’écran à un port câblé au GPU NVIDIA (variable selon modèle) ; ou changez le mode MUX dans le BIOS si pris en charge.

5) Symptom : pilote présent, mais package Control Panel non installé et Store bloqué

Cause racine : La distribution UI DCH dépend du Store/AppX ; la politique d’entreprise bloque le Store.

Correction : Provisionnez l’application via un déploiement AppX approuvé par l’entreprise ou changez de stratégie de pilote de manière contrôlée. Ne demandez pas aux utilisateurs de « simplement utiliser le Store » si c’est interdit.

6) Symptom : la réinstallation des pilotes « règle parfois » le problème

Cause racine : Vous basculez entre packages OEM et génériques, ou entre modèles de pilotes, et parfois l’interface retombe par accident dans un état fonctionnel.

Correction : Choisissez un chemin de package supporté pour ce modèle de machine. Standardisez. Validez avec des vérifications (services + package d’application + test de lancement).

7) Symptom : panneau manquant uniquement via Remote Desktop

Cause racine : La session RDP utilise un chemin de pilote d’affichage ou une politique différente ; l’interface peut ne pas exposer les mêmes options.

Correction : Testez localement/en session console. Si vous devez gérer à distance, utilisez des méthodes hors bande ou assurez-vous que la session utilise l’accélération GPU lorsque c’est approprié.

8) Symptom : panneau disparu après des utilitaires de « debloat » ou de « nettoyage »

Cause racine : Ces outils suppriment des packages AppX, des services ou des tâches planifiées sans comprendre les dépendances.

Correction : Annulez les modifications de l’outil si possible ; restaurez le package/service ; sinon réinstallez proprement. Puis bannissez l’outil des postes de production.

Listes de contrôle / plans étape par étape

Plan A : Le chemin minimal et sensé (corriger sans réinstallation)

  1. Vérifier la présence du GPU (Tâche 2). Si le périphérique NVIDIA n’est pas OK, vous n’êtes pas dans le territoire « panneau manquant » ; vous êtes en territoire pilote/matériel.
  2. Vérifier le service Display Container (Tâche 4). S’il est arrêté, démarrez‑le (Tâche 5). S’il ne démarre pas, récupérez le journal d’événements (Tâche 6).
  3. Vérifier si le panneau est AppX (Tâche 7). S’il est présent, lancez via AppsFolder (Tâche 9). S’il se lance, corrigez la découvrabilité (Tâche 10).
  4. Si l’exécutable Standard existe (Tâche 11), lancez‑le (Tâche 12), puis épinglez‑le au menu Démarrer.
  5. Retestez le symptôme : recherche menu Démarrer, menu clic droit, et lancement direct. Ne déclarez pas victoire tant que vous ne pouvez pas reproduire la correction.

Plan B : Environnement d’entreprise (correction consciente de la politique)

  1. Vérifier la politique Store (Tâche 8). Si le Store est désactivé et que vous êtes en DCH, supposez que l’application UI doit être provisionnée par l’entreprise.
  2. Décider d’un mécanisme de distribution supporté : provisionner le package AppX pour tous les utilisateurs, ou choisir un package OEM supporté qui inclut l’interface et ne dépend pas du Store dans votre environnement.
  3. Valider avec une vérification au moment de la connexion : service en cours, package installé, test de lancement. Traitez cela comme de l’hygiène des endpoints.
  4. Geler une baseline de pilote connue‑bonne par modèle et la modifier de façon délibérée, pas quand Windows Update s’en mêle.

Plan C : Réinstallation propre (quand fichiers/services sont vraiment cassés)

  1. Confirmer que la défaillance du service est due à des binaires manquants (Tâche 6). Si oui, arrêtez d’essayer de « réparer » par des bascules.
  2. Supprimer les packages conflictuels via les chemins de désinstallation standards. Évitez de mélanger installateurs OEM et génériques en plein vol.
  3. Installer un package pilote connu‑bon adapté à votre matériel et environnement (DCH avec provisionnement AppX, ou Standard là où c’est pris en charge).
  4. Vérifier immédiatement : service en cours, lancement du Control Panel, apparition du menu contextuel et persistance des réglages après redémarrage.

Checklist opérationnelle : ce que vous documentez pour la prochaine fois

  • Branche et version du pilote connues‑bonnes pour ce modèle de machine.
  • Si le système utilise DCH et nécessite donc un provisionnement AppX.
  • Services requis (en particulier NVDisplay.ContainerLocalSystem) et leurs types de démarrage.
  • Méthode de lancement connue‑bonne (commande AppsFolder ou chemin nvcplui.exe).
  • Notes sur les limitations des graphiques hybrides (quel port est câblé sur quel GPU, comportement du MUX BIOS).

FAQ

Pourquoi le panneau NVIDIA a disparu après une mise à jour du pilote ?

Parce que le pilote et l’interface peuvent être livrés séparément (surtout avec DCH). Le pilote s’est mis à jour ; l’application UI n’a pas été mise à jour, a été supprimée ou n’a pas pu s’installer à cause d’une politique.

Le panneau NVIDIA est‑il maintenant une application Microsoft Store ?

Sur de nombreuses installations DCH, oui : c’est un package AppX (souvent fourni par NVIDIA Corporation). Cela facilite les mises à jour, et cela rend l’interface plus vulnérable dans des environnements restreints.

Je ne peux pas utiliser Microsoft Store sur mon PC professionnel. Comment récupérer le panneau ?

Confirmez d’abord que le Store est bloqué par stratégie (Tâche 8). Ensuite, vous avez besoin d’une méthode approuvée par l’entreprise pour provisionner le package AppX NVIDIA Control Panel, ou d’un chemin pilote/UI supporté pour votre flotte. « Se connecter avec un compte personnel » n’est pas une solution ; c’est un problème de conformité.

L’application est installée mais pas dans le menu clic droit. Est‑elle cassée ?

Pas forcément. Windows 11 peut cacher l’entrée sous « Afficher plus d’options », et Explorer peut ne pas rafraîchir les extensions de shell après une mise à jour. Redémarrez Explorer (Tâche 10) et essayez de lancer directement (Tâche 9 ou Tâche 12).

Pourquoi les réglages « Affichage » manquent dans le panneau NVIDIA ?

Sur beaucoup de portables, l’iGPU pilote l’écran intégré. NVIDIA peut ne pas contrôler le pipeline d’affichage, donc il n’affichera pas les réglages qu’il ne peut pas appliquer. C’est normal, pas une défaillance.

Quel est le service que je devrais vérifier en premier ?

NVDisplay.ContainerLocalSystem (souvent affiché comme NVIDIA Display Container LS). S’il est arrêté ou désactivé, l’intégration UI a tendance à disparaître.

Puis‑je simplement copier nvcplui.exe depuis une autre machine ?

Vous pouvez, mais vous ne devriez pas. Le panneau est couplé à des composants pilotes et à des enregistrements. Copier des binaires crée un état fragile et non supporté. Réparez avec une installation correcte ou le provisionnement AppX.

GeForce Experience influence‑t‑il l’apparition du panneau ?

GeForce Experience n’est pas strictement nécessaire pour le panneau, mais il peut influencer les chemins d’installation et la sélection des composants. Si vous dépannez, simplifiez la pile : pilote + services requis + package Control Panel.

Pourquoi tout fonctionne localement mais pas en RDP ?

Parce que RDP peut présenter un chemin graphique différent et peut ne pas exposer les mêmes hooks UI. Validez localement d’abord ; traitez le comportement distant comme un cas séparé.

Que faire si nvidia-smi fonctionne mais que le panneau ne fonctionne pas ?

Cela signifie généralement que le pilote est correct et que le problème porte sur la livraison de l’interface (AppX manquant/cassé) ou sur l’intégration service/shell. Commencez par les Tâches 4, 7 et 9.

Conclusion : prochaines étapes durables

Cessez de traiter la disparition du panneau NVIDIA comme une histoire de fantômes. Traitez‑la comme un système à composants : pilote, services, package d’application et intégration shell. Mesurez d’abord, puis changez une chose à la fois.

  1. Exécutez le guide de diagnostic rapide : périphérique présent, Display Container en cours, package/exécutable du panneau existe, lancement direct fonctionnel.
  2. Si le service est arrêté, démarrez‑le et redémarrez Explorer. C’est la correction avec le meilleur ROI.
  3. Si le Store est bloqué et que vous êtes en DCH, escaladez vers un provisionnement AppX approprié ou changez vers un chemin de packaging supporté. Ne combattez pas la politique avec des bricolages.
  4. Si les installations sont corrompues, faites une réinstallation propre — mais seulement après avoir prouvé que c’est nécessaire.
  5. Documentez votre baseline (version du pilote, DCH/Standard, services requis, méthode de lancement) afin que la prochaine fois soit ennuyeuse et rapide.