首页 > 编程知识 正文

加速度导致的地转偏差(linux 时间 偏差,【转】Linux系统时间偏差的纠正 adjtimex)

时间:2023-05-05 11:12:15 阅读:121302 作者:4040

实际上,linux系统有两个时钟。 一种是主板电池的实时时钟,也称为RTC或CMOS时钟,是硬件时钟。 关闭操作系统电源时,使用它来记录时间,但运行的系统不使用这个时间。 另一个时间“系统时钟”也称为内核时钟或软件时钟,软件根据时间中断进行计数。 如果系统已关闭,则内核时钟不存在。 因此,当操作系统启动时,内核时钟将读取RTC时间并进行时间同步。 在某些情况下,内核时钟还可以在ntp服务器上读取时间。)

这两个钟通常有一些误差,所以很长时间内这两个钟经常错位。 最简单的方法是用软件测量他们之间的误差率,用软件修正。 每次重新启动系统时,系统都会使用hwclock命令同步时间。 如果内核时钟的中断每次都快或慢,可以使用adjtimex命令调整RTC以匹配内核时间的前进速度。

linux内核时间实际上记录的是从1970年1月1日到现在的秒数,以格林尼治标准时间(GMT )或统一通用时间(UTC- Coordinated Universal Time )为基准。 UTC是DST )夏时制)的转换过程中,需要更改的是APP应用程序本身完成时间转换。

通常本地时间=UTC时间段

安装linux系统时,时区可能设置正确,但如果出于某些原因需要进行调整,请参考以下方法

可以使用tzselect命令更改存储在/etc/sysconfig/clock文件(Redhat As3 )中的系统的当前时区

linux发行版附带clock (早期版本)和hwclock命令,有些版本可能安装了adjtimex程序。 脚本可以在系统启动时自动调用hwclock命令,而hwclock命令可以在设置RTC时自动进行时钟偏移补偿。 注意:同时运行其他设置RTC的程序可能会干扰hwclock命令的校准功能,因此在运行这些命令时,请只选择其中一个命令进行运行。

在adjtimex中,用户可以调整内核的时间参数,从而更改内核时间的速度。 使用hwclock命令比较内核时间和RTC时间的偏差率,使用adjtimex命令根据偏差率校正内核时间,使内核时间变快或变慢。 如果调整的内核时间以与RTC时间相同的速度前进,请将此命令行写入启动脚本,并在每次计算机启动时

因此,计算机有两个时钟:实时时钟(RTC )和系统时钟,RTC由电池驱动并正常工作,系统时钟只在系统启动后存在,系统时钟通常是精确微妙的

通常有许多方法可以调整linux系统的时间和RTC的时间匹配。 在时间服务器所在的网络中,使用linux系统的NTP服务同步系统时间是一种简单的方法,但如果不存在这些条件,也可以使用系统内部提供的时间修改工具进行同步

在Redhat linux系统下有一个名为adjtimex的工具

adjtimex是一个用于查看或修改linux内核时间变量的工具,提供对内核时间变量的直接访问,并修改系统时间漂移。

虽然可以使用adjtimex命令显示时间变量,但只有root用户可以修改这些参数

在调整系统时间之前,首先应该知道系统时间和RTC时间有多少不同。 也就是说,决定系统时间的漂移率可以通过简单的指令来实现

#adjtimex --compare

----current--------suggested----

cmostimesystem-CMOS2nddifftickfreqtickfreq

124251642-0.658092-0.65809210000

124251652-0.659612-0.00152010000

124251662-0.661111-0.00149910000100013271400

124251672-0.662609-0.00149810000100013263588

124251682-0.664108-0.00149910000100013269838

124251692-0.665607-0.00149910000100013269838

124251702-0.667104-0.00149710000100013257338

124251712-0.668605-0.0015011000010002-3269700

结果显示了两个时钟的差异,第一个是2nd diff显示系统时间在10秒周期内是快是慢

这里可以看到系统时间在10秒钟内延迟了0.001498秒。 (另外,在此,系统连续测试几个连续的差异。 一般请参考平均值。 )

第二,你可以看到

两个内核参数 tick 和freq 另外,系统也有一个对tick和freq的推荐值,用这个值可以对系统时间进行校正

从上面结果看系统时钟每10秒慢了-0.001xxx秒(相对于RTC时间),利用-t参数可以重新定义系统时间10秒的长度,由于比实际时间(RTC)慢了1微秒多,因此可以

把系统10秒(10000微秒)的长度定义成实际时间的10001微秒,也就是说让系统时间走的快点,也可以说每系统时间走10秒(10000微秒)就快1微秒,从而系统时间跟上

了RTC时间,达到了时间校正的目的

#adjtimex --tick 10001

#adjtimex -c

--- current --- -- suggested --

cmos time system-cmos 2nd diff tick freq tick freq

1124251994 -0.710396 -0.710396 10001 0

1124252004 -0.710913 -0.000517 10001 0

1124252014 -0.711411 -0.000498 10001 0 10001 3264062

1124252024 -0.711910 -0.000499 10001 0 10001 3270312

1124252034 -0.712413 -0.000503 10001 0 10001 3296875

1124252044 -0.712911 -0.000498 10001 0 10001 3262500

1124252054 -0.713409 -0.000498 10001 0 10001 3264062

1124252064 -0.713908 -0.000499 10001 0 10001 3270312

请注意,时钟的差别已经不到1微秒了,但是还存在大约0.4--0.5微秒的差别,要修正更高单位的差别,-t参数就无能为力了,需要用到偏移量参数-f

请用如下公式决定-f的修正值

f=差值*100000*65536

这里 f=0.000499*100000*65536=3270246.4

#adjtimex -f 3270246

#adjtimex -c

--- current --- -- suggested --

cmos time system-cmos 2nd diff tick freq tick freq

1124252365 -0.728704 -0.728704 10001 3270246

1124252375 -0.728723 -0.000019 10001 3270246

1124252385 -0.728721 0.000002 10001 3270246 10001 3256184

1124252395 -0.728722 -0.000001 10001 3270246 10001 3278058

1124252405 -0.728721 0.000001 10001 3270246 10001 3262434

1124252415 -0.728723 -0.000002 10001 3270246 10001 3284308

1124252425 -0.728719 0.000004 10001 3270246 10001 3243684

1124252435 -0.728721 -0.000002 10001 3270246 10001 3282746

可以看到两个时间已经非常接近了大约10秒种,会相差大约1-3豪秒(usec)

有关tick 和freq的数值,在suggested列里面已经由程序算出推荐值了,也可以参考推荐值

注意adjtimex在本文写作的时候在如下连接可以找到

Author Info :

引用:http://blog.csdn.net/huaxi1902/article/details/8761763

posted on 2013-11-13 11:33 回忆之城 阅读(214) 评论(0)  编辑 收藏 引用

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。