引言
实时系统有很高的实时要求,抖动必须要在一定的范围内。在某些隋况下,无法满足这一要求会导致严重的损害。其他还有软实时要求,例如,优化能效等,这虽然不会带来严重的失效,但是,对于长期工作仍然非常重要。
不论怎样,重要的是理解某些系统体系结构在实时循环延时、抖动和其他需求方面的实时响应。很多系统设计人员最初认为实现“非OS”或者“裸机”系统会比较简单,比全OS更陕。但是,随着当今系统中应用处理器的出现,并非如此了。在速度极高功能很强的应用处理器上运行应用程序,运行RTOS实际上要比裸机实现的响应时间更好。选择哪一种呢?本文介绍了不同OS实现的响应时间。开发了一个实时“DataMover”应用实例,测试不同的实现,产生了一些很有意义的结果。
实时系统需求和挑战
一个典型的工业控制应用包括实时任务和非实时任务。实时任务处理外部中断,通过寄存器轮询或者中断服务来实现,这发生的时间在10几个微秒,例如,响应中断,移动与每次中断相关的数据,进行计算,在下一次中断发生之前返回结果等。为保证实时响应,抖动不能超过几微秒。通常,用户希望把所有实时处理分给一个内核,更直接的进行控制,希望进一步提高性能。非实时任务一般包括看护任务、网络和用户接口。在大部分这些系统中,处理器内核之间很少会共享外设,但是需要共享某些公共存储器缓冲,以便同步、通信或者显示数据。
很显然,还有其他需求以保证能够成功的推出电子产品。这些需求从简单的编程开始。能够使用简单、成熟可靠的解决方案对多核处理器进行编程是高效能和项目进度的关键。降低风险也很重要。风险的形式包括已知风险和未知风险。重要的是通过工程实践消除已知风险,减小未知风险。需要辅助系统支持来方便的进行编程,降低风险。辅助系统很显然能够帮助用户受益于大众的智慧,对于ARM,就是其开发社区。
最后,为保证设计能够迅速的采用功能更强大、内核更多的处理器,可以借鉴全球开发人员社区的软件创新,重要的是设计能够在硬件和软件上支持移植,这通常意味着在抽象的操作系统之上进行编程。
测量实时性能
实时响应时间和抖动容限要求是大部分实时设计决定的关键因素。实时响应时间一般以系统处理一次中断,在下一次中断到达之前完成所有必须的计算实时循环时间来表示。如
实时循环时间变化很大,从软件实时系统的Ims到实时系统的10几微秒,或者高性能硬核实时系统的一个微秒。由于实时要求代表了大部分设计决定,因此,实时循环时间被用作评估不同系统体系结构性能的指标。
进入Altera SoC
半导体集成功能已越来越高,Altera Cyclone V SoC同时集成了高性能应用处理器和FPGA,如图2所示。
这种组合使用户能够更加灵活。可以在集成应用处理器,FPGA阵列中例化的软核处理器,或者FPGA架构状态机上运行函数。但是,提高了灵活性也带来了挑战――怎样利用更多的功能,同时处理好复杂度,这对于系统划分带来了更大的压力,在时间和工程资源效率方面尽可能发挥硅片的最大能力。
Altera SoC上的SMP和AMP
如图3所示,SoC硬核处理器系统(HPS)中的双核ARM CortexA9处理器与使用ARM MPCore技术密切相关,采用了经典的对称多处理(SMP)硬件配置。目前很多ARM辅助系统软件提供商成熟可靠的软件解决方案支持在这一平台上实现非对称多处理(AMP),包括具有内核相关或者内核保留功能的SMP等方法,使得AMP系统编程与单核CPU编程一样简单。本文后面介绍的对称多核系统经验数据(图5、6、7和8)表明,采用定义好的编程方法,例如,内核相关和线程锁定等,一般要优于每一内核单独编程。通过采用标准、成熟的解决方案,用户能够同时获得性能、效能、系统可靠性和未来可扩展等优势。
在芯片级,SoC代表了异构多核系统,定义硬件配置AMP。在FPGA中实现一个或者多个软核处理器、硬件加速器或者其他定制计算单元,可以采用Altera SoC“随意”实现非对称多处理,比固定SoC更加灵活。FPGA非常实际的应用是在实时处理中增加双核A9群。
实时应用实例
为获得不同实时OS配置对象评估的数据,我们升发了一个买时应用买例。这一基准测试应用设计用于展现实时应用的特性。系统运行在AlteraCyclone V SoC开发板上,采用了双核A9群和FPGA。有一个DMA小设计,运行在FPGA上,和A9群一起工作,与FPGA传送数据。这一设计被称为“DataMover”设计。
系统接收来自FPGA的中断。每次中断时,某些数据从FPGA发送给HPS进行处理,涉及到一些计算,之后,结果被写回到FPGA中。仿真中断处理、数据传送,以及把数据返回FPGA的任务一起被称为“实时任务”。测量往返循环时间和抖动,以指示系统的实时响应。
采用中断服务例程,通过中断轮询来处理中断。系统还有很多非实时任务,由操作系统不断产生斐波那契数列进行仿真。
这一应用软件按照以下方式来实现,对比三种不同软件配置的结果:
软件体系结构1:Linux SMP
在SMP中运行Linux,采用内核相关模式,在双核A9群的两个内核中。
内核l:使用DataMover传送数据,处理中断。
内核0:空闲或者忙于运行连续斐波那契数列,仿真非实时任务。
以轮询或者中断服务例程的形式处理中断。
软件体系结构2:VxWorks SMP
在SMP中运行VxWorks,采用内核相关模式,在双核A9群的两个内核中。
内核l:使用DataMover传送数据,处理中断。 内核0:空闲或者忙于运行连续斐波那契数列,仿真非实时任务。
以轮询或者中断服务例程的形式处理中断
软件体系结构3:裸机单核
只在一个内核中运行裸机模式
内核l:使用DataMover传送数据,处理中断。
内核0:没有用于表示“最佳情形”环境(没有开销或者缓冲管理)
以轮询或者中断服务例程的形式处理中断
系统体系结构
参考硬件设计如图4所示。
在这一系统中,FPGA中实现的片内RAM存储的数据被用于进行仿真。很容易改变数据规模以便研究数据规模和DMA工作效率时间的关系。
从DMA工作开始仿真中断处理,可以由DMA控制器本身,CortexA9处理器,或者实时控制单元启动(在这个例子中,使用了Nios II软核处理器)。DMA把数据从FPGA移动到HPS片内RAM。
双核A9群的第1个内核被配置为轮询片内RAM,查看是否出现新数据,如果有,它会把数据复制到私有存储中,把结果复制回存储器。在需要微秒级实时响应的系统中,适合采用轮询模式工作,这是因为它更具有确定性,只占用了部分中断处理时间。还通过中断服务例程(ISR)来处理数据,并进行了对比。
实时控制单元会和定制DMA调度知识产权(IP)一样简单,也有可能像软核处理器系统那样复杂。这可以是固定功能硬件状态机,只知道怎样排列和安排DMA逻辑,这些逻辑采集FPGA中产生的数据。这也可以是软核逻辑处理器等,在FPGA中实现,运行软件算法以确定数据怎样流入和流出FPGA。本文收集的数据使用了基于软核Nios II处理器的设计。
通过DMA把数据从HPS存储器移回FPGA来完成仿真的实时循环。
软件应用实例
参考硬件设计使用了以下操作系统版本:
Linux LTSI v3. 10
VxWorks v6.9
裸机使用硬件库(SoC嵌入式设计套装14.0中的HWLIB)作为基础。
应用实例基本上运行连续实时数据申请、处理和返回循环。输入数据通过FPGA至HPS桥接,以高速缓存一致性访问的方式,从FPGA发送至A9处理器。以下是应用程序的伪代码:
Wlule(l){
Real_input=Requestadata();//申请来自FPGA的新数据
While(kevtoken(real_input)!=expectedtoken);//等待新数据有效。我们在每一数据中嵌入了令牌,知道新数据是否有效。
Request_data_back(real_out);//申请将结果送回FPGA
测试结果
使用了标准效能计数器来采集总循环时间。由于是纳秒级的测量,为适应计数器粒度的变化,每一结果都是100次测量的平均。
不需要开发特殊的IP来实现这种策略。
软件体系结构1:LinuxSMP
空闲Linux系统的结果,内核l采用轮询或者中断服务例程(ISR)方法来处理实时任务,而内核0空闲,如图5所示。
繁忙Linux系统的结果,内核l采用轮询或者中断服务例程方法来处理实时任务,而内核0计算斐波那契数列,如图6所示。
结果是可预测的,繁忙或者空闲Linux系统看不出明显差别。轮询的确产生了稍好一些的总响应,而轮询和ISR的抖动都相对较高