硬件时钟和系统时钟的同步机制及案例分享

news2024/12/25 10:04:17

1 硬件时钟和系统时钟的同步机制

硬件时钟记录在服务器主板的CMOS芯片里面,与主板的南桥芯片(目前Intel与AMD的主板仅有南桥,北桥已集成到CPU)相连。硬件时钟一般叫做RTC(Real Time Clock)、CMOS clock或者BIOS clock,主板上面有一个独立电源(一般是纽扣电池CR2032)保持在操作系统关机、服务器下电后,每1秒嘀嗒计时一次。一般服务器在开机时,操作系统向硬件时钟同步时间。

由于BIOS是只读存储器(ROM),无法保存配置信息,CMOS芯片是一个可读写的存储器,主板会将BIOS的配置信息保存到CMOS芯片中。

纽扣电池一般可以支撑10年左右的寿命,但是如果服务器长时间没有上电,会使纽扣电池的寿命提前终止,导致服务器的BIOS配置无法保存,硬件时钟不准确。

而系统时钟也叫做操作系统时间、kernel clock或者software clock,是基于时间中断器的软件计数器。系统时钟和硬件时钟在一定的场景下会互相影响,比如:

  • 服务器开机时,系统时钟会读取硬件时钟;
  • 操作系统使用过程或者正常关机时,也有可能将系统时钟写入到硬件时钟,缩小硬件时钟与系统时钟的差距;
  • 在UEFI和Legacy两种BIOS的引导模式下,硬件时钟和系统时钟之间的影响程度也不同。具体可以看后面的案例

在Linux操作系统里面,可以使用hwclock、timedatectl查看或者同步硬件时钟的具体状态。

 
[root@localhost ~]# date;hwclock -r;timedatectl
Wed Apr 19 15:15:38 CST 2023 #date输出,软件时钟,24小时制,时区为当前时区东8区
Wed 19 Apr 2023 03:15:38 PM CST -0.383302 seconds #hwclock -r输出,硬件时钟,12小时制,时区为当前时区东8区
Local time: Wed 2023-04-19 15:15:38 CST #timedatectl输出,软件时钟,24小时制,时区为当前时区东8区
Universal time: Wed 2023-04-19 07:15:38 UTC #timedatectl输出,UTC+0时间
RTC time: Wed 2023-04-19 07:15:38 #timedatectl输出,硬件时钟,实际上为UTC+0时间
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
[root@localhost ~]# dmesg|grep -E "RTC|system clock"
[ 0.418401] RTC time: 7:06:26, date: 04/19/23 #开机时识别到的硬件时钟
[ 1.536044] rtc_cmos 00:01: setting system clock to 2023-04-19 07:06:28 UTC (1681887988) #同步硬件时钟到系统时钟中

从命令的输出中可知,操作系统开机时,读取到的RTC为UTC+0时间,Linux内核读取RTC时间为系统时钟的过程中也是同步为UTC+0时间(这与/etc/adjtime配置有关),并且操作系统再读取/etc/localtime将UTC+0时间转换为对应时区的本地时间。

 
[root@localhost ~]# ls -l /etc/localtime
lrwxrwxrwx. 1 root root 35 Apr 19 09:36 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

在Windows里面,默认使用本地时间(localtime)的方式记录时间,并且没有具体的工具或命令能够直接读取到硬件时钟。通过内核引导的过程中可以发现,Windows操作系统开机时通过HalQueryRealTimeCLock读取硬件时钟,再使用KeSetSystemTime同步到系统时钟。

例如我向事件查看器写入一条事件记录后,会发现实际上Windows也会将内核的UTC+0时间(就是事件查看器中的SystemTime,应该是使用KeQuerySystemTime获取的,)转换为localtime时间,localtime就是我们当前的本地时间,UTC+0时间有可能就是内核或者RTC的时间了。

 
PS C:\Users\samremote> Write-EventLog -LogName Application -Source "ESENT" -EntryType Information -EventId 1234 "事件记录产生时间为 $(Get-Date -Format "dddd MM/dd/yyyy HH:mm K")"

2 案例分享

