记得小的时候看到的电视机是黑白电视机,当时的电视机有一些旋转按钮,当你需要调整频道的时候其中一个是叫做微调,另外还有一个是频道,记得看电视的时候这些操作我是相当熟练,当我们使用了频道跳跃按钮调换了频道后,发现画面质量不佳时就会使用微调按钮一点一点小心翼翼的调整画面质量以达到最佳。
为什么讲这个呢?因为了解了ntp的同步方式之后发现这2者有共同的地方。
ntp的同步调整方式分为slew和step。它是在时钟纪律算法中自动实现,当然也可以通过接口人工干预(即参数的设定),在ntp中是slew的同步方式指的是平滑,缓慢,微调的意思,step的同步方式指的是分步,分阶段,相当于电视换频道一样,一个一个的跳跃。
既然有这2种同步方式,那么在ntp服务启动的时候默认使用的是哪种方式呢?
通过查阅资料我发现ntp默认是step模式 "under ordinary conditions, ntpd adjusts the clock in small steps so that the timescale is effectively continuous and without discontinuities."
意思是:在普通条件下,ntpd以小步调整时钟,使时间刻度有效连续,不间断。
然后在下面又提到了-x选项了,通过/etc/sysconfig/ntpd可以看到默认情况-x选项是没有开启的。
上图的意思是"通常情况下,如果偏移量小于step阈值,则使用step的默认值,默认为128 ms,如果超过step阈值,则时间会被stepped,即分步过度。 在window(这里的window应该理解为编辑ntp配置的窗口)中手动设置使用-x选项会将阈值设置为600秒。 注意:由于典型Unix内核的slew方式的速率限制为0.5 ms / s,因此每次调整都需要2000s的摊销间隔。因此,多达600秒的调整将需要近14天才能完成。 该选项可以与-g和-q选项一起使用。 有关其他选项,请参阅tinker命令。 注意:使用此选项禁用内核时间规则。"
分析总结ntp在没有开启slew方式时,会一直使用step的方式,分步调整偏差。在开启了slew方式时,在600s内的偏差会使用slew方式以0.5ms/s的速度缓慢平滑的进行微调,整个过程<=14天消除偏差,如果此时偏差查过了600的话会继续使用step的方式分步分阶段调整偏差。