摘要:随着航空技术、计算机软硬件技术的高速发展,航电综合系统的高精度时钟同步越来越重要.针对多总线分布式实时监控系统要求各设备高度时间同步的问题,本文在分析国内外已有时钟同步算法的基础之上综合考虑了传输时延、时钟偏移误差及网络排队时延,并将实时监控流量带来的网络抖动现象作为重要因素引入到同步算法中,设计了基于TSC的高精度软时钟服务机制,提出一种基于航电总线的分布式实时监控系统时钟同步算法CSA-RTMS,并详细分析了误差范围等性能.实验结果表明,与传统的NTP同步协议相比,该同步方法精度更高,同步效率快,而且受网络抖动影响小.
关键词:多总线监控;时钟同步;高精度时钟;排队时延
引言
随着网络与计算机的高速发展,高精度时钟同步越来越重要.尤其是在基于网络的分布式控制环境下,若时钟不同步很难协同完成信息的共享与控制.同步算法直接影响到分布式实时监控系统的准确性.在基于航电总线的分布式实时监控网络环境下,没有高精度的时钟同步,实施网络数据与事件的监控回放是非常困难的.
时钟同步方法主要分为两类:一是采用具有硬件支持的IEEE1588协议,即高精度时钟同步协议[1];二是采用纯软件协议实现的网络时钟同步协议NTP(NetworkTimeProtocol).硬件支持的IEEE1588协议的精度可以达到微妙级,但是需要较高的硬件成本投入[2];另一方面IEEE1588设计时考虑了硬件的实现,协议本身在设计时采取了相对简单的措施,因此若没有特别的硬件支持,在局域网环境下同步效果不是很好[3].NTP协议不需要特制硬件支持,但是它的精度一般处于毫秒级[4,5],且主要针对广域网与局域网范围内的联网机制同步,对于小范围内局域网来实施NTP不仅消耗系统资源大而且达不到微秒级[4,5].通常不能满足网络环境下实时监控的需求.
针对软时钟同步问题,很多学者开展了深入的研究工作.典型工作有:Moon等人提出了时钟频率偏移的线性规划预测模型,相比传统方法精度有了一定的提升[6].SveinJohannessen等人分析了误差来源,提出了一系列针对时钟偏移的改进方案,可使同步精度控制在次微秒级[7].DominiqueFober等人在此文献[7]基础上提出了一种时钟重置情况下实时计算频率偏差方法[10].赵应等人研究发现Moon提出的线性模型对时延变化、网络抖动引起的斜率变化考虑不足,并提出了基于拟合偏差的时钟偏差计算算法[11].DarrylVeitch等人深入分析了软件时钟偏移的原因后,运用PC自带的时钟寄存器TSC(TimeStampCounter)作为时钟源取代传统的晶体振荡器时钟源,TSC具有的高效性、稳定性、鲁棒性,彻底解决了晶体振荡器的不稳定性带来的误差,将软件时钟同步精度带入微秒时代[10].黎文伟等人运用TSC寄存器高精度测量网络时延,从而达到了很好的时钟同步效果[11].TianSongGuo等将Moon的线性规划模型与TSC高精度时钟源相结合,在局域网空载情况下能够实现10us的高精度同步,但由于未曾考虑排队时延、传输抖动以及系统噪声带来的误差[12],所以仍存在性能提升空间.
现有的研究工作虽然已经取得了很好的成绩,但是综合考虑到分布式实时监控系统运行时网络负载较重,网络设备会出现较严重的排队时延和传输抖动等原因,实时监控系统在不使用额外硬件的情况下要达到高精度时钟同步仍有一定的困难.
本文针对以上问题,参照文献[12]引入TSC作为稳定时钟源,设计了基于TSC的高精度软时钟服务模块以提供稳定的时钟服务;进一步研究工作参考文献[11]改进了CPU频率估算方法,使其适合Windows系统应用环境.然后,根据监控系统实时流量的不确定性建立模型,提出了适用于基于航电总线的实时分布式监控系统的时钟同步算法CSA-RTMS,并详细分析了误差范围等性能.最后通过实验验证了其同步效果误差等性能.
时钟同步方法
基于TSC的软时钟服务
高精度时钟同步方案依赖于高精度、低误差的时钟服务.通用PC自带两个时钟源:硬件时钟和软件时钟(或称为系统时钟).软时钟是调度系统任务和用户任务的计时依据.它依据定时器中断计数来完成计时.定时器中断通过将标准石英晶体振荡器(quartzoscillator)频率为1.19318MHz的输出信号除以100Hz产生.故软件时钟分辨率较差,仅为10ms[11,13,14].因而软时钟服务通常难以满足实时系统的同步要求.因此需要构建稳定的时钟服务.
TSC寄存器是Intel奔腾系列CPU独有的64位计数器.在系统启动时计数器清零.之后,每过一个时钟周期自动增加1,其数值可以通过rdtsc汇编指令等方法读出.作为时钟使用,TSC寄存器的时钟分辨率取决于CPU频率.若CPU频率为fCPU,则TSC时钟分辨率为1/fCPU.
基于TSC的时钟服务可提供:初始时间、CPU频率、计数值、当前时间、调用周期补偿等5个外部接口,以及时间偏差、频率漂移两个内部接口.通过接口可以便捷的获取高精度时间.各种时间的获取方法和符号定义如下:
1) 初始时间获取:读取系统提供的时间,记为t0.
2) 计数值获取:读取时间戳计数器(ReadTimeStampCounter,RDTSC)指令,记为c.
3) CPU频率获取:采用相对时间测频法获得,记为fm.
4) 当前时间获取:根据初始时间值t0,利用TSC当前计数值、CPU频率以及时间偏差等计算出系统当前相对时间记为tc.计算方法为:tc=t0+θ+c/fm+tcom.如果当前时间偏差未失效,则可利用频率漂移计算系统当前相对时间.计算方法为:tc=t0+(1+ρ0)*c/fm+tcom,其中θ为时钟偏差,tcom为调用周期补偿,fm为CPU测量频率,其中ρ0为当前时钟漂移率.
以TSC寄存器为时钟,可达纳秒级的时钟分辨率,计时精度高;另一方面,读取TSC寄存器计数值只需1条汇编指令,节省开销,进一步减小了时钟误差[11].
CPU频率估算
采用基于TSC软时钟服务计时,最关键的问题是如何精确地估计CPU频率或时钟周期.因为CPU频率可能受温度变化、芯片老化等因素的影响而小幅抖动,必须对其进行周期性估算.
精确估计CPU频率需要有高精度的时钟源作参考.文献[11]提出了基于NTP服务器的网络测频方法,该方法需要有标准NTP服务器的支持,估算过程也较为复杂,不符合实时监控系统的应用要求.CPU频率的估算需要有精确的时间间隔,文献[12]提出了linux平台下使用Intel8254PIT(ProgrammableIntervalTimer)来估计CPU频率的方法.此种方法虽然应用简洁方便,但是由于兼容性问题,将其移植到windowsxp平台下是困难的.因此,我们考虑通过使用IntelPerformanceCounter计数器来精确定时,其定时误差精度要求不超过0.5us.我们在VC6.0的开发环境下使用QueryPerformanceCounter和QueryPerformanceFrequency获取该计数器的计数值和频率.计算法方法为:分别在计数器定时开始和定时结束记录TSC值以及计数器的计数值,那么由于计数器频率已知,则可计算出CPU频率的一次估值,重复执行以上过程100次,取平均值可以得到CPU的频率估算值.
NTP协议的对时算法
NTP协议所采用的对时过程如图1所示,CA(t)表示节点A在t时刻的软时钟时间,CB(t)表示节点B在t时刻的软时钟时间.
可以看到δ、θ只与t2和t1时刻各节点软时钟的差值以及t3、t4时刻软时钟的差值相关,而与t3、t2时刻B节点的软时钟差值无关,即结果与时钟源节点处理所需要的时间无关.据此,客户机即可通过这四个时间戳计算出时间偏差和网络时延.NTP协议假设节点交互过程中时延是相等的,但是由于网络时延波动影响很大,有时假设可能不成立从而影响到同步精度.NTP协议在此过程的基础上加入了数据滤波算法,过滤掉时延较大的同步包,其主要思想是每隔固定时间重复对时过程,选择CA(t4)、CA(t1)差值最小的一组数据,并根据式(1)和式(2)计算δ、θ,此过滤算法有效的减轻了网络时延波动带来的影响,并且过程简单而有效,本文采用此过程测量网络传输延时。
基于航电总线的分布式实时监控系统时钟同步算法(CSA-RTMS)
算法动机
上文说明了在windows平台上构建基于TSC的稳定时钟源的方法,并介绍了NTP协议使用的对时算法及其改进方法.文献[11、12]在已有时钟同步算法基础上使用基于TSC的稳定时钟源提出了新的时钟同步算法,在空载的局域网上取得了高精度的时钟同步效果.但是分布式实时监控系统所监控的流量具有不固定的特点,航电总线上的实时数据、视频数据在采集后通过以太网进行传输,会引起网络设备交换时产生很大的排队时延和传输抖动,使得上述文献中的算法条件不成立,以至达不到精度要求.于是先我们建立基于网络的分布式数据流模型,然后根据不同流量制定自适应的同步方法,以满足基于航电总线的分布式实时监控系统的同步需求.
算法描述
针对发现的问题,我们为监控系统建立了数据流模型,并通过对数据流模型的分析,根据数据流量自适应使用不同的同步策略,降低了排队时延和传输抖动带来的影响.
根据监控系统数据流特征,本文将监控得到的数据流量分为两种:
1) 实时监控流量,主要包含的实时采集分发数据,数据流量大且不固定;
2) 周期性网络流量,主要包含同步数据包以及以太网的相关维持包,数据流量小且固定.
基于网络的分布式数据流模型如图2所示.已有的时钟同步算法[6-12],主要基于这样的假设,即数据包的往返时延是相等的,但在实际系统中当实时流量到来时,有可能会阻塞网络造成往返时延的不确定性,此时会出现两种情况:第一,时钟同步算法的假设就不成立,其结果是引入了很大的同步偏差;第二,同步算法"挂起"一直等到负载较小时,继续执行同步算法,其结果是时钟同步效率低,不能适应实时监控的要求.