遇到一台HPE DL380 Gen10服务器上安装了Windows Server 2012,使用NTP同步时间,每间隔86400秒同步一次时间。但是自2022年起,出现了3次时间回拨的问题。

  1. 每次时间回退,均为“系统时间已经与硬件时钟同步”

    image002.png

    image002.png

  2. 随后操作系统周期性得向NTP服务器同步时间

根据系统日志的提示,Windows操作系统默认使用localtime(也就是系统设置时区的当前时间)的方式向硬件时钟同步了时间,即不会考虑时区的设置,直接读取硬件时钟,导致服务器出现时间回拨。HPE服务器的硬件时钟与引导模式(UEFI、Legacy)和ILO版本有关,参考(Document - Notice: (Revision) HPE ProLiant, Synergy and Apollo Gen9, Gen10, and Gen10 Plus Servers - Time and Date Synchronization Details | HPE Support),为此需要从该服务器的硬件时钟运作层面进行分析:

  1. 引导模式
    • UEFI:BIOS与操作系统中的所有关于日期、时间、时区的设置都会互相同步,互相影响。
    • Legacy:BIOS的时钟与操作系统时钟独立运行,设置互不影响。
  2. ILO版本
    • iLO5的默认时区为GMT格林威治时间(零时区),与北京时间相差8小时,开机时会将iLO的时区同步到服务器。
    • iLO4的默认时区是大西洋时间(UTC-4时区)。

根据问题现象和HPE官方的文章可以得出下面的逻辑结构图:

综上所述,可以考虑使用以下步骤解决时间回拨问题:

  1. 参考HPE的BUG修复说明,设置BIOS中的时间格式为“Local Time”,并且确保BIOS中的时区与ILO中的时区一致。(推荐)
  2. 使服务器向NTP更加频繁地向NTP同步时间,生产环境中,每10分钟或15分钟向NTP进行一次校时非常常见,目前设置86400秒同步一次,时间变慢的概率会更高。(推荐)
  3. 或者使用Legacy启动模式,但引导模式的更改,有可能导致服务器无法正常引导进入操作系统。(不推荐) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/875101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

管易云和金蝶云星空接口打通对接实战

管易云和金蝶云星空接口打通对接实战 对接系统管易云 管易云是上海管易云计算软件有限公司旗下的专注提供电商企业管理软件服务的品牌,总部位于中国上海张江高科技产业园区。管易云旗下拥有管易云C-ERP、EC-OMS、EC-WMS、B2C/B2B/BBC/微商城开发、PDA无纸化仓储解决…

提前预知风险:探索天气预警 API 在灾害管理中的关键作用

引言 自然灾害无情地影响着人类的生活,损害着财产和环境。然而,随着科技的不断进步,人类有了更多的工具来预测和减轻灾害带来的影响。其中,天气预警 API 在灾害管理中扮演着关键的角色,为政府、企业和个人提供了提前预…

JAVA日期相关操作

