有哪些软件可能会受到时间跳跃的严重影响?

Cec*_*lia 25 chrony

慢性文档警告

注意:某些软件会受到系统时间跳跃的严重影响。(这就是 chronyd 通常使用 slewing 的原因。)文档

但文档没有给出示例。有哪些软件会受到严重影响?操作系统或任何后台进程是否面临风险?

Rom*_*nov 32

这是一个悬而未决的问题,但让我举一些例子:

  • 数据库 - 大多数数据库都依赖大量精确的时间来存储记录、索引等
  • 安全性 - 精确的时间对于安全性非常重要,可以将操作映射到时间和间隙或时间重复是不被接受的
  • 数字签名 - 通常签名文档的一部分是时间戳,因此错误的时间可能会使签名无效
  • 调度软件 - 可以根据时间跳跃方向跳过或重复两次作业。
  • 集群软件 - 可能任何集群都需要同步,一个或多个节点的任何跳跃都可能产生不可预测的结果。

  • 诸如 cron 和 [xcron](https://github.com/cubiclesoft/xcron) 之类的任务调度软件可能会受到系统时间剧烈波动的影响。常规 cron 特别容易受到影响,因为它可以根据时间移动的方向跳过正在运行的脚本或多次运行脚本,而多个 cron 替换程序会跟踪已运行和已错过的计划。 (11认同)
  • 此外,任何进行集群协调的事情。Zookeeper、consul、etcd...这使得_集群数据库_特别敏感;作为一个极端的例子,Google 的 Spanner 的设计假设每个位置都有原子钟(或等效的 GPS)。 (3认同)

小智 13

我最近遇到了一个可以追溯到 1999 年的 bug,它影响 JVM 和 Android 运行时:https://bugs.java.com/bugdatabase/view_bug.do ?bug_id=4290274

...当使用scheduleAtFixedRate() 安排任务后一分钟将系统时钟设置为提前时,会(意外地)触发两次额外的执行。

我使用的设备以 1970 纪元作为当前时间,然后稍后收到正确的网络时间。有时,第 3 方库会在设置时间之前初始化,导致其经历 50 年的时间跳跃。

结果是scheduleAtFixedRate试图赶上大约 50 年的调用量……这大约是 2700万次连续调用,中间没有任何延迟。

这会导致 GC 失控,并且通常会导致系统陷入困境,直到重新启动为止


Gun*_*ohm 9

所有与真实硬件交互的软件。如果你有一台烤面包 20 秒的烤面包机,而且它的软件愚蠢到可以对照挂钟,那么如果你在等待烤面包时纠正时钟,你要么会得到白面包,要么会烤焦。

实际上,控制任何类型工业设备的所有应用都需要精确的计时,例如“打开阀门 5.3 秒以获得正确的流体量”。偏差超过几毫秒就会毁掉你的产品。

使用电机定位任何物体的应用程序将使用步进电机(速度较慢)或末端开关来确定何时停止。但通常情况下,您不会在每个重要位置都有一个开关,因此您将执行一些“xm/s 表示 A 毫秒,然后 ym/s 表示 B 毫秒”的逻辑。现在想象一下,当这个逻辑运行时,您的 NTP 守护进程将时间调整甚至一毫秒......

  • 如果内容精确到毫秒,那么您需要时间跳跃。旋转会使时钟在很长一段时间内不准确。时间跳跃只会把你搞砸一次。 (3认同)
  • 所有此类软件*应该*编程为使用不跳跃的单调时钟。但这并不意味着它是。 (3认同)
  • @user253751:单调时钟允许跳跃(但只能向前)。;你想要稳定的时钟 (3认同)