Como depurar a hibernação lenta

Como depurar a hibernação lenta

Eu tenho vários PCs/laptops executando um Ubuntu 20.04 atualizado com atualmente um kernel 5.4.0-74-genérico de 64 bits, conforme fornecido pelos repositórios padrão do Ubuntu. Um deles, um PC bastante comum com CPU Intel i3, leva um pouco mais de 2 minutos para hibernar desde que atualizei de 18.04 para 20.04.

Vários recursos que encontrei sobre a depuração da hibernação cobrem principalmente a ativação ou a falha completa na suspensão, mas não uma suspensão no disco que leva muito tempo. O despertar funciona bem e leva apenas alguns segundos. Como posso descobrir por que demora tanto para hibernar? Existe algo como systemd-analyze blamehibernação?

Até agora adicionei initcall_debug no_console_suspende ele GRUB_CMDLINE_LINUX_DEFAULTmostra /etc/default/grubo console, porém, nada é mostrado que explique o longo tempo. Ele mostra "Detected Hardware Unit Hang" para a interface de rede. Mas isso aparece logo no início da hibernação e acho que é um comportamento esperado.

Eu uso systemctl hibernatepara iniciá-lo. Demora 2 minutos até desligar, mesmo quando executado como root no console sem outros usuários logados ou processos de usuário.

Responder1

Meu conselho:

  1. Decidirfaça uma pergunta em askubuntu.come leve isso a sério ;)Colete dados, reproduza problemas com configurações mínimas e seja específico.

  2. Certifique-se de que haja espaço de troca suficiente.O comando freefornece a quantidade de RAM ("Mem") e Swap. O total de swap deve ser maior que o total de RAM. Percebi que havia adicionado RAM em algum momento, mas não aumentei o tamanho da minha partição swap.Editar (07/06/2021):A diferença de tamanho foi de aproximadamente 1 GB. Depois de aumentar o tamanho, a hibernação ficou repetidamente mais rápida, mas ainda acho que isso foi um artefato causado por uma mudança na velocidade de gravação do SSD que contém a partição swap. (Veja também o próximo ponto.)

  3. Quão rápida deve ser a hibernação?Essencialmente, durante a suspensão no disco, toda a RAM é gravada no disco. A quantidade de RAM e a velocidade de gravação do disco determinam o tempo necessário. Procurei minha partição swap e verifiquei quanto tempo leva para zerá-la usando dd if=/dev/zero. ddrelatou uma velocidade de 108 MB/s. Escrever 7 GB levou cerca de 65s. Meu PC tem 8 GB. Portanto, devo esperar que a hibernação demore pelo menos um minuto.

  4. Tentedepurar removendo peçasdo sistema: Desconecte o hardware que não é necessário. Hiberne logo após uma nova inicialização, com ou sem login primeiro.

  5. Adicionarinitcall_debug no_console_suspendpara a linha de comando do kernel conforme descrito na pergunta.

Por enquanto, acho que os motivos para minha hibernação lenta são: adicionei RAM (então a hibernação demora mais), esqueci de aumentar o espaço de troca para corresponder à RAM adicionada (eu tinha 7G de troca, mas 8G de RAM) e a velocidade de gravação de o SSD degradou-se com o tempo (pelo menos por um fator de 2).

Leitura adicional e recomendada:

informação relacionada