《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > WindowsCE.NET中断延迟测试与分析

WindowsCE.NET中断延迟测试与分析

2009-06-08
作者:姚连喜1,樊 强2,周井泉1

    摘  要: 嵌入式系统对实时性能一般要求较高,中断延迟是评估嵌入式操作系统实时性能的重要指标。利用ILTiming测试工具对WinCE4.2和5.0进行中断延迟测量,分析了导致中断延迟的原因,同时针对PXA255处理器的BSP提出了测试WindowsCE系统中断延迟的方法。 

    关键词: Xscale PXA255;WindowsCE;实时性;中断;ILTiming

 

    实时系统计算结果正确与否,不仅取决于计算逻辑的正确性,还取决于计算所消耗的时间,即如果不能满足系统的时间限制,同样会认为系统失败。自1986年以来,通用汽车动力公司(GMPTG)在制造应用中实施的OMAC(Open ModularArchitecture Controller)技术方面一直处于领先地位,并且还促成了OMAC用户群的形成。在对很多应用进行评估后发现,大多数系统(95%)需要1 ms或稍长的周期,1 ms周期允许的变化幅度为10%,即100 μs。大部分满足要求的工业自动化应用是由从一台机器发出的外部信号驱动的,此信号以中断形式发送给硬实时应用。这使OMAC抖动重新定义为针对不超过100 μs的中断服务线程(IST)延迟的时间限制,其余被评估的应用使用计时器创建其周期,这就需要一台抖动不超过100 μs的1 ms计时器。因此,OMAC定义提出的设计和测试要求为:IST延迟不超过100 μs;1 ms计时器的误差时间最长为100 μs。 

    实时系统由满足系统要求的硬件(HardWare)、操作系统(OS)和应用程序(Application Program)组成。WinCE是一款实时操作系统,具有比桌面Windows更好的实时性、可靠性和安全性。目前,在中国市场上应用比较广泛的WinCE系统主要有4.2和5.0两个版本。Intel Xscale PXA255微处理器是Intel针对嵌入式高端应用推出的高性能ARM微处理器,以PXA255为基础构建的嵌入式平台能够满足实时系统的硬件要求。在硬件平台Compulab开发板(一款以色列Compulab公司开发的以PXA255为处理器的开发板)上,通过ILTiming测试工具测试WinCE4.2和5.0的实时性能的重要指标——中断延迟时间。实验结果表明,中断延迟时间与微处理器(MPU)频率成反比关系,与系统负荷成正比关系,并且在恶劣的情况下,WinCE4.2和5.0均能满足实时系统要求。 

1 硬件平台设计 

    硬件平台主要以Intel XScale PXA255处理器为核心,外围主要集成了以太网控制器、SDRAM、NOR FLASH、NAND FLASH、CompactFLASH、PS/2鼠标键盘控制器、两个USB主接口、音频麦克控制器和电源管理等模块,并通过PXA255处理器本身的接口功能实现三个串口、一个从USB接口、触摸屏和LCD显示屏等。其中Intle Xscale PXA255是一种技术先进的高性能嵌入式处理器,其内部采用Xscale核心,性能比ARM9内核更加优越,频率最高可达400 MHz。该内核扩充了许多DSP指令,极大地提高了多媒体的处理能力,同时还提供了LCD(液晶显示器)控制器、无线局域网802.11b、蓝牙、高速红外、USB等多种功能模块的支持。图1是以Intel XScale PXA255处理器为核心的硬件平台系统设计框图。 

 

 

    在完成电路板上基本硬件的测试后,根据实际硬件的需要分别针对WinCE4.2和5.0操作系统开发了板级支持包BSP,经测试后,WinCE4.2和5.0系统各项硬件功能均能正常稳定工作。BSP开发是嵌入式系统开发移植的重要工作之一,但不是本文研究的重点,在此不作介绍。 

