使用交互式汇聚实现容错的时钟同步的系统和方法

文档序号:6622759阅读:212来源:国知局
专利名称:使用交互式汇聚实现容错的时钟同步的系统和方法
发明的领域本发明与计算机同步领域相关,特别是,与在一个使用汇聚技术的网络上的为了同步多个节点的系统和方法相关。
任何同步的实现都需要尽可能的可靠。然而,越可靠的同步实现,通常其实现的技术也就会越复杂。
例如,已有的同步算法是基于通过被广播消息的本地时间戳的交互式校正的概念。同步算法不得不推断某个远端节点时钟与一个被选出的,全局性一致的时钟之间的差距。这一方法,虽然被证明是容错的,但他也自然而然的复杂和占用较多资源。
另外,实现同步算法主要通过在某个节点上处理器的软件在此节点的硬件上加以需求。节点可能被要求使用高质量的硬件,借此实现同步算法来维持同步过程的高可靠性。这一高质量的要求极大的增加了整体实现的成本,而且,有时,没有必要去执行网络上的某些特定功能。
如此,存在对同步方法的需求,此方法应该可以实现网络节点的同步,此网络要有足够的功能在减少实现复杂性和降低对硬件高标准要求的同时确保可靠的同步。
网络的同步在一种称为冗余管理系统(RMS)中实现,此系统在网络中利用通用通信技术作为接口与一种域可编程门阵列(FPGA)相连接实现同步算法。本发明也利用了一些通信协议的功能,如IEEE1394,来定时地公布他们的本地时钟,这样便形成了一个分布式的,全局性的数据库也简化了同步过程。此算法利用交互式校正技术实现了一个全局性一致的时钟。
根据本发明的一个实施例,描述了在网络中同步节点的方法,包括步骤广播网络中每个节点时钟值;确定一个被选定的时钟值是基于被广播的一组时钟值;比较每个时钟值来决定哪些节点与其他节点同步;重置每个节点的时钟到被选出的时钟值;设置标志位标明哪些节点已被同步。
根据本发明的另一实施例,描述了一种用于同步一个网络中节点的系统包括一个为广播此网络中每一节点的时钟值到此网络中所有其他节点的时钟广播器;一个为确定基于被广播的一组时钟值而被选中的时钟值的时钟投票器;一个为设置此网络中每一个节点的时钟值为被选中的时钟值的时钟设置器;一个未存储被广播的每个时钟值的时钟计时器的阵列;一个为基于存储在阵列中的时钟值决定哪些节点被同步的时钟比较器;和一个为指明已被同步节点的同步指示器。
根据本发明的另一实施例,描述了一种同步网络中的节点的设备,包括一个与网络中每个节点相关的通信接口,该接口能够广播相关节点的时钟值,也能够接收被广播的时钟值;与每个节点相关的多个逻辑门;逻辑门被安排成使其能够决定一个被选出的时钟值,此值是基于一组时钟值,他们被广播和安排成来通过对比时钟值决定哪些节点被同步;和一个与每个节点相连用于存储标明每个节点同步状态标志位的寄存器。
图2是本发明的一种说明性的实施例的功能性组件的图表。
图3是描述与本发明的一种实施例的同步过程的流程图。
节点之间的通信总线103能利用如IEEE1394的通信协议,此协议在本发明中可被利用。IEEE1394是一种以100,200,或400兆位每秒(Mbps)的速度传输数据的硬件和软件标准。一项IEEE1394通信协议有用的功能是它能定时地广播节点的本地时钟。
图2描述了一种与我的发明一致的且包含了

