分布式时钟

对于分布式系统来说,时钟分为逻辑时钟物理时钟两种。物理时钟对应的是我们真实世界的时间,一般由操作系统提供,而逻辑时钟则一般被实现为一个单调递增的计数器

在分布式系统中,可以通过事件发生的实际时间判定其先后顺序,物理机设备可以通过附加时间戳的方式来表示事件发生的时间,将这样的时间表示其称为物理时钟(Physical Clock)。在单机系统中,物理时钟的大小可以用来准确描述事件在当前物理机发生的先后关系。然而,对于不同的物理机,其采集的物理时钟可能存在差异,即使采用 NTP 对各个设备的物理时钟进行同步,也有可能发生毫秒级的偏移。因此,在分布式系统当中,很难找到全局时钟用于描述该系统中事件的先后顺序,用物理时钟决定分布式系统中事件的先后顺序很难获得最准确的结果。

1978 年,Lamport 最早提出了逻辑时钟的概念[1],并提出了一种定义逻辑时钟的方式,用于定义分布式系统中事件的先后顺序。该方式将事件分为三种类型,分别为内部事件、接收事件、发送事件,并分别为这类事件附加逻辑时钟。在 Lamport 定义的模型中,每个事件都会对应一个逻辑时钟时间戳,该时间戳初始值为 0。当事件发生在节点内,时间戳加 1;如果该事件为发送事件,时间戳加 1 并且附加在发送消息中;如果该事件属于接收事件,时间戳更新为取本地时间戳与消息中的时间戳中的最大值并加 1。最终,通过收集各个节点之间的时间戳获得全局的事件关系。在整合全序关系时,如果某对事件拥有同样的时间戳数值,则按照该事件发生的节点标识进行定序。不过,Lamport定义的逻辑时钟只对存在确定先后关系的事件进行了定义,不能处理并发[2]的事件。

在逻辑时钟的基础之上,为了解决并发事件,向量时钟[3]得以提出。向量时钟与逻辑时钟的更新方式类似,不同的是,每个节点都需要维护一个向量,来记录包含它自身在内所有节点的逻辑时钟。在发送消息时,该向量需要包含在消息里。在接收消息时,将自身的逻辑时钟加 1,然后将向量中的其余项都与消息中的时钟进行比较,以更新为当前观测到的最大值。经由此方式,可以获得每个事件对应的向量时钟。如果对于两个事件,比较它们的向量时钟,如果其中某个向量的每项都比另一个大,则表明该向量对应的事件先发生。如果向量中部分项更大,部分项更小,则表明这两个事件为并发关系。向量时钟本身也是逻辑时钟的一种延申,其主要用于将并发事件加入全局到顺序,并根据具体业务通过相应方法解决数据冲突。后来出现的版本向量(Version Vector),也是一种向量时钟的实现形式。

从逻辑时钟开始,我们找到一种在分布式系统定义全局顺序的方式。时钟为分布式一致性问题提供了有效的工具,在后来的共识算法研究中,大多围绕如何获取到一致的逻辑时钟展开研究。

分布式时钟是EtherCAT技术亮点之一,其精准同步使得整个系统都运行在统一的时钟下,每个EtherCAT从站的同步性远小于1 us。本文将介绍引入分布式时钟同步的原因并阐述三种同步模式。

由于EtherCAT系统中可能存在各从站时钟计数不一致的现象,为了精确地控制从站设备何时接收输出数据和何时提供输入信息,确保数据传输的准确性和实时性,EtherCAT设备系统需要实现时间同步,而引入分布式时钟可以有效解决EtherCAT系统时钟同步问题。

EtherCAT 网络中各个从站之间时钟计数不一致的原因

  • 时钟偏移:由于各个站点启动顺序不同,初始化流程不同,导致各个从站本地时钟开始计数的时间不一致。

  • 时钟漂移:受温度,物理特性等因素影响,各个时钟的晶振频率并不完全一致,因此随着运行时间的增加,原来一致的时钟也会逐渐产生偏差。

时钟偏移和时钟漂移的解决思路

1. 针对时钟偏移采取偏移补偿法

  • 记录主站时间并广播一个锁存各从站时钟的报文;

  • 依次读取各从站被锁存的时间,计算其他从站与第一个从站的时间差;

  • 将各个从站的时钟差值附加到从站的本地时钟上。

2. 针对时钟漂移采取漂移补偿法

  • 在从站中选择第一个支持分布式时钟功能的从站时钟作为参考时钟;

  • 在位移补偿之后,主站在每个周期中对参考时钟的时钟计数执行单读单写(RMW)的指令,读取其时间并广播到其他从站中;

  • 其他从站将自身的时间与接收到的参考时间进行对比,动态调整计数器的加值。

分布式时钟的三种同步模式

1. Free Run模式

每个从站的定时周期都不一样,在每个定时周期来到的时候,每个从站将执行自己的程序,检查通道上有没合适的输入数据,如果有合适的数据就令其有效,并放到对应的同步管理器通道上等待主站取走。如图1所示,其中T1为本地微处理器从ESC复制数据并计算输出数据的时间,T2为输出硬件延时,T3为输入锁存偏移时间。

缺点:Free Run模式下,由于每个从站的时钟快慢不一致,所以没有任何同步性可言。

                                         图1 Free Run同步模式

2. SM同步机制(Sync Manager同步管理器)

SM指的是同步管理器同步,当数据帧在到达对应的从站的时候,会触发一个叫同步管理器事件的信号,当从站接收到这个信号的时候,会进行中断服务例程(即中断保存当期任务,去执行插入的中断例程)。换言之,SM同步模式是根据数据帧到达特定从站的时候触发的SM事件信号来进行同步。

缺点:对于特定的帧来说,它到达每一个从站的时间必然不同,当系统很庞大的时候,每个从站接收到数据帧的时间会相差很大,越在后边的从站接收到数据帧的时间越晚,同步性效果越差。

                                                      图2 SM同步模式

3. DC同步机制

这种模式就是高精度的时间同步模式。如图3所示,数据帧在SYNC信号提前T1时间到达,从站在SYNC事件之前已经完成数据交换和控制计算,当接收SYNC信号后立即执行输出操作,从而提高了同步性能。可以理解为某个从站数据帧到达后不立即处理,因为有些从站还没接收到数据,等待一个指定的时间,和其他从站一起处理数据,这时候能够达到较好的同步效果。

                                                          图3 DC同步模式

  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值