2 WindowsCE中断机制及中断延迟测试原理 

    由微软倡导的中断处理模型,希望用户尽可能在任务级通过中断服务线程(IST)处理中断。IST和中断服务例程(ISR)通过一个事件对象链接在一起。当中断发生时,经ISR处理后,立即向内核返回一个中断标识符,内核针对此中断标识符设置相应的事件,直到相应事件通知的IST在内核设置这一事件后,才开始进行WindowsCE中断处理。 

    能够在指定的时间内实施中断是内核实时性能最重要的特性之一。中断延迟主要是指软件中断处理延迟,即从外部中断到达处理器直到中断处理开始之间的时间间隔。如果不发生分页操作,WinCE中断延迟时间将被限制在内存中锁定的线程,这样就可以计算最恶劣情况下的延迟时间。 

    根据WinCE中断处理机制,中断延迟可分为ISR延迟和IST延迟[5]。 

    ISR延迟时间是从IRQ在CPU中被设置时到ISR开始运行时的时间。以下三个与时间相关的变量会影响ISR的启动: 

    (1)中断在内核中关闭的最长时间。内核很少关闭中断,但如果将它们关闭,则关闭的时间长度会受到限制。 

    (2)在内核调度中断和ISR被实际调用之间的时间。内核使用该时间确定要运行什么ISR,并保存在继续之前必须保存的任何寄存器。 

    (3)在ISR返回到内核和内核实际停止处理中断之间的时间。这是内核通过还原在ISR被调用之前被保存的任何状态(例如寄存器)来完成ISR操作的时间。 

    正在测量的ISR的启动时间可以基于系统中其他中断的当前状态进行计算。如果中断正在进行,则计算要测量的新ISR的启动时间必须考虑到两个因素:所关注的中断已经发生之后将发生的较高优先级中断的数量及执行ISR所占用的时间。下式说明了所得到的启动时间: 

     

其中,NISR是在所关注的中断之后发生的较高优先级中断的数量;TISR(N)是执行ISR所需要的时间。图2示意了该公式。 

 

 

    如果没有发生较高优先级中断(NISR=0),则式(1)将简化为以下的代码示例: 

    Start of ISR=A+B 

    Windows CE内核和OEM(Original Equipment Manufacture)都会影响执行ISR的时间。Windows CE控制变量A、B和C,它们都会受到限制。OEM控制NISR和TISR(N),它们都可以极大地影响ISR滞后时间。 

    IST延迟时间是从ISR完成执行(即通知线程)到IST开始执行的时间。以下四个与时间相关的变量会影响 IST的启动时间: 

    B:内核调度中断和ISR被实际调用之间的时间。内核使用该时间确定要运行什么ISR,并保存在继续之前必须保存的任何寄存器。 

    C:在ISR返回到内核和内核实际停止处理中断之间的时间。这是内核通过还原在ISR被调用之前保存的任何状态(例如寄存器)来完成ISR操作的时间。 

    L:KCALL中的最长时间。 

    M:调度线程的时间:在ISR返回到内核并且内核执行某些工作以开始执行IST之后最高优先级IST开始的启动时间。在ISR返回并通知IST开始运行之后,IST启动时间受所有ISR的总计时间的影响。 

    式(2)说明了所得到的启动时间,图3示意了该公式。 

 

 

     

    Windows CE内核和OEM都会影响执行IST所需的时间。Windows CE内核控制变量B、C、L和M,它们都是受限制的。OEM控制NISR和TISR(N),它们可以极大地影响IST滞后时间。WindowsCE.net对IST添加了以下限制:链接ISR和IST的事件处理只能用在 WaitForSingleObject函数中,防止ISR-IST事件处理被用在WaitForMultipleObjects函数中,这意味着内核可以担保触发事件的时间和释放IST的时间有一个上限。 

    ILTiming利用系统时钟的溢出作为外部中断。系统时钟ISR程序由硬件抽象层(OAL)完成,ILTiming则作为IST运行,所以实现ILTiming测试只需要对OAL进行特定的修改,而不需要修改内核,OAL可以很容易改编,并可运行在任何OEM平台上。 

    测试ISR延迟的原理如下:设系统时钟初值为al,ISR在开始时刻读取系统时钟的值为a2,系统时钟的计数频率为f,ISR延迟时间为tisr,则: 

    tisr=(a2-al)/f 

    测试IST延迟的原理如下:将系统时钟默认值的每隔n个滴答,通知SYSINTR_TIMING中断标识符事件。ILTiming应用程序的主线程等待SYSINTR_TIMING中断事件,因而变成IST。在ISR完成那一刻设定一个时间戳t1,在IST开始时刻设置第二个时间戳t2,IST延迟时间为tist,则: 

    tist=(t2-t1)/f 

    针对PXA255处理器的处理器支持包(CSP),在WinCE4.2中按照上述方法,利用操作系统时钟匹配寄存器0(OSMR0)产生系统时钟滴答测试IST;在WinCE5.0中,利用OSMR2作为一个额外开启的定时器2(定时时间长度为n个滴答的时间)测试IST。两种方法虽然利用的OSMR不同,但测试IST的原理相同。 

