1 points par GN⁺ 2025-02-18 | 1 commentaires | Partager sur WhatsApp
  • Survenue du problème : sur un PC de bureau en double démarrage Windows/Linux, un plantage se produisait lors du passage en veille sous Linux quand une grande quantité de RAM était utilisée. Au réveil, le système affichait un écran noir ou ne répondait plus. Le problème était dû à un bug de gestion de l’alimentation/de la mémoire dans le pilote amdgpu.

  • Diagnostic : le système utilisait une carte mère Gigabyte B550M DS3H et un GPU AMD RX 570, sous Arch Linux. Après les plantages, les journaux ont été examinés via journalctl, ce qui a révélé une erreur de mémoire insuffisante (OOM) dans amdgpu_device_suspend. Le pilote NVMe échouait aussi à se réinitialiser lors de la reprise, ce qui figeait le système et empêchait l’écriture des journaux.

  • Tentatives de résolution : des modifications de configuration systemd ont été essayées pour tester plusieurs modes de veille, et la veille asynchrone a été désactivée afin de simplifier le problème, mais sans corriger la cause racine. Il a été confirmé que le plantage se produisait pendant le processus d’éviction des tampons TTM d’amdgpu.

  • Cause du problème : quand le système entrait en veille S3, l’alimentation du GPU PCIe était coupée, ce qui entraînait la perte des données en VRAM. Pour l’éviter, le pilote GPU devait sauvegarder la VRAM dans la RAM système, mais le pilote amdgpu de Linux pouvait faire planter le système par manque de mémoire si la RAM disponible était insuffisante.

  • Solution : Mario Limonciello a écrit un patch du noyau pour sauvegarder la VRAM avant l’arrêt du stockage sur disque. Ce patch déplace la sauvegarde de la VRAM de l’étape dpm_suspend() vers l’étape dpm_prepare(), ce qui permet d’interrompre la mise en veille en cas de manque de mémoire.

  • Résolution de problèmes supplémentaire : l’utilisateur a écrit un script pour sauvegarder la VRAM depuis l’espace utilisateur, en déplaçant la VRAM vers la RAM système avant la mise en veille. Cependant, lorsque plusieurs applications 3D étaient en cours d’exécution, la VRAM pouvait continuer à être transférée vers le GPU, provoquant encore des plantages.

  • Résolution finale : le comportement a été modifié pour sauvegarder la VRAM à l’étape PM_SUSPEND_PREPARE via l’API de notification de gestion de l’alimentation. Cela a permis de déplacer la VRAM vers la RAM système avant la désactivation du swap, ce qui a résolu le problème.

  • Conclusion : ce problème a été résolu grâce aux efforts de plusieurs personnes et à diverses tentatives, et le correctif devrait être inclus dans le noyau Linux 6.14.

1 commentaires

 
GN⁺ 2025-02-18
Commentaires sur Hacker News
  • Certains remettent en question l’hypothèse selon laquelle, quand un desktop entre en veille S3, le système coupe l’alimentation du GPU PCIe

    • S3 est censé couper l’alimentation de tout sauf de la RAM, mais les cartes mères Gigabyte Aorus ont un problème de veille/réveil lié à un bug de mise en veille des SSD NVMe
    • Il faut ajouter une règle udev pour corriger cela
    • Il existe aussi un moyen d’empêcher le réveil depuis certains ports PCIe
    • Il y a une méthode pour identifier les périphériques PCIe responsables des réveils problématiques
    • La commande udevadm permet d’obtenir des informations sur les périphériques
    • Un script shell peut également servir à résoudre le problème
  • L’auteur de memreserver partage son expérience de débogage pour résoudre des problèmes de veille sous Linux

    • Il souligne que Linux ne parvenait pas à exécuter des hooks d’interruption fiables avant que les sous-systèmes disque et mémoire ne se figent
    • Il est difficile de trouver les informations pertinentes sur GitLab de Freedesktop
  • Certains expliquent pourquoi l’implémentation de la veille sous Linux est difficile, ainsi que la complexité du débogage

    • Sur un ThinkPad P1G4, ils rencontrent un problème où le ventilateur ne s’arrête pas automatiquement
    • Ils ont aussi constaté un son corrompu sur des écouteurs Bluetooth après la veille
  • Un utilisateur de ThinkPad basé sur Ryzen indique rencontrer des problèmes de veille sous Linux et attend beaucoup de la version 6.14

  • Un commentaire dit avoir réalisé que les problèmes de « veille/réveil » sont un problème NP-complet

  • Certains estiment que cela aidera les utilisateurs de portables Framework AMD avec extension GPU et dual boot Linux/Windows

    • L’un d’eux dit vouloir faire un don
  • Un utilisateur dont le PC devient presque inutilisable après la veille avec un GPU AMD cherche activement une solution

    • Le problème est apparu après être passé d’une RX 5700 XT à une RX 7900 XTX
    • Il espère que la version 6.14 pourra régler le souci
  • Plusieurs personnes disent avoir toujours eu des problèmes de veille sous Linux

    • Même avec du matériel Intel, AMD, ATI ou NVIDIA, la veille ou l’hibernation ne fonctionnent souvent pas correctement
  • Un intervenant partage son expérience de débogage de problèmes de veille sur du matériel IoT

    • Sous Linux, l’hibernation du système est plus fiable que la veille
    • Si le SSD est rapide, il recommande d’utiliser l’hibernation du système
  • Certains expliquent que la gestion mémoire et les conditions d’OOM restent des problèmes difficiles sous Linux

    • Ajouter de la RAM pour résoudre les problèmes d’OOM est inefficace
    • La fonctionnalité de shell de débogage de systemd est jugée utile
    • Des conférences utiles sur les sous-systèmes du noyau Linux sont disponibles en ligne