Eu tenho um sistema Debian Buster que tem o Kernel compilado sem o CONFIG_RTC_SYSTOHC
, pois NÃO quero que o modo kernel de 11 minutos esteja ativado. No entanto, eu queria verificar se essa mudança realmente funcionou.
Então eu verifiquei o status
campo da saída do adjtimex --print
comando. O status
campo é 24577
ou 0b110000000000001
.
De acordo com a página man aqui - https://linux.die.net/man/8/adjtimex , parece que o 64
bit do status
campo é not set
, que de acordo com aqui: https://access.redhat.com/solutions/ 55432 significa que o 11-minute mode
está ligado.
Isso é contraditório com o que eu esperava quando compilei o kernel com o CONFIG_RTC_SYSTOHC
as not set
. Como posso verificar com segurança se o modo de 11 minutos está realmente desligado ou estou interpretando a saída adjtimex
incorretamente?
(Apenas para esclarecer uma possível confusão de quem estiver lendo esta resposta: quando o Linux está em execução, existem (geralmente) dois relógios: o relógio "principal" é o relógio do sistema, que geralmente é baseado na CPU. O outro relógio é o relógio de hardware persistente (RTC). Quando o sistema é desligado, o relógio do sistema perde a hora e apenas o relógio de hardware persistente mantém a hora correta do relógio de parede.)
O significado primário do
64
bit dostatus
campo deadjtimex
é "o relógio do sistema está/não está sendo sincronizado por NTP ou outra fonte de tempo". O modo de 11 minutos costumava ser fortemente acoplado a isso: se o relógio do sistema estivesse sendo sincronizado, o RTC seria atualizado a cada 11 minutos; se não, então não seria.A opção de desabilitar a transferência de relógio para RTC do sistema a cada 11 minutos
CONFIG_RTC_SYSTOHC
foi uma adição posterior.A desativação
CONFIG_RTC_SYSTOHC
corta a conexão entre a sincronização do relógio do sistema e as atualizações RTC de 11 minutos. Você pode verificar o código fonte do kernel relevante, que no kernel padrão 4.19.xx do Debian Buster é a funçãosync_rtc_clock()
em kernel/time/ntp.c na linha #532 . Você pode ver que quandoCONFIG_RTC_SYSTOHC
não está definido, a função retorna mais cedo sem fazer nada:Em outras palavras, desabilitar
CONFIG_RTC_SYSTOHC
o torna11-minute mode
efetivamente um no-op.Mais experimentalmente, você pode usar as ferramentas de perfil do kernel para monitorar a
rtc_set_time()
função por um múltiplo adequado de 11 minutos e ver com que frequência ela é chamada. Se você achar que a resposta é 0 vezes, saberá que o relógio RTC do hardware não está sendo ajustado pelo modo de 11 minutos nem por qualquer outra coisa .