Incident Report — GPU Crash PCIe Xid 79¶
Date : 2026-02-18 09:45:22 CET Sévérité : Haute (reboot serveur requis) Durée d'indisponibilité : ~50 min (09:45 → 10:35 boot terminé) Rédigé le : 2026-02-18
1. Résumé exécutif¶
GPU1 (RTX 5090, PCI:f1:00) a décroché du bus PCIe à 09:45:22, suivi immédiatement par GPU0 (PCI:d1:00) en raison du mécanisme de containment PCIe (DPC). Le driver NVIDIA a émis un Xid 79 (GPU fallen off bus) et un Xid 154 (Node Reboot Required) pour les deux GPU, rendant le reboot obligatoire.
Le serveur hébergeait : - ComfyUI utilisant GPU0 (RTX 5090, D1) en charge continue - Ollama llama3.3:70b utilisant GPU1 (RTX 5090, F1) pour l'expérience PD-EXP-01
2. Infrastructure¶
| Composant | Détail |
|---|---|
| Carte mère | ASUS Pro WS WRX90E-SAGE SE (Rev 1.xx) |
| CPU | AMD Ryzen Threadripper PRO 9955WX (16-core, 32-thread) |
| GPU0 | NVIDIA RTX 5090 — PCI:d1:00 — UUID: GPU-1d18b580-e16c-050e-0128-178f44799cac |
| GPU1 | NVIDIA RTX 5090 — PCI:f1:00 — UUID: GPU-9236c177-2b0a-f4f7-8147-15aaa708509b |
| RAM | 8 × DDR5 (47–52°C au moment du crash) |
| Driver NVIDIA | En service (module nvidia chargé) |
3. Chronologie des événements¶
3.1 Événements IPMI SEL (nuit précédente)¶
18/02/2026 04:45:47 Temperature CPU Package Temp: 93°C → Upper Non-critical ASSERTED
(seuil configured à 93°C — thermique CPU en limite absolue)
18/02/2026 04:48:26 Temperature CPU Package Temp: 91°C → Upper Non-critical DEASSERTED
(retour sous seuil après ~3 min)
Point notable : la charge CPU intensive (Ollama + ComfyUI simultanés) a poussé le CPU package à 93°C pendant la nuit, probablement avec throttling CPU.
3.2 Fans CPU — Oscillation récurrente¶
CPU_FAN oscillait entre 360 RPM (critical low) et 600 RPM toute la journée :
10:56, 10:22, 21:37–21:41, puis 18/02 12:30–12:58
Seuil Lower Critical : 360 RPM
Seuil Lower Non-critical : 360 RPM (identiques → beaucoup de transitions)
Le ventilateur CPU tourne à la limite du seuil critique, causant des alertes IPMI en boucle.
3.3 Crash principal — 09:45:22¶
09:45:22 NVRM: nvAssert: GPPut < WATCHDOG_GPFIFO_ENTRIES @ kernel_rc_watchdog.c:1481
GPU1 → saturation du command FIFO (watchdog timeout)
09:45:22 pcieport 0000:f0:01.1: DPC: containment event, status:0x1f01
"unmasked uncorrectable error detected"
PCIe root port f0:01.1 isole le bus (Downstream Port Containment)
09:45:22 NVRM: Xid (f1:00): 79 — GPU has fallen off the bus
GPU1 déconnecté physiquement du bus PCIe
09:45:22 NVRM: Xid (f1:00): 154 — Node Reboot Required
09:45:22 NVRM: Xid (d1:00): 154 — Node Reboot Required
Les deux GPU sont déclarés non-récupérables → reboot obligatoire
09:45:22 NVRM: prbEncStartAlloc: Can't allocate memory for protocol buffers
Dump mémoire impossible (GPU déjà perdu)
09:45:22 A GPU crash dump has been created. Run nvidia-bug-report.sh as root.
10:34:29 Reboot initié (user/systemd)
10:36:05 Shutdown complet
~10:36 Boot démarré
4. Analyse des causes¶
4.1 Cause directe — PCIe Xid 79 + DPC Event¶
| Composant | Observation |
|---|---|
| Xid 79 | GPU fallen off the bus — perte de connexion PCIe physique sous charge |
| DPC status 0x1f01 | "Unmasked uncorrectable error" sur le root port f0:01.1 (GPU1) |
| GPFIFO watchdog | GPU1 ne traitait plus les commandes avant le crash (FIFO saturé) |
4.2 Cause structurelle — PCIe x8 sur GPU0 (permanent depuis le boot)¶
Trouvé via lspci -vv et dmesg :
GPU0 (D1) : LnkCap: Speed 32GT/s, Width x16
LnkSta: Speed 2.5GT/s (downgraded), Width x8 (downgraded) ← PROBLÈME
dmesg: pci 0000:d1:00.0: 252 Gb/s available, limited by 32GT/s PCIe x8 link
at 0000:d0:01.1 (capable of 504 Gb/s with x16 link)
GPU1 (F1) : LnkCap: Speed 32GT/s, Width x16
LnkSta: Speed 2.5GT/s (downgraded), Width x16 ← OK (downgrade = idle normal)
GPU0 tourne en x8 depuis le premier boot. Le root port d0:01.1 fournit physiquement x8 lanes au lieu de x16. Ce n'est pas un effet du crash — c'est une configuration matérielle préexistante.
Sur la carte mère ASUS Pro WS WRX90E-SAGE SE (WRX90), ce comportement indique : - Bifurcation PCIe BIOS en mode x8/x8 sur le domaine D0 (CPU complexe Nord) - Ou : slot D1 électriquement câblé en x8 (impossible à corriger sans changer de slot)
4.3 Cause thermique (secondaire)¶
L'événement CPU à 93°C à 04:45 indique que le système a tourné sous charge maximale toute la nuit. Le CPU fan oscillant à ~360 RPM (seuil critique) suggère un refroidissement CPU insuffisant pour une charge Threadripper PRO 9955WX sous pleine charge.
4.4 Alimentation — Données partiellement indisponibles¶
PSU1 Detect | Failure detected (IPMI)
PSU2 Detect | Failure detected (IPMI)
Last Power Event: ac-failed (IPMI Chassis)
Interprétation : Le BMC ASUS signale "Failure detected" car les PSUs installés ne sont pas des modèles avec interface IPMI (pas de retour de données), ce qui est courant sur les PSUs haute puissance consumer/prosumer. La ligne ac-failed est l'événement d'une coupure secteur passée (inconnue).
La puissance totale maximale du système (2× RTX 5090 à 600W + CPU Threadripper 350W TDP + reste) dépasse 1550W — à vérifier par rapport à la capacité PSU installée.
5. État post-reboot¶
GPU0 (D1:00): 35°C | 26W | Gen1 x8 (idle) — TOUJOURS en x8 (structurel)
GPU1 (F1:00): 38°C | 20W | Gen1 x16 (idle) — OK
CPU Package: 42°C (normal)
DIMM: 41–52°C (normal)
Les GPU fonctionnent normalement au repos. La limitation x8 de GPU0 est persistante.
6. Risques résiduels¶
| Risque | Probabilité | Impact |
|---|---|---|
| Re-crash GPU1 sous charge combinée | Élevée si même scénario | Reboot serveur |
| GPU0 en x8 permanent | Confirmé | -50% bande passante GPU0 |
| CPU throttling sous charge double | Élevée (93°C atteint) | Dégradation perf |
| Incertitude PSU capacité | Inconnue | Potentiel instabilité |
7. Recommandations¶
7.1 Immédiat — Ne pas reproduire le scénario à risque¶
INTERDIT de lancer simultanément ComfyUI (GPU0) + Ollama charge complète (GPU1) jusqu'à résolution des points ci-dessous.
7.2 PCIe Bifurcation BIOS (Priorité haute)¶
Vérifier et corriger dans le BIOS ASUS Pro WS WRX90E-SAGE SE :
BIOS → Advanced → PCIe Configuration → PCIe Bifurcation
Domaine CPU D0 (slots D1) : passer de x8x8 → x16
ou vérifier : "Slot D1 PCIe Speed" → s'assurer que Gen5 x16 est forcé
BIOS → Advanced → PCIe → PCIE_AER → Disabled
(désactiver l'AER correctif automatique qui déclenche le DPC)
Si le slot est physiquement câblé en x8, déplacer GPU0 dans un slot x16 natif.
7.3 Isolation de charge GPU¶
Configurer Ollama pour utiliser GPU0 exclusivement (le moins critique, déjà en x8) et ComfyUI sur GPU1 (x16), ou les alterner :
# Ollama sur GPU0 uniquement
CUDA_VISIBLE_DEVICES=0 ollama serve
# ComfyUI sur GPU1 uniquement
python main.py --cuda-device 1
7.4 CPU Cooling¶
Le Threadripper PRO 9955WX (280W TDP) a atteint 93°C sous charge : - Vérifier la pâte thermique et la pression du waterblock - Le ventilateur CPU oscille à 360 RPM → vérifier si la pompe watercooling fonctionne correctement (W_PUMP+ = 3840 RPM OK, mais CHA fans tous Disabled) - Augmenter le seuil fan BIOS CPU_FAN minimum à 600+ RPM
7.5 PCIe ASPM (Medium)¶
Désactiver le PCIe power management pour éviter les transitions d'état sous charge :
7.6 Monitoring proactif¶
Installer nvidia-ml-py + script de monitoring PCIe link width :
# Alerter si PCIe link passe en mode downgraded sous charge
watch -n5 'nvidia-smi --query-gpu=index,pcie.link.gen.current,pcie.link.width.current --format=csv,noheader'
Configurer Netdata pour alerter sur : - CPU Package > 85°C - GPU PCIe link error count - Xid errors NVIDIA (via /var/log/syslog monitoring)
8. Actions suivantes¶
| # | Action | Priorité | Responsable |
|---|---|---|---|
| 1 | Vérifier BIOS PCIe bifurcation slot D1 | Haute | Admin |
| 2 | Isoler charges GPU (Ollama GPU0, ComfyUI GPU1) | Haute | Admin |
| 3 | Inspecter cooling CPU (pâte thermique, waterblock) | Haute | Admin |
| 4 | Désactiver PCIE_ASPM dans GRUB | Moyenne | Admin |
| 5 | Configurer alertes Netdata (CPU temp + Xid NVIDIA) | Moyenne | Admin |
| 6 | Identifier modèle + capacité PSU installé | Moyenne | Admin |
| 7 | Envisager nvidia-persistenced service | Basse | Admin |
9. Fix appliqué — Anti-CPU Fallback (2026-02-18 15:20)¶
Suite à l'incident où Ollama a basculé en mode CPU (causant 90°C CPU et 1519% utilisation), la configuration Ansible a été mise à jour pour empêcher le fallback CPU silencieux.
9.1 Fichier modifié¶
ansible/playbooks/install-ollama.yml
9.2 Changements appliqués¶
1. Variables d'environnement Ollama :
[Service]
Environment="CUDA_VISIBLE_DEVICES=0,1"
Environment="OLLAMA_NUM_GPU=999"
Environment="OLLAMA_GPU_REQUIRED=true"
2. Script de health check GPU (/usr/local/bin/ollama-gpu-check) :
- Vérifie que le nombre minimum de GPUs est disponible
- Vérifie que nvidia-smi fonctionne
- Vérifie la mémoire GPU disponible
- Loggue dans
/var/log/ollama-gpu-check.log
3. Service systemd ollama-gpu-check.service :
- S'exécute AVANT
ollama.service - Bloque le démarrage d'Ollama si les GPUs ne sont pas OK
- Empêche le fallback CPU silencieux
9.3 Déploiement¶
Le fix sera déployé au prochain ansible-playbook install-ollama.yml ou via le pipeline CI/CD.
9.4 Comportement attendu après fix¶
| Situation | Avant (fallback silencieux) | Après (GPU enforced) |
|---|---|---|
| GPU0+1 OK | GPU utilisé | GPU utilisé |
| GPU1 crash, GPU0 OK | CPU fallback (90°C) | GPU0 seul utilisé |
| GPU0+1 crash | CPU fallback (90°C) | Ollama refuse de démarrer |
10. Références¶
- NVIDIA Xid Errors documentation: Xid 79 — GPU lost from bus
- NVIDIA Xid 154: Node reboot required after PCIe error
- ASUS Pro WS WRX90E-SAGE SE manual: PCIe bifurcation settings (chap. 3.6)
- Kernel PCIe DPC:
Documentation/PCI/dpc.rst - Logs sources :
sudo journalctl -b -1 -k,sudo ipmitool sel elist