AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 791197
Accepted
Seamus
Seamus
Asked: 2025-02-18 13:53:11 +0800 CST2025-02-18 13:53:11 +0800 CST 2025-02-18 13:53:11 +0800 CST

Como confirmar se o kernel está (ou não) atualizando o hwclock/RTC

  • 772

Esta pergunta é uma continuação desta resposta . Em geral, meu objetivo é saber se meu sistema (Debian/Raspberry Pi 5 'bookworm') está atualizando meu relógio RTC/hardware a partir do horário do sistema. Observe que o RPi 5 (diferentemente de seus ancestrais Pi) tem um relógio RTC/hardware embutido .

Aqui está o que consegui determinar até agora:

1. Sinto que estabeleci que o relógio do sistema está sendo atualizado a partir do hwclock:
$ dmesg | grep "system clock" 

[    1.588793] rpi-rtc soc:rpi_rtc: setting system clock to 2025-02-18T04:59:13 UTC (1739854753)

Depois de alguma busca dmesg, no entanto, não consegui encontrar nenhuma indicação de que o hwclock esteja sendo atualizado a partir do horário do sistema. No entanto, encontrei uma referência a um fake-hardwarerelógio (o que parece estranho ). :

[    4.037230] systemd[1]: Starting fake-hwclock.service - Restore / save the current clock...
2. O kernel está aparentemente configurado para fazer atualizações de relógio em "ambas as direções":
$ cat /boot/config-$(uname -r) | grep -i HCTOSYS
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"  

$ cat /boot/config-$(uname -r) | grep -i SYSTOHC
CONFIG_RTC_SYSTOHC=y
CONFIG_RTC_SYSTOHC_DEVICE="rtc0"

Ocorreu-me que o kernel pode estar executando a sincronização SYSTOHC somente durante o desligamento, e talvez não esteja sendo capturado por dmesg... mas isso é um WAG.

Alguém pode explicar como confirmar se o kernel está (ou não) atualizando o hwclock/RTC?

linux-kernel
  • 2 2 respostas
  • 34 Views

2 respostas

  • Voted
  1. Marcus Müller
    2025-02-18T15:58:31+08:002025-02-18T15:58:31+08:00

    Bem, se essa variável de configuração estiver definida e o kernel não tiver sido alterado, é exatamente como você disse: o RTC é atualizado pelo relógio do sistema a cada 11 minutos (suspensões e outros eventos não obstante).

    Você é, é claro, livre para desconfiar do seu compilador de kernel, ou se perguntar se a verificação ntp_synced()no código vinculado acima é verdadeira. With sudo perf stat -e rtc:rtc_set_timecontaria todas as vezes que a função de configuração de tempo RTC do kernel foi chamada. Deixe-a rodar por > 11 minutos, então ctrlc: se a contagem for > 0, seu RTC foi definido.

    Tenho que perguntar isto: de onde você tirou o comando para rastrear... o rtc:rtc_set_time?

    Li o código-fonte do Linux no primeiro link da minha resposta. Lá, duas coisas foram tentadas para definir o RTC, a coisa que eles chamavam de "legado" e a coisa mais nova.

    Verifiquei rapidamente se o legado não estava implementado no arm, então seu kernel estava usando a maneira mais nova, update_rtcentão li o código-fonte dessa função.

    Ele chama rtc_set_time, e que contém a linha

        trace_rtc_set_time(rtc_tm_to_time64(tm), err);
    

    Isso sugeriu que havia um ponto de rastreamento " rtc_set_time". Então, fui e procurei por um:

    sudo perf list | grep rtc_set_time
    

    e encontrei!

    • 2
  2. Best Answer
    grawity
    2025-02-18T15:53:12+08:002025-02-18T15:53:12+08:00

    Alguém pode explicar como confirmar se o kernel está (ou não) atualizando o hwclock/RTC?

    Instale a ferramenta adjtimex , execute adjtimex -pe anote o valor "status". A ferramenta é antiga e um pouco rudimentar e nem mesmo decodifica os sinalizadores de status para texto, então você terá que usar uma calculadora ou Python ou algum outro REPL para verificar se ele inclui o valor 64 (STA_UNSYNC). Se o sinalizador estiver ausente, o relógio será mantido em sincronia; se estiver presente, o relógio não será sincronizado e as atualizações RTC serão desabilitadas.

    $ adjtimex -p
     status: 24577
    
    $ echo $[24577 & 64]
    0
    
    $ python
    >>> 24577 & 64
    0
    

    (Infelizmente, não é isso que o timedatectlitem "Relógio do sistema sincronizado:" relata, embora eu estivesse prestes a sugerir isso. Ele ignora deliberadamente a indicação STA_UNSYNC e considera apenas o maxerror.)

    Geralmente, STA_UNSYNC é definido por padrão e o RTC permanece intocado pelo kernel, a menos que você tenha um daemon NTP em execução (timesyncd, chrony, ntpd) que ajusta o relógio do sistema e limpa o sinalizador para habilitar atualizações de RTC.

    Observe que o popular daemon NTP chrony nem sempre depende do kernel para atualizar o RTC; sua configuração padrão costumava ser que o próprio daemon chrony faria os ajustes de hwclock, deixando o STA_UNSYNC definido (ou seja, atualizações do kernel desabilitadas).

    Abordagem experimental alternativa: Use hwclockpara definir o RTC para um horário obviamente errado , então espere aprox. 11 minutos (o intervalo de atualização usual do kernel), então leia o valor RTC novamente. Se agora estiver correto, então algo definitivamente o atualizou.

    Ocorreu-me que o kernel pode estar executando a sincronização SYSTOHC somente durante o desligamento e talvez não esteja sendo capturado pelo dmesg...

    Se isso for feito apenas no desligamento, então não será feito pelo kernel – isso faz parte dos scripts de inicialização/desligamento da sua distribuição.

    No entanto, encontrei uma referência a um relógio de hardware falso (o que parece estranho).

    Como você notou, versões anteriores do Pi não tinham um RTC real. Mas elas ainda precisavam armazenar o tempo aproximado do sistema em algum lugar, para que o sistema não inicializasse em 1970 toda vez. Assim, um arquivo no disco serve como um RTC que não faz tique-taque.

    (O Systemd de fato tem essa funcionalidade incorporada, mesmo sem o fake-hwclock.service.)

    • 1

relate perguntas

  • Como posso fazer meu console framebuffer funcionar?

  • Bloqueando montagem syscall

  • Por que a versão 30 das ferramentas sem fio se tornou uma versão beta permanente?

  • tamanho da pilha do programa

  • Quais dongles WiFi 802.11ac (ou posteriores) funcionam com o kernel Linux 4.13

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve