Como as tarefas "se recusam a congelar" na suspensão?

17

Ontem, ao fechar meu laptop, ele não entrou no modo de espera imediatamente. De acordo com os logs, estava tentando, mas uma tarefa se recusou a congelar:

Freezing of tasks failed after 20.005 seconds (1 tasks refusing to freeze, wq_busy=0):

Isso continuou por algumas horas até o sistema realmente ser suspenso. O syslogestava cheio de mensagens como nesta pergunta , porque systemdestava tentando repetidamente.

Como isso pode acontecer? Por que o agendador não pode parar de agendar esse aplicativo? e então está efetivamente congelado? Eu li que existem vários STOPcomandos, um deles pedindo gentilmente e um deles forçando o congelamento. Por que systemdnão usou isso ou por que não funcionou aqui?

piegames
fonte

Respostas:

25

O congelamento de tarefas está documentado em detalhes na documentação do kernel .

Os processos de espaço do usuário não podem se recusar a congelar; eles ficam congelados, mas a sinalização entre o kernel e os processos é tratada automaticamente pelo código de manipulação de sinais (o congelamento usa um sinal falso).

Se você estiver vendo mensagens de "tarefas que se recusam a congelar", isso significa que um thread do kernel está se recusando a congelar, geralmente porque está fazendo algo que não pode ser verificado. No entanto, ter que esperar várias horas para a suspensão do kernel não é normal; os rastreamentos de pilha nas mensagens de log ajudariam a ter uma idéia do que está acontecendo de errado.

Stephen Kitt
fonte