3 实验测试方法及测试结果分析 

    作为一款嵌入式实时操作系统,其关键是WindowsCE能否达到硬实时操作系统的要求。为了观察系统的整体性能,测试并计算了ISR和IST中断延迟的平均值。另外,ISR和IST出现最大值是操作系统中断延迟最恶劣的情况,需特别关注。 

    测试方案分成三种: 

    (1)在没有后台任务运行的情况下测试中断延迟,这里只保留系统正常运行时最基本的中断,不对系统进行额外操作,无持续运行的中断源。持续运行的中断源由LCD显示屏显示DMA中断、桥接芯片IT8152固定中断和时钟中断。这是测试环境最简单的一种测试方式,也是具备基本工作能力下测得最小中断延迟的方式,为今后的测试提供了一个比较基准。 

    (2)为了观察系统运行有后台任务时对中断延迟的影响,可在系统存在额外负荷的情况下测试中断延迟的变化情况。 

    (3)为了观察其他中断源对测试中断延迟的影响,可人为加入其他可控制频度的中断源。 

3.1 无后台任务情况下中断延迟测试 

    通过对PXA255设置cpuclock的方法得到100 MHz、200 MHz、300 MHz和400 MHz的不同主频,分别测得ISR和IST延迟最大值和平均值,得到从100 MHz~400 MHz的ISR和IST延迟的最大值和平均值的变化趋势(如图4所示),ISR为延迟平均值,IST为延迟平均值。 

 

 

    测试结果分析:从整体上看,WinCE4.2和5.0的测试结果有相同的规律,随着MPU主频的增加,ISR和IST延迟都会减少,而且呈近似线性递减的趋势。但是ISR下降的速度要比IST缓慢,可见MPU主频的变化对ISR的影响相对较小,ISR的延迟主要由内核决定;而IST延迟的变化就比较明显,可见MPU主频对IST的延迟影响较大。造成IST延迟的三个因素中,如果忽略第一个因素(因为恢复寄存器的时间很短),则KCALL执行最长时间和调度IST线程时间就由MPU主频决定,即MPU主频越高,执行KCALL的速度就越快。由于在KCALL执行过程中要禁止调度器,这样调度器被禁止的时间就会缩短,因此IST延迟随着MPU主频的增加而减小。综上所述,上文归纳的造成ISR和IST延迟的原因是正确的。 

    在文献[6]中,当MPU为AMD K6、主频为500 MHz时,在无后台任务运行的情况下的测试平均值是tisr=1.6 μs,tist=8.4 μs。由图4可知,在400 MHz无后台任务情况下平均值是:tisr=2.1 μs,tist=10.6 μs。原因是:(1)主频变化的影响。通过分析发现,主频越高延迟越小。(2)微软测试的只是最基本的WindowsCE内核,无持续运行的中断源(LCD显示屏显示DMA中断、桥接芯片T8152固定中断等),所以微软的测试更接近于理论最理想情况。测试主要针对可正常工作的Compulab开发板,更接近面向具体的实际应用。 

3.2 有后台任务情况下中断延迟测试 

    ILtiming可以通过输入参数运行后台任务,在此后台任务下测量中断延迟。ILtiming可增加的后台任务所对应的命令如下: 

    i1:一个只是运行的线程,不做任何事情。 

    i2:一个执行SetThreadPriority(IDLE)的线程。 

    i3:两个交替执行SetEvent和WaitForSingleObject函数的线程,超时时间为10 s。 

    i4:两个交替执行SetEvent和WaitForSingleObject函数的线程,超时时间无限。 

    i5:调用 VirtualAlloc和VirtualFree的线程,超时时间无限。 

    分别在100 MHz、200 MHz、300 MHz和400 MHz主频下,运行5种后台任务并测得5组数据。由于ISR可抢占运行,有无后台任务对tisr的影响不大,所以这里只分析IST受后台任务影响的情况。图5示出了4个主频下测得的IST延迟的平均值与无后台任务时IST延迟的平均值相比较的情况。测试结果分析:无论MPU主频如何变化,IST最大延迟总是发生在第5个后台任务,即处理虚拟内存分配请求VirtualAlloc/VirtualFree。在处理虚拟内存分配请求过程中,内核将从其物理内存池搜索物理内存,搜索内存的时间各不相同,这取决于正在使用的内存量和内存的碎片情况。此外,分配存储空间属于内核功能调用(KCALLS),在KCALLS执行过程中不允许被打断,调度器被禁止,从而导致IST调度延迟增加。因此为了减小分配虚拟内存对实时性的影响,进程应当在继续执行正常处理之前分配以及提交所有虚拟内存。 

 

 

