这adjtimex实用程序有一种--adjust
模式,可用于将系统时钟与 CMOS 时钟进行比较,计算建议值打钩和频率偏移内核时间变量,并自动安装这些建议值。
默认情况下,将进行 8 次比较 ( count
),比较间隔为 10 秒 ( interval
)。每进行 3 次比较后都会自动安装建议值,不包括前两次比较。
以下是 的示例输出adjtimex --adjust
。整个过程(使用count
和 的默认值interval
)需要 70 秒:
--- current --- -- suggested --
cmos time system-cmos error_ppm tick freq tick freq
1391731712 -3.877457
1391731722 -3.879791 -233.4 10000 0
1391731732 -3.882372 -258.1 10000 0 10002 3806862
1391731742 -3.884677 -230.5 10000 0 10002 1999050
1391731752 -3.887348 -267.1 10000 0 10002 4397487
1391731762 -3.887226 12.2 10002 4397487 10002 3599050
1391731772 -3.886892 33.4 10002 4397487 10002 2208425
1391731782 -3.886588 30.4 10002 4397487 10002 2405300
我的问题是,有人知道为什么选择这些默认值(count=8
,interval=10
)吗?
我认为比较间隔越长,系统时钟和 CMOS 时钟之间的漂移估计就越准确。因此,假设我们希望整个过程的持续时间为 70 秒,我认为 是count=3
显而易见interval=35
的选择(请注意,至少需要 3 次比较才能获得建议的刻度和频率值)。
有人可以解释一下这个问题吗?
答案1
David L. Mills(adjtimex 实用程序的创建者)就该主题撰写了不少论文,可供参考(附有参考文献)这里 您正在寻找的答案可以在他的论文中找到:改进的同步计算机网络时钟算法(1995)
您的问题特别质问了为什么在 70 秒内进行了超过 3 次计数(在本例中是 8 次)。虽然只需要 3 次比较(样本),但可以使用更多样本来建立95% 置信区间估计时钟系统漂移的值。
每第三次比较后安装计算出的建议刻度值,以进一步提高估计漂移的准确性。
从统计学上讲,在较长的时间间隔内采集的样本越多,得到的漂移值就越接近实际漂移值。
Mill 博士论文中的一些有趣历史:在最初的 Unix 设计中,硬件计时器以固定的速率中断内核:SunOS 内核中为 100 Hz,Ultrix 内核中为 256 Hz,OSF/1 内核中为 1024 Hz。由于 Ultrix 计时器间隔(速率的倒数)不能均匀地划分微秒,因此内核每秒增加 64 微秒一次,因此时间尺度由 255 个 3906 µs 的推进加上 3970 µs 的推进组成
Unix 4.3bsd 时钟模型需要由在 100-1000 Hz 范围内运行的振荡器产生的周期性硬件定时器中断。每次中断都会导致将增量滴答添加到内核时间变量中。增量值的选择方式是,计数器加上由 settimeofday() 调用建立的初始偏移量等于以秒和微秒为单位的一天中的时间。当滴答不能均匀地划分以微秒为单位的秒时,每秒将额外的增量 fixtick 添加到内核时间以弥补差异。
“时钟的稳定性是指它能保持恒定频率的能力,准确度是指它的时间与系统时钟的比较能力,而精度是指时间的解析程度。所有这些因素都需要结合起来才能”