通常有许多方法可以调整linux系统的时间和RTC的时间匹配。 在时间服务器所在的网络中,使用linux系统的NTP服务同步系统时间是一种简单的方法,但如果不满足这些条件,也可以使用系统内部提供的时间修改工具。 这个工具就是adj超市的发带ex。
adj超市发带ex是一种用于显示或修改linux内核时间变量的工具,它提供对内核时间变量的直接访问功能,并且可以修改系统时间漂移。 任何人都可以通过adj超市的挂接ex命令查看时间变量,但只有root用户才能修改这些参数。 此外,RHEL5必须安装名为adj超市JOEx的软件包,但RHEL4安装光盘上没有。
首先介绍一下adj超市发带ex的使用
语法: adj超市的发箍ex [OPTION]…主要参数说明:
-p,-print输出内核时间变量的值
-t,-设置-tick val内核时钟数间隔
-f,-frequency newfreq设置系统时钟的偏移
-c,compare [=count ]比较系统时钟和CMOS时钟
-i,-interval超市的头箍设置时钟比较间隔时间(sec ) ) ) ) ) ) ) ) ) )。
-l,log [=file ]将当前时间记录在文件中
主机超级挂接eserver联系时间服务器
-u,-UTC将CMOS时钟设置为utc
介绍具体的使用方法。
#adj超市的发箍ex -c
----current--------suggested----
cmos超市发带e system-CMOS error _ ppmtickfreqtickfreq
1239841138 28861.471817
123984114828861.471815-0.299836106772
123984115828861.4718180.39983610677299836086476
123984116828861.4718270.99983610677299836045850
123984117928861.4718280.19983610677299836099602
123984118928861.4718340.59983610677299836072413
123984119928861.4718370.39983610677299836086475
123984120928861.471839.29983610677299836092725
对各参数进行说明。
cmos超市发带e硬件RTC时间(自1970年1月1日起的秒数);
系统- CMOS :系统时间和RTC不同的时间(单位: s );
error_ppm :表示当前tick循环中系统时间的system-cmos的对比度是快还是慢
前面的tick/freq字段表示当前内核时钟的计数间隔,是系统时钟偏移(tick的默认值为10s=10000ms )
最后的tick/freq指示系统对于tick和freq的推荐值,可以用该值来校正系统时间。
拿一行来说明:
123984115828861.4718180.39983610677299836086476
根据计算:
系统- CMOS :28861.471818:系统时间与RTC的差值为28861.471818s
具体说明时差8小时=8*3600=28800s,系统时间比cmos时间快了61.471818s
error_ppm:0.3 :表示系统时间在当前tick周期内,error _ ppm=second _ diff/interval * 100000;
(28861.471818[当前system-cmos]-28861.471815[上次采样的system-CMOS]]/10s*1000000=0.3相当于3us。
tick:9983 :表示内核时钟计数间隔为9983ms
freq:6106772 :表示当前系统时钟偏移
对于adj超市的发带ex,需要明确可以调整的时间数量:
9000=tick=11000
-33554432=frequency=33554432
时间的调整一般使用-t这个参数。 对于微妙水平的需要,使用-f参数。
)1)首先查看error_ppm,系统是快于还是慢于实际RTC。 分别是正值和负值。
)2)确认时间差订单:
(3)参考值计算:
系统tick和freq的平均值
t[参考]=error_ppm*0.01
f[参数]=error_ppm*0.1*65536
(4)计算指令参数所需的数值:
对于毫秒订单:
如果系统比实际时间快:
t[参数]=tick平均值-t[参考]平均值执行: adj超市头箍ex-t[参数]
如果系统晚于实际时间:
t[参数]=tick平均值t[参照]平均值执行: adj超市的头箍ex-t[参数]
对于美国订单:
如果系统比实际时间快:
f[参数]=tick平均值-f[参照]平均值执行: adj超市的头箍ex-f[参数]
如果系统晚于实际时间:
f[参数]=tick平均值f[参照]平均值执行: adj超市的头箍ex-f[参数]
举个例子,-t参数的使用:
(1)首先,调整系统时间以使RTC时间和系统时间一致
(2) adj超市的发箍ex -c
----current--------suggested----
cmos超市发带e system-CMOS error _ ppmtickfreqtickfreq
1239843830 28861.482212
123984384028861.4992121700.010006106772
123984385028861.5162211700.91000610677299836047675
123984386028861.5332261700.51000610677299836072675
123984387028861.5502271700.11000610677299836097676
123984388028861.5672361700.81000610677299836053925
123984389028861.5842371700.11000610677299836099238
123984390028861.6012421700.51000610677299836072676
)3)系统比RTC快1700us,需要使用-t参数
t[参见]=error_ppm*0.01=1700*0.01=17
t[参数]=tick平均-t[参考]平均=10000-17=9983
执行: adj超市发箍ex -t 9983
(4) adj超市的发箍ex -c
----current--------suggested----
cmos超市发带e system-CMOS error _ ppmtickfreqtickfreq
1239844092 28861.923291
123984410228861.923289-0.399836106772
123984411228861.9232930.49983610677299836080225
12398441228861.9232940.19983610677299836098975
123984413128861.923293-0.1998361067729983611475
123984414128861.9232930.09983610677299836105225
123984415128861.9232940.09983610677299836105225
123984416128861.923288-0.69983610677299836145849
)5)可以看出现在的系统和实际的RTC时间的差变小了。