RTC同步问题

现象:

读取RTC芯片时间与BMC时间差六秒

分析:

BMC定时从RTC中读取更新信息,但是看日志,在6-03 22:55:56有同步记录,截止到收取日志时间6-04 10:08都没有记录,想问一下定时同步RTC芯片时间是什么机制

答案内容由AI生成,仅供参考:

5. 总结

您观察到的现象是 NTP功能开启后的正常行为:RTC作为备份时间源,在NTP工作期间不主导同步。日志中同步记录中断是因为NTP已接管时间管理。6秒的时间差来源于RTC与NTP时间源之间的固有偏差,而非同步机制故障。

如需进一步确认,可检查NTP同步状态(SyncResult 属性或 ipmcget -d ntp 命令结果)以及RTC芯片的硬件偏差。

点击此处查看详细分析解答

根据您提供的日志和现象,BMC与RTC时间存在6秒差异的原因主要有以下几点,以下是基于您提供的 上下文信息 的详细分析:

1. RTC时间同步机制

  • 同步频率:BMC会每隔6秒从RTC时钟芯片读取时间,并同步更新系统时间。如果通过 ipmiSetDateTime 手动设置时间,也会在6秒后被RTC时间覆盖(除非没有RTC芯片或RTC芯片不可用)。
  • 优先级:当 NTP服务开启 时,系统会停止从RTC同步时间,转而优先使用NTP服务器的时间,因为NTP时间更精确。
  • 启动初始化:系统启动时,会从RTC读取初始时间作为BMC时间的起点。

2. 日志分析:为何同步记录中断

从您的日志可以看出:

  • 2026-06-03 22:55:56 出现了一次同步记录:bmc_time=1780498445, rtc time, timestamp: 1780498445 -> 1780498556
  • 之后直到 2026-06-04 10:08 都没有再出现同步日志。

这是因为 NTP功能已开启(从 Time_Bmc_010101 属性中 Enabled=true 可见)。开启NTP后,BMC不再主动从RTC同步时间(除非配置为“NTP优先”策略且NTP同步失败才会回退到RTC)。因此,日志中未持续出现RTC同步记录是符合设计预期的。

3. 时间差6秒的根因

  • 时间源差异:RTC芯片本身可能存在误差或漂移,而NTP服务器的时间通常更精确。BMC在NTP开启时遵从NTP时间,因此RTC与NTP时间源的差异导致了您观察到的6秒偏差。
  • 同步过程:即使NTP未开启,BMC也会每隔6秒从RTC同步,但同步动作本身会消耗时间,且RTC时间可能并非全局精确,这也会引入微小波动。
  • 持久化问题:您的日志中还记录了 set m3 core time failed 的错误(l_time_intf.c(509):-1),这可能影响了部分时间同步操作的成功率,但未明显干扰主流程。

4. 解决建议

  • 确认NTP配置:请检查NTP服务器地址是否配置正确且可达。如果NTP正常,RTC与BMC时间的差异是由NTP主导,属于正常现象。
  • 如需强制同步RTC:可以调用 SetRtcTime 方法直接写入RTC时间,避免后续RTC轮询覆盖您设置的值。该接口当前仅支持CLI命令使用。
  • 调整同步策略:如果希望NTP失败时自动回退RTC,可在社区或 bmc_core sig 提出诉求,新增 时间同步策略 配置项(如 Custom_TimeSynchronizationPolicy),支持“NTP优先”模式。
  • 检查RTC芯片可靠性:如果RTC芯片本身存在精度问题或硬件异常,建议联系硬件定位。

5. 总结

您观察到的现象是 NTP功能开启后的正常行为:RTC作为备份时间源,在NTP工作期间不主导同步。日志中同步记录中断是因为NTP已接管时间管理。6秒的时间差来源于RTC与NTP时间源之间的固有偏差,而非同步机制故障。

如需进一步确认,可检查NTP同步状态(SyncResult 属性或 ipmcget -d ntp 命令结果)以及RTC芯片的硬件偏差。

NTP使能虽然开启了,但是没有设置NTP服务器

问题基于330节点

bmc_time/1.120.5@openubmc/stable#af422d56cff6b6575ab85e881d874f41%1781065060.011

rtc更新的前提是,系统时间与同步时间误差超过10s,否则不会更新

客户有要求要即时同步,不能存在误差,十秒误差不同步机制是基于什么考虑的呢

启动阶段时间不稳定,所以做了防抖

有点不太理解 启动阶段RTC芯片时间不稳定吗 那十秒误差防抖没什么用吧

启动阶段因为负载比较高,同步到的时间有快有慢,不做防抖时间就会反复跳变