É possível dizer quando o / dev / kmsg foi validado?

0

Os desenvolvedores do kernel Linux decidiram por padrão ratelimitit messages to / dev / kmsg. Isso ocorreu porque eles não gostaram da quantidade de mensagens escritas pelo systemd, particularmente quando debug é passado na linha de comando do kernel.

O systemd excede esse limite mesmo sem habilitar mensagens de depuração.

[    5.879211] systemd: 18 output lines suppressed due to ratelimiting

Esta é a única mensagem desse tipo no meu log do kernel ( dmesg ) no momento. Então, acho que isso significa que apenas 18 linhas sucessivas foram perdidas, terminando em torno de t = 5.879211. De certa forma, isso seria uma perda bastante limitada. Eu provavelmente não precisaria me preocupar com isso, a menos que eu notei que algumas das primeiras unidades de inicialização (pre-journald) estavam falhando.

Então, isso é certo? Existe alguma circunstância em que essa análise possa me enganar?

    
por sourcejedi 28.01.2018 / 01:34

1 resposta

0

Na verdade, essa ideia está muito errada. Em primeiro lugar, esta mensagem não representa necessariamente um único bloco de 18 mensagens systemd sucessivas que foram perdidas. Em segundo lugar, você não pode dizer quando o / dev / kmsg foi validado se o processo ainda está aberto para gravação. Você só recebe uma mensagem quando o processo fecha / dev / kmsg. A mensagem mostra uma contagem de todas as linhas suprimidas desse gravador.

Cada gravador individual (descritor de arquivo) para /dev/kmsg obtém sua própria estrutura ratelimit. E como parte da inicialização ...

ratelimit_set_flags(&user->rs, RATELIMIT_MSG_ON_RELEASE);

a ratelimit está configurada para fazer logon apenas na versão. Ou seja, quando o descritor de arquivo está fechado. Para um processo de longa duração, isso pode ser menos do que útil ... e o sistema init, ou seja, o systemd definitivamente conta como um processo de longa execução.

O motivo pelo qual você vê esta mensagem de log, é que systemd do initrd fecha / dev / kmsg antes que exec() s systemd do sistema de arquivos raiz do sistema.

Assim, as mensagens perdidas durante o initrd não são necessariamente perdidas como um bloco. Poderia haver vários blocos diferentes de mensagens perdidas, portanto, o registro não seria tão simples de analisar quanto eu pensava.

Além disso, qualquer número de mensagens poderia ter sido perdido mais tarde, do tempo entre exec() ing systemd do sistema de arquivos raiz, até o ponto em que o systemd para completamente o / dev / kmsg e alterna para journald . E de fato eles são, o que podemos ver durante o desligamento (usando um console que permanece ligado, como um console serial). Quando systemd exec() s systemd-shutdown, / dev / kmsg é automaticamente fechado, e nós vemos

[  OK  ] Reached target Final Step.
         Starting Reboot...
[   76.318839] systemd-shutdow: 32 output lines suppressed due to ratelimiting
...

Tudo isso está em contraste com certas mensagens limitadas do kernel, por exemplo. %código%. Neste caso, o RATELIMIT_MSG_ON_RELEASE não é usado.

    
por 28.01.2018 / 01:34