JAVA日期相关操作 计算两个日期相差的天数 /*** 计算两个日期相差的 天数* param smdate String类型初始时间* param bdate String类型截至时间* return Integer*/public static Integer dayCompare(String smdate, String bdate) throws Exception {Date start sdf.par…

12-数据结构-数组、矩阵、广义表

数组、矩阵、广义表 目录 数组、矩阵、广义表 一、数组 二.矩阵 三、广义表 一、数组 这一章节理解基本概念即可。数组要看清其实下标是多少,且二维数组,存取数据,要先看清楚是按照行存还是按列存,按行则是正常一行一行的取读写…

每天一道leetcode:115. 不同的子序列(动态规划困难)

今日份题目: 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数。 题目数据保证答案符合 32 位带符号整数范围。 示例1 输入:s "rabbbit", t "rabbit" 输出:3 解释: 如下所…

ssm+vue基于java的健身房管理系统源码和论文PPT

ssmvue基于java的健身房管理系统源码和论文PPT015 开发工具:idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具:navcat,小海豚等 开发技术:java ssm tomcat8.5 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统…

(一)Unity开发Vision Pro介绍

1.介绍 1.1 介绍 VisionOS 可实现与现实世界无缝集成并与其他虚拟内容共存的 3D 多任务体验。这为个人生产力、生活方式和娱乐应用打开了一个充满新可能性的世界,并为开发人员打开了一个全新的市场。然而,它也带来了围绕多任务处理和与身体互动的新挑战…

运维监控学习笔记6

应用监控: 安装nginx的过程: yum install -y gcc gcc-c pcre-devel openssl-develcd /usr/local/src wget http://nginx.org/download/nginx-1.24.0.tar.gztar -zxvf nginx-1.22.1.tar.gzuseradd -s /sbin/nologin -M www./configure --prefix/usr/local/nginx-1.…

HCIP-OpenStack发放云主机

1、云中的概念 在云平台注册了一个账号,这个账号对于云平台来说,就是一个租户或者一个项目。 租户/项目(tenant/project),是一个意思。主机聚合就是主机组的意思。 region(区域),就…

发过来的pdf文件怎么编辑?了解一下这几种编辑方法

发过来的pdf文件怎么编辑?PDF适用于各种用途。但是,许多人可能需要对PDF文件进行编辑,以满足特定的需求和要求。例如,他们可能需要添加或删除某些元素,更改文本或图像,或者将PDF文件转换为其他格式。在这种…

实例037 没有标题栏可义改变大小的窗口

实例说明 隐藏Windows窗口的标题栏之后,窗口只剩下一个客户区域,有点像Panel控件在窗口中的样子,而这样的窗口通常是不能够改变大小的。因为屏蔽其标题栏之后,窗口默认将边框也去除了,本例将用特殊的方法建立一个没有…

Linux代理的设置与使用方法

在Linux平台上, 代理的设置使用方法更是让人头疼。本文将为你分享Linux上 代理的设置和使用方法,并提供一些实用的解决方案,方便实际操作。 我们先来了解一下常用的 代理软件 在Linux上,有许多 代理软件可供选择。以下是几种常用的…

【Elsevier旗下】1区SCI,5天见刊!稳定检索36年,大数据、人工智能、机器学习、语音、语言、会话、情绪识别等领域

近日国自然预计将在下周8月20日之前公布,想必申请过国自然基金作者都知道,需要有研究基础,说白了就是需要有文章支持。那么稿子写好了,选择一本靠谱优质期刊也是一门学问。 本期小编推荐2本Elsevier 旗下审稿快刊,各项…

Python实现SSA智能麻雀搜索算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法,在2020年提出&a…

电商财务新时代:轻松自动对账,财务效率倍增

电商领域频繁的多平台财务对账常常令企业头痛不已。然而,随着轻易云数据集成平台的崭新解决方案,财务对账的痛点迎刃而解。本文通过引人入胜的实例,深入探讨电商财务对账的现状,突出轻易云数据集成平台在自动对账中的强大作用&…

微信小程序有哪几种变现途径?

纵观现在市面上的微信小程序,目前变现的途径主要有:广告变现、电商变现、游戏付费、服务付费等。 1.广告变现 广告变现是小游戏、工具类、资讯类小程序变现的主要方式。微信官方为游戏开发者提供的扶植政策,对于工具类、资讯类小程序&#…

自然语言处理实战项目15-四种文本纠错模型的对比与实践,解决大家写作问题

大家好,我是微学AI,进入给大家介绍一下自然语言处理实战项目15-四种文本纠错模型的对比与实践,解决大家写作问题。文本纠错模型是一个旨在解决大家写作问题的实践项目。它基于先进的自然语言处理技术,特别是文本纠错领域的模型和算法,能够帮助用户快速、准确地纠正文本中的…

最新 python 爱心代码?

python程序代码:heart.py from math import cos, pi import numpy as np import cv2 import os, globclass HeartSignal:def __init__(self, curve"heart", title"Love U", frame_num20, seed_points_num2000, seed_numNone, highlight_rate0.…

python——案例20:计算数字组合方式

案例20:计算数字组合方式 假设三个数字1、2、3任意排列,有几种组合方式,分别是什么? sum0 for a in range(1,4):for b in range(1,4):for c in range(1,4):if a!b and b!c and a!c:print(a,b,c)sum1print("答案为&#xff1a…

中小企业体育代言:探索费用策略与实际操作

随着体育市场的不断扩大和企业品牌的不断提升,中小型企业正逐渐将目光投向了体育明星代言,希望通过这一策略来提升品牌知名度、美誉度,进而吸引目标消费者的注意力并提升销售量。然而,中小型企业请体育明星代言的费用究竟是多少呢…