3.3 外加其他中断源情况下中断延迟测试 

    在WinCE系统上运行串口接受显示程序,外部和单片机MSP430串口相连,MSP430上运行串口连续发送数据程序,发送周期从1 ms~1 000 ms。用这种方法模拟产生不同频度的中断源测试中断延迟。 

    测试结果分析:随着串口中断间隔时间变大,IST平均中断延迟时间变小,且变化幅度明显(如图6所示);ISR平均中断延迟时间也变小,但变化幅度没有IST变化明显(如图7所示)。当加入中断源时,由于ISR会暂时关中断,所以当中断频度变大时,关中断的时间变长,即ISR延迟时间随中断间隔时间变大而减小。但是微软提倡ISR关中断的时间要尽量短,大数据量的操作都移到IST中运行,ISR延迟时间不可能也不允许太长,所以ISR变化不明显。而IST则受中断源的干扰,首先,ISR延迟时间变大,定会导致IST延迟时间变大;其次,调度程序KCALLS被频繁的外部中断打断,使IST调度延迟变大,故IST的变化相对较明显。 

 

 

 

3.4 在恶劣情况下最大延迟时间 

    通过以上对WinCE系统的整体实时性能的测试分析发现,在主频高于300 MHz时,IST中断延迟平均时间小于100 μs,可见WinCE操作系统达到了OMAC对实时系统的要求。但作为一款实时操作系统,不仅要观察其平均延迟时间,还要关注在最恶劣条件下的中断延迟情况,即ISR和IST的最大延迟时间。 

    在以上实验及系统中同时运行多个应用程序的情况下,400 MHz主频下的统计结果如表1所示。 

 

 

    表1中,WinCE中断延迟最大值TISR+TIST<250 μs,远小于1 ms,可见WinCE操作系统满足大多数(95%)系统对中断延迟时间的要求,所以可以说WinCE是一款实时操作系统。 

    本文简要阐述了WindowsCE的中断处理机制,详细分析了微软提供的中断测量工具ILTiming测试的原理和实现方法,并在Compulab PXA255开发板上运用ILTiming设计测量了WindowsCE4.2和5.0的中断延迟时间。实验测试结果表明:WindowsCE4.2和5.0具有相同的中断延迟特性,即中断延迟时间与MPU频率成反比关系、与系统负荷成正比关系,且在恶劣情况下,均能满足实时系统的要求。系统能否满足实时系统的要求由许多因素决定,本文只对中断延迟进行了分析,希望对需要了解WindowsCE中断实时性能的嵌入式开发人员有所帮助。 

参考文献 

[1] 嵌入式研究网,傅曦,陈黎,等.WindowsCE嵌入式开发入门——基于Xscale架构[M].北京:人民邮电出版社,2006. 

[2] 黎伟,戴胜华.WindowsCE . NET实时性能测试与分析[J].北京交通大学学报,2005,29(5). 

[3] 罗蕾.嵌入式实时操作系统及应用开发(第二版)[M].北京:北京航空航天大学出版社,2007. 

[4] 刘大鹏,马孝江.基于WindowsCE嵌入式操作系统实时性分析[J].自动化技术与应用,2002(1). 

[5] THOMSON M,BROWNE J.Designing and optimizing microsoft windows CE.NET for real-time performance[EB/OL].www.msdn.microsoft.com,2002,7. 

[6] HALL M,MAILLET S.Testing real-time system in microsoft windows CE.NET[EB/OL].www.msdn.microsoft.com.2002,7. 

[7] 张冬泉,谭南林.Windows CE实用开发技术[M].北京:电子工业出版社,2006. 

[8] 何宗键.Windows CE嵌入式系统[M].北京:北京航空航天大学出版社,2006. 

[9] HALL M.Windows CE 5.0 for real-time systems[EB/OL].www.msdn.microsoft.com,2005. 

[10] 周疏林,宁杨.Windows CE.net内核定制及应用开发[M].北京:电子工业出版社,2005.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。