Aller au contenu

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 :

# /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="... pcie_aspm=off"
sudo update-grub && sudo reboot

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.

# Déploiement manuel
ansible-playbook -i inventory/hosts ansible/playbooks/install-ollama.yml

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