摘要:
将MIPS体系结构的处理器应用在数控系统上,可以降低系统的成本,增强数控系统的国产化水平.但不同的硬件结构会对实时操作系统的调度抖动产生不同的影响,而运动控制器的调度抖动是数控系统的重要性能指标之一.本文讨论了MIPS平台上运动控制器的调度抖动的测试方法,分析产生抖动的原因,并针对这些原因对系统进行了优化.最终测试结果表明,在MIPS平台下,RTAI的调度抖动能够满足数控系统的需要.
1 前言
目前,国内外的数控系统大多采用X86体系结构的CPU,主要是因为X86体系结构上拥有丰富的应用软件,开
发环境和技术积累,可以在一定程度上缩短数控系统的开发周期.但X86体系结构也有其自身的缺点,比如其指令集体系结构过于复杂,成本高.而且X86技术一直被国外的几家大公司所垄断,将其应用在数控系统这样的战略资源上,存在一定的安全隐患.
M1PS体系结构具有灵活开放,成本低的优点,在工业控制、网络、通信、多媒体娱乐等领域得到了广泛的应用.我国已经研制出了具有自主知识产权的MIPS通用CPU.因此将MIPS结构的CPU应用在数控系统上,不仅可以降低数控系统的成本,还增加了数控系统特别是高档数控系统国产化的水平.
实时操作系统是数控系统的软件基础,数控软件中的运动控制器部分需要实时操作系统对其进行周期性的调度,对
实时操作系统的性能要求很苛刻.一般来说,应用于数控系统中的实时操作系统需要具有高实时性,时间确定性以及高可靠性,安全性和容错性⋯.
在硬实时操作系统中,主要是依靠时钟硬件产生的中断对周期进程进行调度.虽然时钟可以精确的给出定时中断,但硬件和操作系统的运作方式会对中断响应和进程调度产生影响,从而使周期进程每次开始执行的时间变的不确定,这就是调度抖动.调度抖动直接影响到数控加工的精度,如果数控系统的加工速度为10米/分钟,那么5O微秒的抖动就可能产生约8.3微米的随动误差.针对特定的体系结构研究与分析运动控制器的调度抖动,对掌握并改善数控系统的性能具有重要的意义.
RTAI(Real Time Application Interface)是由意大利米兰理工学院航天工程系发起开发的一个遵循GNU GPL的开源项目,RTAI已经支持i386,MIPS,PowerPC,ARM 和M68k-~ommu等处理器,是目前支持处理器最多的linux实时解决方案之一.RTAI具有丰富的功能和良好的硬实时性能.本文针对数控系统的运动控制器,讨论了在MIPS平台上RTAI操作系统的调度抖动测试,并分析了产生调度抖动的原因.
2 抖动测试
2.1 抖动测试方法
在本文中,用于测试的硬件平台是龙芯2E处理器,主频为664.32MHz.该处理器拥有64KB的一级缓存和512KB的二级缓存.系统内存为256M.
本文在抖动测试中采用了内部软件测试技术:记录运动控制器的第一条指令每次执行的时间戳,并存储在共享内存中,在测试完毕后,再读取共享内存中的数据以供分析 】.时间戳从CPU内部的高精度计时器获取,它是一个32位的寄存器(cp0L9 ),每个指令周期自动加1,类似于pentium系列CPU上的TSC(Time Stamp Count) .可以使用MFC0指令读出该计时器的值.但32位的计时器在664.32MHz的主频下,每隔6.47秒就会发生一次翻转,因此需要对得到的数据进行溢出处理.本文处理方法是维护一个64位的虚拟计时器:
union{
unsigned long long tsc;
unsigned long hltsc[2];
}tsc;
该结构将一个64位的长整型变量分成了两个32位的长整型变量,低32位用来获取计时器的值,高32位在计时器溢
出时加1,这样就得到了一个虚拟的64位的高精度计时器.在664.32MHz的主频下,64位的计时器需要880年的时间才会发生一次翻转.可以采用下面的函数读取虚拟计时器csc的值:
inline unsigned long long rdtsc(void)
{
unsigned long count;
一
asm
一 volatile一(”mfcO/t%0, $9/n/t“ :”=f”
(count));
tsc.hltsc[1]+=(count tSC.~tscf0]=count;
return tsc.tsc;
}
在MIPS中,CP0协处理器中的11号寄存器可以作为实时时钟使用.11号寄存器又称为compare寄存器,它用来在
特定的时刻产生一个中断,该寄存器被写入一个初值后,便不断的将此值与计时器中的值进行比较,一但二者相等,便触发63号中断 3.因此MIPS CPU的定时精度可以达到纳秒级.
2.2 数据分析
通过上述方法获得的时间序列是一个递增数列,相邻两个元素之问的差值即是运动控制器的实际周期.为了尽可能
的减小测试误差的影响,本文采用最小二乘法对时间序列进行拟合,得到时间序列的一条最佳逼进线,使用这条最佳逼进线来计算各周期的名义值 J.时问序列中的每一个元素与最佳逼进线之间的差值就是各个周期的调度抖动.
图1是在正常负载下,前100个测试点与最佳逼进线的偏离值.刚开始的几个点反映了较大的抖动,其中最大的抖动达到了228微秒.这个现象是正常的,因为运动控制器在刚开始运行的时候没有将指令和数据加载到cache中,相应的页表也没加载到TLB(Translation l_x~okaside Buffer)中,因此会不断发生cache失效异常和TLB重填异常,这加重了系统的负担,并延迟了运动控制器的执行.从第40组数据以后,抖动趋于平稳.在后面的测试中,均将前100组数据舍弃,从而可以更好的统计一般情况.
RTAI提供了两种调度模式,分别是单触发模式(oneshotmode)和周期模式(periodic mode) .在单触发模式下,在每次执行调度函数时,系统都需要根据当前的情况重新计算下次触发定时中断的时间,并对定时器进行编程.而周期模式只在时钟初始化的时候对定时器进行编程,以后便始终依赖这个固定的时钟周期进行调度.单触发模式下,系统的负担较重,会在一定程度上影响系统的性能.本文分别在单触发模式和周期模式下测试了运动周期的抖动.
在单触发模式下,调度中加入了补偿,如果上一次的调度被延迟了,那么下次便会提前调度,以消除调度抖动的累积.比如上次的实际周期为2010微秒,那么下次的实际周期就应该是1990微秒.图2是在10000组测试样例中抽取的100组数据,从中可以看出,所有的测试点均以标准值为中心对称分布,反映了上面描述的调度方法.单触发模式下最大抖动为23.476微秒,平均抖动为414纳秒.
周期模式下的调度没有补偿,实时进程不会提前执行,因此调度抖动会在每次调度的时间戳上累积.由于硬件定时器的定时周期在运动控制器的执行期间是固定的,抖动的下限是0.图3(见下页)是从10000组样例中抽取的100组数据.在所测的10000组数据中,所有元素均为正值,抖动的最大值为73.8微秒,平均抖动为3.298微秒.周期模式下的平均抖动时间是单触发模式下的8倍.单触发模式的调度虽然较精确,但需要耗费大量的cpu时间,加重了系统的负担,在硬件性能较差的环境下,其性能可能会低于周期模式.因此,在选用调度模式时,需要针对特定的硬件平台和软件环境进行抖动测试 .
3 抖动产生的原因分析
RTAI采用了2种调度算法,分别为单调速率算法和最早时限优先算法.本文采用的是单调速率算法,因为该算法基于
静态优先级,能够保证最高优先级进程的稳定调度-6j.调度程序每次选择的进程总是优先级最高的进程,在同等优先级的各进程之间则采用时间片轮转的方法进行调度.在数控系统的所有进程中,运动控制器的优先级最高,因此,我们只需要研究高优先级的进程产生抖动的原因即可.根据RTAI的调度机制,运动控制器可以抢占其他进程,并且不会被其它任何进程抢占,因此没有进程可以延迟运动控制器的执行.但是存在其它因素可以延缓它的执行,比如总线上锁,关中断,中断嵌套,资源竞争,cache失效,以及操作系统中存在不可抢占的关键区域等.在设计良好的实时系统中,不可抢占的临界区很少,且运动控制器几乎不需要内存以外的其他资源,能够对运动控制器产生影响的主要因素只有关中断,中断嵌套和cache失效.
前面已经介绍过了cache失效会在运动控制器刚加载时对调度抖动产生影响,实际上在运动控制器的运行过程中,其他的非实时进程,如图形显示,网络访问,磁盘读写等都会影响cache,从而间接的影响运动控制器.为了降低cache失效对调度抖动的影响,可以尽量减少除数控软件以外的其它程序的运行.比如使用TinyX代替具有图形加速功能的XServer前面已经介绍过了cache失效会在运动控制器刚加载时对调度抖动产生影响,实际上在运动控制器的运行过程中,其他的非实时进程,如图形显示,网络访问,磁盘读写等都会影响cache,从而间接的影响运动控制器.为了降低cache失效对调度抖动的影响,可以尽量减少除数控软件以外的其它程序的运行.比如使用TinyX代替具有图形加速功能的XServer
RTAI的进程调度是由硬件时钟的定时中断驱动的.图4简略地说明了从时钟给出中断,到运动控制器开始执行的过
程.这个过程包括,系统关中断的时间,中断准备时间和中断处理时间.在关中断的时间内,系统不能对其他任何优先级的中断进行响应,所以时钟中断必须等待,直到系统开中断.中断准备阶段是指,从CPU开始响应时钟中断到进入时钟中断的处理程序所需要的时间,中断处理阶段是指执行中断处理程序rt—timer—handler(),即调度程序所需要的时间 J.中断准备时问和中断处理时间在特定的系统上是固定的,只有几微秒的时间,而且在我们的测试方法中不会对测试结果产生影响.单从时钟中断处理的过程来看,调度延迟主要取决于系统的最大关中断时问 J.在本文的测试平台上最大关中断时间为13.24微秒.
现代操作系统均允许中断嵌套,以便及时响应紧急的中断.那么在中断准备和中断处理阶段,时钟中断的处理有可能被其他的中断抢占,这也会对运动控制器的抖动产生影响.为了降低这种影响,应该尽可能的减少系统中的中断数量,这样不仅可以降低时钟中断被抢占的可能性,也可以降低系统的负载.在数控系统中,由于不需要大批量的读写磁盘数据,不需要电源管理,可以将DMA,APM 和ACPI禁用.这些设备会产生大量的中断,并频繁的对总线上锁.如果该数控系统无需网络通信,也可以将网络禁用.
在禁用了上述设备后,本文在单触发模式下,对运动控制器的调度抖动进行了重新测试.最大抖动为8.02微秒,平均抖动为392纳秒.最大抖动接近没禁用设备以前的1/4.图5是10000组测试样列的散点图.从图上可以看出大部分的测试点都分布在微秒内,这样的抖动在数控系统中是可以接受的.当数控系统以10米/分的速度加工的时候,8微秒的抖动最多能产生1.3微米的随动误差.
4 总结
对实时系统而言,调度抖动是不可避免的.调度抖动的大小与硬件体系结构和操作系统的运作方式密切相关.在数控系统中,大的调度抖动会对加工精度产生影响.本文针对M1PS平台,在不同的调度模式下测试了运动控制器的调度抖动,并采用最小二乘法对结果进行了分析.实验表明,在该数控系统中,周期模式下的平均抖动是单触发模式的8倍多.在数控系统中,可能引起抖动的因素有cache失效,系统关中断以及中断嵌套等,本文针对这些因素对系统做了优化,禁用了DMA,APM,ACPI等与数控系统的运行关系甚微的设备,并将具有图形加速功能的X Server替换成了对资源占用很小的Tiny X.结果在单触发模式下,最大抖动可以缩短到原来的四分之一,平均抖动也有所改善.测试结果证实,在MIPS平台下,RTAI完全能够满足数控系统的需要.
评论
查看更多