adjtimex和时钟的几个概念tick,freq,ppm,jiffies
adjtimex使用
今天遇到一个ntp的同步问题。服务器上配置好了ntpd,在启动前也手动进行过同步,但是过段时间ntpq查询发现服务器即便能选出同步服务器,但是系统的时间偏差越来越大。
服务器上实际有2个时钟,一个是主板电池驱动的硬件时间(RTC或者CMOS时间),另外就是系统时间。服务器启动时会从RTC里读取一次时间,之后便靠中断来计时。可以设置ntpd同步后讲时间写回RTC.
语法:adjtimex [OPTION]… 主要参数说明:
-p, –print 输出内核时间变量的值
-t, –tick val 设置内核时钟计数间隔(微秒)
-f, –frequency newfreq 设置系统时钟偏移量
-c, –compare[=count] 比较系统时钟和CMOS时钟
-i, –interval tim 设置时钟比较间隔时间 (sec)
-l, –log[=file] 将当前时间记录到文件中
–host timeserver 查询时间服务器
-u, –utc 将CMOS时钟设置成UTC
在服务器上先比较一下系统时间和CMOS时间
# adjtimex --compare
--- current --- -- suggested --
cmos time system-cmos error_ppm tick freq tick freq
1381503971 1.751318
1381503981 1.721794 -2952.4 10000 -1573016
1381503991 1.692179 -2961.5 10000 -1573016 10029 2456959
1381504001 1.662619 -2956.0 10000 -1573016 10029 2097584
1381504011 1.633055 -2956.4 10000 -1573016 10029 2122584
1381504021 1.603491 -2956.4 10000 -1573016 10029 2122584
1381504031 1.573928 -2956.3 10000 -1573016 10029 2117896
1381504041 1.544361 -2956.7 10000 -1573016 10029 2142896
然后使用
# adjtimex -t 10029
修改一下tick,重新手动同步后,再启动ntpd发现时间终于正常了。
毫秒
毫秒是一种较为微小的时间单位,是一秒的千分之一(0.001秒),简称ms。典型照相机的最短曝光时间为一毫秒。一只家蝇每三毫秒扇一次翅膀;蚊子二十毫秒振翅一次;蜜蜂则每五毫秒扇一次。由于月亮绕地球的轨道逐渐变宽,它绕一圈所需的时间每年长两毫秒。在计算机科学中,10毫秒的间隔称为一个jiffy。
微秒
微秒(microsecond)即百万分之一秒(10的负6次秒),简称μs。光在这个时间里可以传播300米,大约是3个足球场的长度,但是海平面上的声波只能传播1/3毫米。高速的商业频闪仪闪烁一次大约持续1微秒。一个BOMB在它的引信烧完之后大约24微秒开始爆炸。
纳秒
纳秒(nanosecond)即一秒的10亿分之一(10的负9次秒),简称ns。常用作内存读写速度的单位。光在真空中一纳秒仅传播30厘米(不足一个步长)。个人电脑的微处理器执行一道指令(如将两数相加)约需2至4纳秒。另一种罕见的亚原子粒子K介子的存在时间为12纳秒。
2. ppm
百万分之一秒,1个PPM增加
24*3600*(10^6+1)/10^6-24*3600=0.0864s。
PPM 增加500,每天的时差500*0.0864=43.2s
假设服务器现在标准的PPM为 A,为了让系统24小时慢1s。则ppm的调整为
A- 1*10^6/3600/24=A-11.574074。
3. freq
In struct timex, freq, ppsfreq, and stabil are ppm (parts per
million) with a 16-bit fractional part, which means that a value of 1
in one of those fields actually means 2^-16 ppm, and 2^16=65536 is 1
ppm. This is the case for both input values (in the case of freq)
and output values.
-f newfreq, --frequency newfreq
Set the system clock frequency offset to newfreq. newfreq can be negative or positive, and gives a much finer adjustment than the --tick switch. When
USER_HZ=100, the value is scaled such that newfreq = 65536 speeds up the system clock by about 1 ppm, or .0864 sec/day
因此freq增加65536相当于增加1个PPM(1E-6S)。freq增加65536,每天的影响0.0864s/天。
因为单个freq对时钟的影响非常小。所以大部分时候不用调整freq,除非是要求比较高的情况下,比如这个机器本身是做时钟服务器。
4. jiffies
全局变量jiffies用来记录自系统启动以来产生的节拍的总数。启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值。一秒内时钟中断的次数等于Hz,所以jiffies一秒内增加的值也就是Hz。
系统运行时间以秒为单位,等于jiffies/Hz。
注意,jiffies类型为无符号长整型(unsigned long),其他任何类型存放它都不正确。
将以秒为单位的时间转化为jiffies:
seconds * Hz
将jiffies转化为以秒为单位的时间:
jiffies / Hz
相比之下,内核中将秒转换为jiffies用的多些
5. 工具介绍
1. adjtimex
可以根据和主板上的硬件时钟作对比,调整系统的每个tick代表的us数和freq,加-c参数会给出建议值。
ubuntu@ip-172-31-23-155:~$ sudo adjtimex -c
--- current --- -- suggested --
cmos time system-cmos error_ppm tick freq tick freq
1484017467 0.491349 10000 1217447
1484017477 0.491537 18.8 10000 1217447
1484017487 0.491743 20.6 10000 1217447 9999 6421047
1484017497 0.491901 15.8 10000 1217447 10000 183072
1484017507 0.492101 20.0 10000 1217447 9999 6460109
1484017517 0.492283 18.2 10000 1217447 9999 6577297
1484017527 0.492490 20.7 10000 1217447 9999 6414797
ntptime
ubuntu@ip-172-31-23-155:~$ ntptime --help
ntptime: unknown option --
usage: ntptime [-MNT:cde:f:hm:o:rs:t:]
-M switch to microsecond mode
-N switch to nanosecond mode
-T tai_offset set TAI offset
-c display the time taken to call ntp_gettime (us)
-e esterror estimate of the error (us)
-f frequency Frequency error (-500 .. 500) (ppm)
-h display this help info
-m maxerror max possible error (us)
-o offset current offset (ms)
-r print the unix and NTP time raw
-s status Set the status bits
-t timeconstant log2 of PLL time constant (0 .. 6)
汇总
| 参数 | 增加单位数 | 1天影响 |
|---|---|---|
| tick | +1 | +8.64s |
| ppm | +1 | +0.0864s |
| freq | +1 | +0.000001318359375s |
简单的换算 1tick=100ppm=2^16*100 freq
adjtimex和时钟的几个概念tick,freq,ppm,jiffies的更多相关文章
- 20.时钟抖动(jitter)和时钟偏移(skew)的概念?
jitter:由于晶振本身稳定性,电源以及温度变化等原因造成了时钟频率的变化,就是jitter,指的是时钟周期的变化.指两个时钟周期之间存在的差值,这个误差是在时钟发生器内部产生的,和晶振或者PLL内 ...
- xeno 实时性能测试 系统时钟1秒100个tick再测试
root@sama5d3-linux:/usr/bin ./latency -t0 -T25 -p100 == Sampling period: ...
- NTP学习路线
NTP了解路线 基础 ntp配置中的tinker参数? ntp的同步方式slew step的区别? restrict含义?restrict -6 default ignore含义? fudge 127 ...
- mips64高精度时钟引起ktime_get时间不准,导致饿狗故障原因分析【转】
转自:http://blog.csdn.net/chenyu105/article/details/7720162 重点关注关中断的情况.临时做了一个版本,在CPU 0上监控所有非0 CPU的时钟中断 ...
- adjtimex修改tick值用法举例
测试 用户态下内核时钟计数间隔,默认都是100HZ.因此单个tick代表了10^4 us. 可以设置每个tick代表的时钟长度,因此把tick增加1(即增加为10001us)的影响是每天时间快8.64 ...
- 转:Linux内部的时钟处理机制全面剖析
Linux内部的时钟处理机制全面剖析 在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等.所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操 ...
- adjtimex使用
adjtimex使用 今天遇到一个ntp的同步问题.服务器上配置好了ntpd,在启动前也手动进行过同步,但是过段时间ntpq查询发现服务器即便能选出同步服务器,但是系统的时间偏差越来越大. 服务器上实 ...
- [转载]Linux的时间与时钟中断处理
本文主要介绍在Linux下的时间实现以及系统如何进行时钟中断处理. 一. Linux的硬件时间 PC机中的时间有三种硬件时钟实现,这三种都是基于晶振产生的方波信号输入.这三种时钟为: 实时时钟RTC ...
- Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)
在前面章节的讨论中,我们一直基于一个假设:Linux中的时钟事件都是由一个周期时钟提供,不管系统中的clock_event_device是工作于周期触发模式,还是工作于单触发模式,也不管定时器系统是工 ...
随机推荐
- Java基础:初始化和清理
转载请注明出处:jiq•钦's technical Blog (1) 初始化: 所以假设继承关系为:A导出B再导出C,在创建C对象的情况下的调用顺序是: * (1) A的静态域,B的静态域,C的静态域 ...
- 飞思卡尔 imx6 GC0308 摄像头驱动配置调试过程
GC0308摄像头驱动程序使用的是linux v4l2协议,通过i2c信号进行控制.GC0308摄像头.对上电时序要求非常严格,一定要依据datasheet初始化摄像头. 本驱动使用的3.10内核,所 ...
- C#反射发出System.Reflection.Emit学习
一.System.Reflection.Emit概述 Emit,可以称为发出或者产生.与Emit相关的类基本都存在于System.Reflection.Emit命名空间下.反射,我们可以取得形如程序集 ...
- 重写description方法
//重写description方法 //description建议大家在实际开发中都要重写这种方法.然后将类中有意义的成员变量打印出来,这样很方便我们调试程序 -(NSString *)descrip ...
- POJ3090 Visible Lattice Points 欧拉函数
欧拉函数裸题,直接欧拉函数值乘二加一就行了.具体证明略,反正很简单. 题干: Description A lattice point (x, y) in the first quadrant (x a ...
- PCB javascript解析Gerber274X格式实现方法
解析钻Gerber274X格式前首先得了解此格式,这样才能更好的解析呀. 一个Gerber274X里面包含的基本信息如下: 1.单位:公式mm,英制inch 2.省零方式:前省零,后省零 3.坐标方式 ...
- jsp中的setHeader页面跳转备忘录
1 <!-- response.setHeader("refresh","3;url=你想跳的页面")--> <%-- response.se ...
- IE下a标签会触发window.onbeforeunload的问题
今天同事发现一个问题,在我做的控件中,点击tab切换的时候,IE上会触发他页面上的onbeforeunload的事件.一开始以为是我控件上事件导致的,但是当我把所有的绑定事件取消以后,问题依然存在.我 ...
- Akka源码分析-官方文档说明
如果有小伙伴在看官方文档的时候,发现有些自相矛盾的地方,不要怀疑,可能是官方文档写错了或写的不清楚,毕竟它只能是把大部分情况描述清楚.开源代码一直在更新,官方文档有没有更新就不知道了,特别是那些官方不 ...
- Codeforces 769C
很久没有发题解,今天这题卡了下百度没看到相关题解,最后还是看了官方题解才找到原本思路的bug过的. 题意:给出一个二维迷宫,*表示墙,. 表示路,X表示起点,问一个长度为k的路径,从X出发并且回到X, ...