本文在算法中加入了一个判断机制,如果实时流量为零或者很小,那么执行同步算法纠正时钟偏移并记录频率偏移;如果实时流量很大且带来了较大的往返时延(RTT),那么各同步节点将参照频率偏移自行纠正时钟偏移.虽然改进的NTP协议在同步过程中加入了数据滤波算法,但是当流量异常时,时钟同步耗时必然偏长且不准确.我们的设计可巧妙的避开实时监控系统中随机不定的实时流量带来的同步误差,稳定了时钟同步效果.
针对实际系统中不确定的大实时流量对网络造成的间断性高延时从而对时钟同步产生影响的原因,我们在同步算法中引入自适应机制,针对两种网络流量,自适应的实施不同的同步策略,从而达到良好的同步效果.在基于航电总线的分布式环境中,要实现实时监控系统中的同步,必须确定时钟同步服务器即同步源.对于时钟同步源的选取文献[15]给出的ChangeandRobert'sAlgorithm是一个很好的解决方案.
本文提出的同步算法分为两个阶段,描述如下.
I.准备阶段:
联网的各节点运行基于TSC的软时钟服务.采用主机选择算法,在网内选择CPU性能最好的主机作为时间同步服务器S.
II.实施阶段:
Step1.网内各节点(node)运行融合的CPU频率估算算法,并将实测频率记录到软时钟内.
Step2.服务器S使用NTP协议的同步算法循环多次请求各个node的时间,使用数据滤波算法选择CA(t4)、CA(t1)差值最小的一组数据,根据式(1)(2)计算δi和θi.
Step3.判断每个节点的延时情况,若δi在容忍范围内,则
其中,Ttolerate为时延最大容忍值,超过此容忍值则说明网络阻塞严重,时延具有不确定性.Send()主要向各节点发送相关的指令和数据,节点再收到指令后,各节点存储相应数据到时钟服务程序,并记录修改时间.Calculate()是对文献[6]中对频率偏移的估算算法的封装,返回值为频率偏差.
误差分析
实验
实验环境
实验主要目的是测试本文提出的CSA-RTMS同步算法的精度以及比较CSA-RTMS与基于NTP的时间同步的性能.
系统配置为Windowsxpprofessionalsp2,IntelPentium4处理器,主频3.20GHz,内存1GB,100Mbps网卡.实验环境的网络拓扑结构如图3所示,同步算法从联网的各设备和监控平台中选择CPU及主存性能最好的机器作为同步服务器.联网各设备的运行基于TSC的软时钟服务程序.
两种时间同步的偏移量比较如图4、5所示.实验读取了500次的同步偏移量,图中横坐标表示读取同步偏移量的次数.在网络空载情况下系统没有收发监控数据,基于NTP的时间同步的偏移量在-1ms~1ms之间波动;本文提出的CSARTMS算法在100us~100us之间波动,体现了高精度时钟读取的优越性.由于windows操作系统本身的实时性能不足,其自身的时钟读取耗费时间,操作系统线程调度时间等不可控因素,因此若在实时操作系统(如VxWorks)下,性能将更好.
图6为系统出现实时监控流量时,两种同步方案的同步误差.很明显在系统监控流量到来时,NTP协议同步数据包多且受到排队时延等网络抖动因素影响使得同步更新缓慢,造成时钟同步误差直线上升.
本文设计的算法在受到大流量影响时,通过历史数据进行时钟偏移频率估算,可节省不必要的同步包所占用的带宽,而且将同步的误差控制在一个波动很小的范围内,达到预期效果
结论
时钟同步算法直接影响到分布式实时监控系统运行的准确性和实时性.本文在分析了国内外已有同步算法的基础上,针对分布式总线实时监控系统要求各设备高度时间同步的问题,设计了基于TSC和NTP的高精度软时钟服务模块,并提出了时钟同步算法CSA-RTMS,该算法综合考虑了实时监控流量带来的网络抖动、排队时延等现象.本文对CSA-RTMS进行了误差分析,且通过实验测试了算法的同步精度,并与基于NTP的同步算法进行了性能比较.实验结果表明:CSARTMS可有效的降低了随机实时监控流量所带来的影响,同步精度更高,效率更快.
针对基于航电总线的分布式实时监控系统的同步需求本文设计了CSA-RTMS同步算法,经验收测试已达到系统设计要求.但研究工作采用Windows平台,所以同步精度很难再提高.因此,本文下一步工作计划将CSA-RTMS移植到实时间性好的VxWorks系统平台下,并探索复杂网络环境下高精度时钟同步的新方法.
第三届中国民用航空机载与软件大会
参会、预定展位
请扫描上方二维码
更多咨询请联系我们
AIMME | 杨女士
T : 021-62201806
M : 189 6441 7669

