1 pontos por GN⁺ 2025-02-18 | 1 comentários | Compartilhar no WhatsApp
  • Ocorrência do problema: Em um desktop com dual boot de Windows e Linux, ocorria uma falha no sistema ao entrar em modo de suspensão no Linux quando havia uso intenso de RAM. Ao reativar o sistema, aparecia uma tela preta ou ele ficava sem resposta. Esse problema era causado por um bug de gerenciamento de energia/memória no driver amdgpu.

  • Diagnóstico do problema: O sistema, com placa-mãe Gigabyte B550M DS3H e GPU AMD RX 570, estava rodando Arch Linux. Após os travamentos, os logs foram verificados com journalctl, e foi identificado um erro de falta de memória (OOM) em amdgpu_device_suspend. O driver NVMe falhava ao inicializar durante a retomada do sistema, fazendo com que ele travasse e impedindo o registro dos logs.

  • Tentativas de solução: Foram alteradas configurações do systemd para testar vários modos de suspensão e tentou-se simplificar o problema desativando a suspensão assíncrona, mas a causa raiz não foi resolvida. Também foi confirmado que o travamento ocorria durante o processo de remoção do buffer TTM do amdgpu.

  • Causa do problema: Quando o sistema entra no modo de suspensão S3, a alimentação da GPU PCIe é cortada e os dados da VRAM são perdidos. Para evitar isso, o driver da GPU precisa fazer backup da VRAM para a RAM do sistema, mas o driver amdgpu no Linux acabava derrubando o sistema por falta de memória quando não havia RAM suficiente.

  • Solução: Mario Limonciello escreveu um patch para o kernel que faz backup da VRAM antes que o armazenamento baseado em disco seja suspenso. O patch altera o backup da VRAM da etapa dpm_suspend() para a etapa dpm_prepare(), permitindo interromper a suspensão caso falte memória.

  • Resolução de problemas adicional: O usuário escreveu um script para fazer backup da VRAM a partir do espaço do usuário, movendo a VRAM para a RAM do sistema antes da suspensão. No entanto, quando vários apps 3D estavam em execução, a VRAM podia continuar sendo movida para a GPU, o que ainda podia causar travamentos.

  • Solução final: A mudança final foi usar a API de notificação de gerenciamento de energia para fazer backup da VRAM na etapa PM_SUSPEND_PREPARE. Com isso, foi possível mover a VRAM para a RAM do sistema antes de o swap ser desativado, resolvendo o problema.

  • Conclusão: O problema foi resolvido graças ao esforço de várias pessoas e a diversas tentativas, e a correção deve ser incluída no Linux kernel 6.14.

1 comentários

 
GN⁺ 2025-02-18
Comentários do Hacker News
  • Há dúvidas sobre a suposição de que, quando o desktop entra no modo de suspensão S3, o sistema corta a energia da GPU PCIe

    • O S3 deveria cortar a energia de tudo, exceto da RAM, mas placas-mãe Gigabyte Aorus têm um problema com um bug de suspensão de SSD NVMe que impede suspender ou despertar corretamente
    • Para corrigir isso, é necessário adicionar uma regra do udev
    • Também há uma forma de impedir despertares em portas PCIe específicas
    • Existe um método para encontrar dispositivos PCIe problemáticos que causam o despertar
    • É possível usar o comando udevadm para obter informações do dispositivo
    • Também dá para resolver o problema com um script de shell
  • O autor do memreserver compartilha a experiência de ter feito debugging para resolver problemas de suspensão no Linux

    • Aponta o problema de o Linux não conseguir executar hooks de interrupção confiáveis antes que os subsistemas de disco e memória congelem
    • É difícil encontrar informações relacionadas no Gitlab do Freedesktop
  • Explica por que implementar a função de suspensão no Linux é difícil e como o debugging também é complicado

    • Está enfrentando um problema no ThinkPad P1G4 em que a ventoinha não desliga automaticamente
    • Também teve o problema de o som ficar distorcido em fones Bluetooth após a suspensão
  • Um usuário de ThinkPad baseado em Ryzen relata problemas de suspensão no Linux e está esperando pela versão 6.14

  • Compartilha a opinião de que percebeu que o problema de "suspender/despertar" é um problema NP-completo

  • Sugere que isso será útil para usuários de notebooks Framework AMD com expansão de GPU e dual boot Linux/Windows

    • Diz que gostaria de fazer uma doação
  • Um usuário que está enfrentando um problema em que o PC praticamente trava após a suspensão em uma GPU AMD está tentando resolver a situação

    • O problema surgiu depois de trocar uma RX 5700 XT por uma RX 7900 XTX
    • Espera que a versão 6.14 possa corrigir o problema
  • Compartilha a opinião de que sempre teve problemas de suspensão ao usar Linux

    • Mesmo usando hardware Intel, AMD, ATI e NVIDIA, muitas vezes a suspensão ou hibernação não funciona corretamente
  • Compartilha a experiência de ter feito debugging de problemas de suspensão em hardware IoT

    • No Linux, a hibernação do sistema é mais confiável do que a suspensão
    • Se o SSD for rápido, é melhor usar a hibernação do sistema
  • Explica que o gerenciamento de memória e as condições de OOM ainda são problemas difíceis no Linux

    • Adicionar mais RAM para resolver problemas de OOM é ineficiente
    • Compartilha a opinião de que o recurso de shell de debug do systemd é útil
    • Há palestras úteis sobre subsistemas do kernel Linux disponíveis online