图1所示的冗余管理系统105的一部分的系统201说明性的体现方式的功能性组件。与我的发明一致,所有的系统201的结构性元素由域可编程门阵列实现。
系统201有一个时钟接受器模块203,此模块接受由网络中其他节点广播的时钟值。时钟接受器模块203存储每个时钟值到一个计时器,此计时器对应于一个特定节点。此时钟接受器模块203位网络中所有节点维持一个时钟计时器204的阵列。一旦被存储,每个时钟值按此节点的内部时钟频率递增。
此系统201还有一个选举模块205,此模块决定将被用于网络中所有节点的正确的时钟值。选举模块205对阵列中的时钟计时器应用一种投票算法,此算法处理被投票时钟值的到达时间。每个节点对此决策应用相同的算法。由于每个节点将会从网络中其他节点接收同样的时钟值且应用相同的算法,每个选举模块205将得出相同的选出的时钟值。
投票算法使用一种容错重者选择算法。选出的时钟是集合Xf极值的平均值,如以下等式所示mid(X)=max(Xf)+min(Xf)2.]]>集合Xf并不需要阵列中所有的时钟值。通过投票发生的时间,时钟值集合可被限制在那些与其他节点同步的节点的时钟之内。在最初的循环里,所有的节点都被潜在的包括在集合中。在确定一些网络中节点被同步后,仅有哪些节点会在投票算法中被考虑。
另外,错误值可被排除在操作集之外。以下的公式描述了被使用的时钟值集合的构成。|X|≥max(2,3f),Xf=reduce(X)集合X中有很少的时钟值大于或等于两个时钟值之一或集合中错误时钟值的数量的三倍的大者。错误的时钟值是由错误表达其时钟值的节点和与其它时钟值有较大差异的节点发出的时钟值。由集合X中删去错误的极值后形成了缩减的集合Xf。
系统201有个时钟设置模块207,它直接与节点时钟交互。时钟设置模块207能获得此节点的时钟值且广播时钟值到其他节点。时钟设置模块207也可设置此节点的时钟值为被选出的时钟值。
一个同步探测器模块209页是系统201的一部分。同步探测器模块209比较时钟值已决定同步状态和管理标出是否一个节点已于其他节点同步的标志位。
同步是基于由有限个不可分的时间片段(tick)组成的原子周期的概念上。原子周期决定了同步间隔,时间片段的数量决定了同步的精确性。可做的最小的时钟调节是一个时间片段,因此一个原子间断中时间片段的数量决定了同步的振动(jitter)。
有一个同步周期且因此每个原子间断有一个时钟调节。同步稳定性完全由石英振荡器驱动的本地计时器的准确性和被广播的时钟的滞后所确定。
当一个节点的同步探测器模块209决定此节点与其它至少一个节点同步时,此节点的时钟被重置为一个初始值(典型值为0)且同步探测器模块209设其“IN_SYNC”标志位为真值。当时钟之间不相同时,这两个节点是不同步的,时钟由硬件计时器的时间片段测量,其他节点时钟少于一个应用程序相关的时间片段允许值。
图3描述了流程图,此流程图描述了同步网络中各个节点的被发明出的系统的操作。第一步301中,每个节点将广播他的时钟值到所有其他节点。在步骤301中,每个节点将接收其他节点的时钟值。
每隔一段时间会广播时钟值到其他节点。此时间间隔要足够长以允许所有节点的时钟值被广布和接受。此被发明的系统利用IEEE1393协议的功能定时地广播节点的本地时钟。虽然本地时钟被按照IEEE1394协议过一段时间后广播,被广播的时间是由被发明的系统控制的,因为此系统设置节点本地时钟,设置时引发广播。随着每个时钟值的广播,每个节点广播其同步标志位。如果公布在第一次是一成功,同步标志位被设为假。
在从其他节点接收到时钟值和同步状态后,下一步303将计算被选出的时钟值。投票通常在每个原子间断中间附近进行。然后,每个节点重置其时钟值为步骤305种选出的时钟值。
步骤307中,每个节点对比所有网络中节点的时钟值以决定同步状态。要被比较的时钟值是那些已存于相应计时器中的值,而不是在步骤305中被调整的时钟值。通过比较这些存储的值,每个节点能决定哪个网络中节点已同步于时钟计时器。
图3中简述的步骤被不断的重复以确保同步。通过限制被选出的时钟是由相互同步的节点的时钟值决定的时钟值的集合,每个步骤循环将使被选出的时钟值与大多数节点的时钟值相一致。
图3中步骤的细节可通过一种叫FPGA的硬件实现。通过用一种分离的硬件系统实现同步过程,每个节点处理器的质量需求不很高就可达到足够完成网络的主要目的水平。
在FPGA上实现同步过程可由在门阵列上编写的如下功能模块实现。
<pre listing-type="program-listing"><![CDATA[FUNCTION{1}Synchronize()SYNC_TIME tick_pos;COUNT in_sync;tick_pos=REMAINDER(g_local_clk,SYN_PREC);IF{1}(tick_pos.EQ.PERIOD_START) IF{2}(g_first_to_sync.EQ.TRUE) g_local_clk=STARTING_CLOCK _VALUE; g_first_to_sync=FALSE; END IF{2} g_in_sync_flag=g_next_sync_flag; IF{3}(g_listen.LT.LISTEN_TIME) INCREMENT(g_listen); END IF{3}ELSE IF{1}(tick_pos.EQ.SYNC_RUN.AND.g_rcvd[OWN_NID].EQ.  AS_RCVD.AND.g_listen  .EQ.LISTEN_TIME) Reset_Sync_Flag(g_local_clk); Compute_Clock(); TEMPORARY COUNTi=0; TEMPORARY SYNC_TIME delta; in_sync=0; WHILE{1}(i.LT.NUM_NODES)  g_rcvd[i]=NOT_RCVD;  delta=Get_Delta(g_global_clks[i], g_global_clks[OWN_NID]);  IF{4}(delta.LE.SYN_TOL)   INCREMENT(in_sync);  END IF{4}  INCREMENT(i); END WHILE{1} IF{5}(in_sync.GE.2)  Set_sync_Flag(g_local_clk);  IF{6}(g_nodes_in_sync.NE.0)   g_next_sync_flag=IN_SYNC;  END IF{6} ELSE{5}  g_next_sync_flag=NO_SYNC;  g_first_to_sync=FALSE; END IF{5}END IF{1}END FUNCTION{1}FUNCTION{2}Get_Delta(SYNC_TIME clkl,SYNC_TIME clk2)RETURNSSYNC_TIMEReset_Sync_Mag(clk1);Reset_Sync_Flag(clk2);RETURN ABSOLUTE_VALUE(clk1-clk2);END FUNCTION{2}FUNCTION{3}Compurte_Clock()SYNC_TIME local_delta,voted_clk;SYNC_TIME in_sync_clk_array[NUM_NODES];COUNT msgs_rcvd,in_sync_msgs_rcvd,i,j,k;BOOLEAN_FLAG is_in_sync=NO_SYNC;i=0;j=0;k=0;msgs_rcvd=0;in_sync_msgs_rcvd=0;WHILE{1}(i.LT.MAX_NODES)  IF{1}(g_rcvd[i].EQ.WAS_RCVD)  IF{2}(Test_Sync_Flag(g_global_clks[i]).EQ.TRUE)   in_sync_clk_array[k]=Reset_Sync_Flag(g_global_clks[i]);   INCREMEMT(k);   INCREMENT(in_sync_msgs_rcvd);   If{3}(i.EQ.OWN_NID)  is_in_sync=IN_SYNC;   END IF{3}  END IF{2}  clk_array[j]=Reset_Sync_Flag(g_global_clks[i]);  INCREMENT(j);  INCREMENT(msgs_rcvd);  END IF{1}  INCREMENTT(i);END WHILE{1}IF{4}(in_sync_msgs_rcvd.GE.2)  IF{5}(g_nodes_in_sync.EQ.0.AND.is_in_sync.EQ.IN_SYNC)  g_first_to_sync=TRUE;  END IF{5}  g_nodes_in_sync=in_sync_msgs_rcvd;  SORT(in_sync_clk_array);  IF{6}(in_sync_msgs_rcvd.EQ.4)  voted_clk=(in_sync_clk_array[1]+in_sync_clk_array[2])/2;  ELSE IF{6}(in_sync_msgs_rcvd.EQ.3)  voted_clk=in_sync_clk_array[1];  ELSE IF{6}(in_sync_msgs_rcvd.EQ.2)  voted_clk=(in_sync_clk_array
+in_sync_clk_array[1])/2;  END IF{6}ELSE{4}  SORT(clk_array);  IF{7}(msgs_rcvd.EQ.4)  voted_clk=(clk_array[1]+clk_marray[2])/2;  ELSE IF{7}(msgs_rcvd.EQ.3)  voted_dk=clk_array[1];  ELSE IF{7}(msgs_mvd.EQ.2)  voted_clk=(clk_array
+clk_array[1])/2;  ELSE IF{7}(msgs_rcvd.EQ.1)voted_clk=clk_array
;  ELSE IF{7}(msgs_rcvd.EQ.0)   voted_clk=local_clk; END IF{7}END IF{4}local_delta=voted_clk-g_local_clk;g_Local_clk=g_local_clk+local_delta;END FUNCTION{3}]]></pre>此代码用以下的协定被写为块结构的伪代码·语言的关键字和相关的操作符是大写字符,且被用courier粗体字样表示。
·常数是大写,且被用courier字样表示。
·注释由双斜线(//)开始,一直到本行的结束,且被用courier斜体字样表示。
·全局变量如g_local_clk中,由一个g-作为前缀。
·流程控制声明为了可读性用花括号括起的数量值注释(也就是IF{1}(表达式)开始一个IF流程控制声明,END IF{1}结束此声明)。
·语言操作符如下SORY(array)排序排列,生成array[n]<=array[n+1]...REMINDER(A,B) 返回A/B的余数ABSOLUTE_VALUE(A)返回A的整数绝对值INCREMENT(A)递增A,也就是A=A+1A.EQ.B 判等,返回真值在A等于B时A.NE.B 判不等,返回真值在A不等于B时A.LT.B 判小于,返回真值在A小于B时A.GT.B 判大于,返回真值在A大于B时A.LE.B 判小于或等于,返回真值在A小于或等于B时A.GE.B 判大于或等于,返回真值在A大于或等于B时A.AND.B 逻辑与,返回真值在A∧B时A.OR.B 逻辑与,返回真值在A∨B时伪代码的第一部分定义了常数,特殊类型和全局变量声明。这一部分中的注释描述了每个声明的目的。CONSTANT TRUE=1; ∥布尔真值CONSTANT FALSE=0; ∥布尔假值CONSTANT SYN_PREC=1000;∥每原子间断的时间片断个数CONSTANT PEROD_START=0;∥原子间断边界的∥时间片断计数CONSTANT STARHNG_CLOCK_VALUE=0;∥初始操作集的∥时钟起始值CONSTANT SYNC_RUN=SYN_PREC*0.10; ∥原子间断中的∥同步功能延迟CONSTANT NUM_NODES=4; ∥系统中节点个数CONSTANT LISTEN_TIME=2;∥原子间断中开始时∥的监听时间CONSTANT OWN_NID=HDWR_SETTTTNG;∥由硬件strapping设定?EQUIVALENCE WAS_RCVD TRUE; ∥判WAS_RCVD为布尔真值EQUIVALENCE NOT_RCVD FALSE; ∥判NOT_RCVD为布尔假值EQUIVALENCE IN_SYNC TRUE ∥判IN_SYNC为布尔真值EQUIVALENCE NO_SYNC FALSE; ∥判NO_SYNC为布尔假值TYPE SYNC_YIME IS INTEGER32BITS; ∥时钟类型(32位)TYPE BOOLEAN_FLAG IS UNSIGNED1BIT;∥一个bodean flagTYPE COUNT IS INTEGER32 BITS; ∥一个整型count(21位)SYNC_TIME g_local_clk=0; ∥本地节点计时器SYNC_TIME g_global_clks[NUM_NODES];∥时钟数据库BOOLEAN_FLAG g_first_to_sync=FALSE; ∥指出此节点是∥第一次操作∥集中的成员BOOLEAN_FLAG g_in_sync_flag=FALSE; ∥此节点同步BOOLEAN_FLAG g_next_sync_flag=FALSE; ∥此节点将在下一个∥原子间断边界同步BOOLEAN_FLAG g_rcvd[NUM_NODES]=FALSE;∥指明时钟消息∥已由某节点接收COUNT g_nodes_in_syncc=0; ∥此节点认为已同步∥的节点数COUNT g_listen=0; ∥起始延迟计数器本发明不仅限于在特例中描述的优先选用的例子。另外的优点和更改是在以下权利要求的范围和精神中,优点和更改较容易由本领域中的技术人员由对实例的考虑和本发明的实践推出。
权利要求
1.一种同步网络中节点的方法,包括步骤在网络中广播每个节点的时钟值;基于所广播的上述时钟值的集合确定一个被选出的时钟值;比较每个节点的时钟值以确定哪些节点相互同步;重置每个节点的时钟为上述的选出的时钟值;和设置标志位以标明哪些节点被同步。
2.权利要求1的方法,其中上述时钟值的集合包含被所述标志标明为被同步的节点。
3.权利要求1的方法,其中上述确定步骤在一个域可编程阵列上实现。
4.权利要求1的方法,其中上述广播步骤在一个域可编程阵列上实现。
5.权利要求1的方法,其中广播,确定,重置,比较和设置步骤被连续重复。
6.权利要求1的方法,其中上述广播步骤通过通信协议IEEE1394实现。
7.权利要求1的方法,其中上述网络中的每个节点分别执行上述广播,确定,重置,比较和设置步骤。
8.权利要求1的方法,其中上述确定步骤使用中值投票算法。
9.权利要求1的方法,其中上述比较步骤在一个域可编程阵列上实现。
10.权利要求1的方法,其中上述设置步骤在一个域可编程阵列上实现。
全文摘要
描述了一种利用交互式汇集技术同步网络中的节点的方法。在步骤301,该技术利用通信协议IEEE 1394广播每个节点的时钟值至网络中的其它节点。在步骤303,每个节点使用投票算法设置广播时钟值确定选举的时钟值。在步骤305,每个节点的时钟被设置到选举的时钟值。在步骤302,当节点的时钟值与另一个节点的时钟值接近时,该节点被认为是同步的。用于确定选举的时钟值的时钟值集合包含被同步的节点的时钟值。该技术由与节点硬件分开的硬件实现并且可在场可编程门阵列中实现。
文档编号G06F13/00GK1409837SQ00816892
公开日2003年4月9日 申请日期2000年10月3日 优先权日1999年10月8日
发明者T·G·罗登三世 申请人:联合讯号公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1