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的更多相关文章

  1. 20.时钟抖动(jitter)和时钟偏移(skew)的概念?

    jitter:由于晶振本身稳定性,电源以及温度变化等原因造成了时钟频率的变化,就是jitter,指的是时钟周期的变化.指两个时钟周期之间存在的差值,这个误差是在时钟发生器内部产生的,和晶振或者PLL内 ...

  2. xeno 实时性能测试 系统时钟1秒100个tick再测试

    root@sama5d3-linux:/usr/bin ./latency -t0 -T25 -p100                            == Sampling period: ...

  3. NTP学习路线

    NTP了解路线 基础 ntp配置中的tinker参数? ntp的同步方式slew step的区别? restrict含义?restrict -6 default ignore含义? fudge 127 ...

  4. mips64高精度时钟引起ktime_get时间不准,导致饿狗故障原因分析【转】

    转自:http://blog.csdn.net/chenyu105/article/details/7720162 重点关注关中断的情况.临时做了一个版本,在CPU 0上监控所有非0 CPU的时钟中断 ...

  5. adjtimex修改tick值用法举例

    测试 用户态下内核时钟计数间隔,默认都是100HZ.因此单个tick代表了10^4 us. 可以设置每个tick代表的时钟长度,因此把tick增加1(即增加为10001us)的影响是每天时间快8.64 ...

  6. 转:Linux内部的时钟处理机制全面剖析

    Linux内部的时钟处理机制全面剖析 在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等.所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操 ...

  7. adjtimex使用

    adjtimex使用 今天遇到一个ntp的同步问题.服务器上配置好了ntpd,在启动前也手动进行过同步,但是过段时间ntpq查询发现服务器即便能选出同步服务器,但是系统的时间偏差越来越大. 服务器上实 ...

  8. [转载]Linux的时间与时钟中断处理

    本文主要介绍在Linux下的时间实现以及系统如何进行时钟中断处理. 一. Linux的硬件时间 PC机中的时间有三种硬件时钟实现,这三种都是基于晶振产生的方波信号输入.这三种时钟为: 实时时钟RTC ...

  9. Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)

    在前面章节的讨论中,我们一直基于一个假设:Linux中的时钟事件都是由一个周期时钟提供,不管系统中的clock_event_device是工作于周期触发模式,还是工作于单触发模式,也不管定时器系统是工 ...

随机推荐

  1. chrome浏览器调试线上文件映射本地文件

    chrome浏览器调试线上文件映射本地文件 通过ReRes让chrome拥有路径映射的autoResponse功能. 前端开发过程中,经常会有需要对远程环境调试的需求.比如,修改线上bug,开发环境不 ...

  2. 第一章--linux基础

    (一):linux系统根文件夹结构 Unix-like系统中的"文件系统"的概念包含两个意思,第一个是"根文件系统",第二个是"存储类文件系统&quo ...

  3. windowActionModeOverlay

    windowActionModeOverlay: android:windowActionModeOverlay=“true|false”  : actionmode 弹出时覆盖部分布局      若 ...

  4. SuperSocket中的Server是如何初Start的

    第一个函数 d:\sourcecode\github\supersocket\quickstart\basic\telnetserver_startbyconfig\program.cs static ...

  5. YTU 2706: 编写一个函数求最大的n值

    2706: 编写一个函数求最大的n 值. 时间限制: 1 Sec  内存限制: 128 MB 提交: 341  解决: 132 题目描述 编写一个函数求满足以下条件的最大的n.:12+22+32+-+ ...

  6. Opencv打开内置摄像头

    Opencv中VideoCapture是专门用来处理视频文件或者摄像头视频流的类,详细的说明和用法可以参考Opencv2.4.13的说明文档:点击打开链接 使用VideoCapture打开内置摄像头的 ...

  7. 在PL/SQL使用游标获取数据及动态SQL

    1.游标概念: 当在PL/SQL块中执行DML(增删改)时,Oracle会为其分配上下文区(Context Area),游标是指向上下文区的指针 2.  游标分类: A.  隐式游标 a.  在PL/ ...

  8. AD9850驱动程序--MSP430版本

    前段时间忙着画板子搞运放搞滤波了,程序更新的少,发现MSP430不是太好用,尤其Timer,不过也与我使用内部晶振有关,产生正玄波之前用MSP430发出PWM,再进行滤波变为正弦波太麻烦了,这次改用D ...

  9. [App Store Connect帮助]二、 添加、编辑和删除用户(3)添加和编辑用户

    您可以在“用户和访问”中添加和编辑用户. 如果您以个人名义在“Apple 开发者计划”注册,您可以授权用户访问您 App Store Connect 中的内容.所有用户只拥有 App Store Co ...

  10. [Swift通天遁地]三、手势与图表-(13)制作美观简介的滚动图表:折线图表、面积图表、柱形图表、散点图表

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...