Hongyi Chen

I am a Phd candidate. Currently study in NUDT, Changsha, China.

Navigation
 » Home
 » About Me
 » Projects
 » Github
 » XML Feed

TTE 系统详解之时钟

18 Apr 2019 » TTE

时钟

在TTE系统中,最重要的就是时间同步,本系列文章将逐步由浅入深介绍相关概念和技术,首先介绍的是时钟。在许多工程模型中,时间作为一个独立的变量决定了系统状态序列的先后顺序。时间的度量以物理秒的度量为参考。

在一个典型的实时应用中,分布式系统并行的执行不同的功能,例如,监测环境的状态变量,运行控制算法等。这些不同的功能通常由不同的节点执行,另外,分布式系统中还引入了冗余节点来容错。为了保证整个分布式系统的行为一致性,必须确保所有的节点使用相同的顺序来处理所有的事件,最完美情况下,处理顺序与事件发生的顺序保持一致。这时就需要一个全局的基准时钟通过给事件打时间戳的方式来建立这种一致的时间顺序。

下面将逐步介绍时钟相关的概念、全局时钟以及时间戳,最后对这个时间戳的精度进行分析。

与时钟有关的概念

  • 数字物理时钟(digital physical clock) :它是一种测量时间的装置,包含一个计数器和一种周期性增加计数器技术的物理震荡机制。这个周期性的事件称为时钟的微拍(microtick)。
  • 时钟粒度(granularity):两个连续的微拍之间的持续时间称为时钟粒度。假设一个时钟的震动频率为$10^{15}$microtick/s, 那么这个时钟的粒度则为1飞秒(fs,$10^{-15}$s)。
  • 时长(duration):两个事件的发生的间隔时长则通过计算这两个事件之间微拍的次数来测量。那么给定一个时钟,其粒度则可以通过本时钟两个微拍间隔期间参考时钟的微拍计数来度量。
  • 物理时钟漂移(drift):该时钟与参考时钟的频率比。如下图所示,时钟的震动频率与参考时钟存在偏差,而且偏差随着时间的增加而增加。

一个完美的时钟的时钟漂移率为0,而在现实中,时钟会受到环境的影响,比如温度、电压、晶振的老化等,时钟的漂移是不可避免的。通常来说,时钟的漂移率根据晶振的质量而定,一般每秒最大时钟漂移在$10^{-2}$sec和$10^{-7}$sec之间。比如Fox Electronics公司的型号为K135晶振,其精度为20 ppm(part per million),则其每秒的时钟漂移为$2x10^{-5}$s s;由于晶振的老化,每年会有+/-3 ppm 的漂移;随着温度的变化,也大概会造成0.04 ppm/($\Delta^{\circ}c$) 的漂移。正由于有时间漂移的存在,所以时钟是不可能永久同步的,在运行一段时间后,总会出现偏差。

全局时钟

在分布式的系统中,如果每一个节点的时钟都能与参考时钟完全同步,并且为所有事件打上时间戳,则很容易测量任意两个事件之间的间隔或者重建事件的时间顺序。但在每个节点都有自己的本地时钟的松耦合系统中,如此紧密的时钟同步是不可能的。因此,在分布式系统中,引入了一种较弱的全局时钟(Global Time)的概念。

假设存在一组节点,每个节点都有自己的时钟,所有的时钟都以时钟精度 $\Pi$ 进行同步,即任意两个时钟之间的差值小于 $\Pi$。同步以后,我们则可以选择各自本地时钟的微拍子集来作为各自全局时钟的本地实现。例如,本地时钟在实现全局时钟时,每10个微拍(microtick)选一个微拍作为全局时钟的拍(tick)。如果全局时钟的时钟粒度(granularity)大于时钟同步精度$\Pi$,那么我们认为这个全局时钟是合理的。此全局时钟的合理性选择条件决定了同步误差的上限为一拍(全局时钟的一拍),即分布式系统中的任一节点的本地时钟认定某一事件发生的时间差小于一拍。这一拍的差距是因为同步误差的存在,系统总会出现这样一种情况:时钟$j$增加了一拍,然后事件$e$发生了,随后时钟$k$才增加了一拍。在这种情况下,时钟$j$和$k$给事件$e$打的时间戳则相差一拍。

由于有一拍误差的存在,因此若两个事件的时间戳仅仅相差一拍,我们是无法知道其确切的先后顺序的。如果我们要知道两个事件的先后顺序,那么这两个事件的时间戳需要至少相差两拍。当我们测量一个事件持续时长时,其测量误差也会增加到2拍的时长,这是由于开始和结束的误差均为一拍,两者相减后即误差加大为2拍。

在我们后续的文章中,将继续介绍TTE相关概念以及核心技术。