嵌入式Linux内核实时性测试研究
2016-11-02介龙梅徐有军邵国强
介龙梅,徐有军,邵国强
(大庆师范学院计算机科学与信息技术学院,黑龙江大庆 163712)
嵌入式Linux内核实时性测试研究
介龙梅,徐有军,邵国强
(大庆师范学院计算机科学与信息技术学院,黑龙江大庆163712)
介绍了嵌入式Linux内核实时性问题的背景及其在实际中的应用。提出了实时性测试的2个主要指标:进程切换时间和中断延迟时间。前者测试包括2个方案:一是通过程序测量父子进程切换时间,二是借助Lmbench工具测量进程上下文切换时间;后者则采用测量时钟中断延迟的方法来实现。针对3个测试实验,分别给出了方案设计、方案实现和测试结果与分析。最后在分析和实验的基础上得出几点重要结论,并给出2种实时性的改进方案。
嵌入式Linux;实时性;进程调度延迟;中断延迟
0 引 言
21世纪以来,嵌入式系统已经应用到人类生产和生活的诸多方面,从工业控制、航空航天,到车辆导航、医疗设备等。
Linux虽然在许多方面都表现出优越特性,但其实时性却较弱。标准的Linux并未提供实时的操作系统内核,而有些应用又对实时性提出有较高要求。比如PFX摄像机的项目,单核的实时性即无法满足摄像机的现场需求,为此需要通过实验对linux内核在不同环境下的实时性展开测试和分析,以确定系统是否可以满足实时性需求[1]。
1 Linux实时性测试
进程切换时间和中断延迟时间是影响Linux实时性的2个最重要因素,对Linux实时性的测试研究可从如上2个方面着手进行,再通过相关的测试程序和测试工具,测量进程切换时间和中断延迟时间,从而依据测量的时间数据来衡量Linux的实时性能[2]。
1.1父子进程切换时间测量
1.1.1测试方案设计
程序开始运行后,首先创建2个管道A和B,而后创建一个子进程。子进程运行时,为保证在程序运行中不会有其它的进程抢占系统CPU,可将子进程的优先级修改为99。子进程调用gettimeofday获得当前时间t1并输出,此后进入一个5 000次的循环,在循环中执行2条语句,先读取管道A中的数据,再向管道B中写入数据。
在父进程中,同样将父进程的优先级修改为99,而且也进入一个5 000次的循环,在循环中执行2条语句,先是向管道A中写入数据,再是读取管道B中的数据。循环结束后,父进程调用gettimeofday获得当前时间t2并输出。
1.1.2测试方案实现
1.1.2.1程序运行平台
为使得程序的测试数据更加丰富和全面,测试程序将在如下4个平台中分别实现和运行。在此,给出其中2个典型平台的实验配置,预期设定如下:
1)x86平台,CPU为Pentium4,主频2.8GHz,Vmware虚拟机,操作系统为CentOS-5-5,Linux内核版本为2.6.29.6。
2)x86平台,CPU为Pentium4,主频2.8GHz,Vmware虚拟机,操作系统为CentOS-5-5,Linux内核版本为2.6.29.6,内核中添加了Ingo Molnar实时补丁。
1.1.2.2程序流程图
图1为父子进程切换时间测试程序的流程图。
1.1.3测试结果及分析
切换次数为10 000时,测试程序在各个平台测得的进程切换时间如表1所示。时间的单位为微秒(μs)。对表1中的数据实施重点分析,可得具体结论如下:
1)在x86平台下,进程切换的时间很短,在Linux-2.6.29.6和Linux-2.6.29.6(添加实时补丁)下的平均时间为26.49 μs和24.76 μs。
2)在S3C2410平台下,进程切换的时间就大大增加,在Linux-2.6.29.6和Linux-2.6.29.6(添加实时补丁)下的平均时间为204.51μs和204.46μs(考虑到上文提到的时钟中断的影响,这个时间出现了误差,大概在几微秒范围内。
3)由上述的数据及分析可以得出结论:Linux的进程切换时间较长,嵌入式环境下可能会更长,尚不能有效满足实时性的要求,仍然有待进一步的提升和改善。
1.2Lmbench测试工具
1.2.1测试方案设计
Lmbench是一套为UNIX/POSIX指定的微型测评工具,本文将特别选用其测量进程上下文切换时间的功能[3]。
1.2.2测试方案实现
启动Lmbench后进入源码解压目录,执行make results命令开始测试。没有编译错误,提示对测试进行配置并生产配置脚本。Lmbench根据配置文档执行测试项,并在results目录下根据系统类型、系统名和操作系统类型产生一个子目录,测试结果存放在该目录下。
测试的平台为:x86平台,CPU为Pentium4,主频2.8GHz,Vmware虚拟机,操作系统为CentOS-5-5,Linux内核版本为2.6.18。
1.2.3测试结果及分析
在CentOS-5-5,Linux内核版本为2.6.18平台下测得的进程上下文切换时间如表2所示,单位为微秒(μs)。其中,第二行Host OS表示不同的进程数量(2p、8p、16p)和进程上下文数据块的大小(0K、16K、64K)。
图1 父子进程切换时间测试流程图Fig.1 The flow chart of the father-son process switching time delay test
表2 Lmbench测得的进程上下文切换时间(单位:μs)Tab.2 The switching time delay of process context tested by Lmbench(Unit:μs)
针对表2中所得数据,展开如下分析:
1)进程上下文切换的时间与进程的数量和进程上下文数据块的大小都有密切的关系。在进程数量较少的情况下(例如2个),进程上下文切换的时间较短;进程数量较多时,进程上下文切换的时间也会出现增加。同样,数据块较小时,切换时间也会较数据块较大时要少上一些[4]。
2)由上述数据的线性增长可以得出结论:当系统中进程数量较大,进程上下文的数据块也较大时,尤其是系统负载也趋于可观时,进程上下文切换的时间会显著增大,以致实时性较差,甚至无法达到实时要求。
1.3时钟中断延迟测量实验
1.3.1测试方案实现
测试方案的实现包括2部分:修改arch/arm/plat-s3c/ time.c文件中的代码和编写内核模块。其中,修改arch/arm/ plat-s3c/time.c是为了使内核拥有计算时钟中断延迟的功能,而内核模块则是将内核中保存时钟中断延迟时间变量的值输出到proc文件系统中。因篇幅所限,在此仅概述其重点实现步骤,并作如下呈现:
1)修改arch/arm/plat-s3c/time.c。
①声明6个内核变量;
②实现2个函数:gettimeoffset和get_latency_time;
③在timer_interrupt()时钟中断服务程序开始处调用get _latency_time函数,由此测得与时钟中断延迟相关的时间。
2)输出内核变量值的内核模块(利用proc文件系统)。1.3.2 测试结果及分析
测试程序最终所得的时钟中断的延迟时间如表3所示。
表3 时钟中断的延迟时间(单位:μs)Tab.3 The timer interrupt delay(unit:μs)
研究可知,测试程序中,时钟中断服务程序开始执行时,定时器4已走过的计数值更能精确表现出时钟中断的延迟。由于定时器4的初始值设置为42 250,即每次定时器4的值由42 250降至0时,即会产生时钟中断,而后再复位。该测试中,Linux的时钟周期是5 ms,由此则可推算出定时器4的一个计数表示的时间大约是129 ns。
2 结束语
本文分析了与Linux实时性相关的一些体系机制,包括内核抢占、时钟、进程调度、中断响应[5],在实验的基础上得出如下技术研究结果:
1)Linux2.6内核并不是完全可抢占,在中断处理、Spinlock自旋锁、内核处理CPU私有数据结构等很多情况下仍然不可抢占,这即无法保证实时进程在规定的时间内得以运行。
2)在大多数平台上,Linux时钟中断的频率是100,这个精度无法满足实时性的要求。
3)Linux2.6内核的O(1)调度算法能满足实时性的要求,但缺乏调度点以及优先级反转的问题依然无法保证实时任务的运行。
4)Linux内核在临界区运行时会关闭所有中断,这就增加了中断延迟时间,而临界区代码执行时间的不确定性又使得中断延迟时间的不确定性也随即增加,从而影响系统实时性能。
综上所述,目前标准Linux的实时性能仍然无法满足很多实时应用的需求,因而仍需对其进行功能拓展与完善。通过RTAI多内核方案和Ingo Molnar的实时补丁可以在一定程度上满足用户实时性需要[6]。
[1]杨丰瑞,王兵.基于Adeos的Linux实时性改造的研究与实现[J].微电子学与计算机,2015,32(3):50-53,58.
[2]周保余,孔德刚,赵宏伟.嵌入式Linux实时性研究[J].吉林大学学报(信息科学版),2011,29(4):339-343.
[3]严丽平,宋凯,邓胡滨.基于嵌入式应用的Linux内核实时性改进研究[J].计算机工程与设计,2011,32(1):121-124.
[4]张璐璐.Linux内核实时性的分析和研究[J].硅谷,2012(22):97-98.
[5]甘玲,刘柄宏.基于ADEOS的RTAI/Linux的研究及其实时性测试[J].计算机应用与软件,2010,27(2):163-165.
[6]冯川放,马季.基于嵌入式LINUX系统的实时进程调度算法的研究[J].计算机应用与软件,2014,31(12):278-282.
The research on the real-time performance test of embedded Linux kernel
JIE Longmei,XU Youjun,SHAO Guoqiang
(Computer Science&Information Technology College,Daqing Normal University,Daqing Heilongjiang 163712,China)
The paper proposes the background and application of the real-time performance of embedded Linux kernel.Time delay from one process to another and interrupt delay are two main factors relating to real-time performance test.The former one includes two solutions:one is to test the time delay from father process to son process or on the contrary,another is testing the time delay between contexts by Lmbench tool;the latter one is implemented by testing the interrupt delay.The solution design,solution implementation,test result and analysis for the three test experiments are described individually.After that,several important solutions based on analysis and experiments are pointed out,as well as the two improvement solution for real-time performance.
embedded Linux;real-time performance;process scheduling delay;interrupt latency
TP393.02
A
2095-2163(2016)03-0105-03
2016-05-17
黑龙江省教育厅科学技术研究项目(12533002);大庆师范学院科学研究基金项目(12ZR08)。作者简介:介龙梅(1981-),女,硕士,讲师,主要研究方向:人工智能、嵌入式、3G通信。