![如果不立即设置,NTP 需要多长时间来调整时钟?](https://linux22.com/image/46612/%E5%A6%82%E6%9E%9C%E4%B8%8D%E7%AB%8B%E5%8D%B3%E8%AE%BE%E7%BD%AE%EF%BC%8CNTP%20%E9%9C%80%E8%A6%81%E5%A4%9A%E9%95%BF%E6%97%B6%E9%97%B4%E6%9D%A5%E8%B0%83%E6%95%B4%E6%97%B6%E9%92%9F%EF%BC%9F.png)
我正在使用 SNTP 同步我的基于 Debian 的系统。 SNTP 有两种设置时钟的方法:
-s, --settod Set (step) the time with settimeofday().
-j, --adjtime Set (slew) the time with adjtime().
转换方法以小步长调整本地系统时钟,直到检测到的偏移为零。进行回转主要是为了不扰乱那些对时间倒退的时钟做出不良反应的进程。
步骤方法立即设置时钟。
从时间上来说,SNTP 需要多长时间才能完成?
有没有办法轮询系统并向我提供转换仍在进行中的反馈?
答案1
步骤方法立即设置时钟。 SNTP 需要多长时间才能完成转换?
我没有经验SNTP 解决方案,因此假设它们在这方面与成熟的 NTP 没有什么不同。对于前者,它使用两个交钥匙限制:用于步进的 128 毫秒和用于锁定和回转的 500 ppm(496 至 512 ppm)。这意味着最大允许偏移 128 毫秒将在 250 秒(4.17 分钟)内以 512 ppm 的最大转换速率得到补偿。然而,实际上,这可能需要稍长的时间,因为当接近目标时间时,转换速率逐渐降低——降至计算的定期校正速率。
有没有办法轮询系统并向我提供转换仍在进行中的反馈?
尝试stockntptime
实用程序:它直接查询内核,即使ntpd
不运行也可以工作。当然,前提是内部adjtime()
调用ntp_adjtime()
,但我不确定。
答案2
man adjtime
.
.
.
If the adjustment in delta is positive, then the system clock is
speeded up by some small percentage (i.e., by adding a small amount of
time to the clock value in each second) until the adjustment has been
completed. If the adjustment in delta is negative, then the clock is
slowed down in a similar fashion.
因此,内核将每秒管理一次时间调整,调整的大小取决于传递struct
给adjtime(3)
调用的值的大小。有趣的是 Linux 使用adjtimex(3)
基于 RFC1305(NTP 版本 3)的方法,第 5 节详细介绍了如何管理时间偏差。