Linux实时抢占补丁研究及实时性能测试

2014-06-07 05:53张晓龙郭锐锋陶耀东
计算机工程 2014年10期
关键词:补丁内核线程

张晓龙,郭锐锋,陶耀东,刘 生

(1.中国科学院沈阳计算技术研究所,沈阳110004;2.中国科学院大学,北京100039)

Linux实时抢占补丁研究及实时性能测试

张晓龙1,2,郭锐锋1,陶耀东1,刘 生1,2

(1.中国科学院沈阳计算技术研究所,沈阳110004;2.中国科学院大学,北京100039)

准确的量化数据可作为评测及选择实时Linux系统的参考依据。研究实时Linux系统中实时抢占补丁的关键特性,提出一种代码插桩的实时性能评测方法。在增加实时抢占补丁的Linux操作系统上加载运行测试程序,利用测试程序关键位置的代码探测段来获取运行系统中的重要信息,以完成实时性能的评测。对基于数控平台上该实时系统的中断响应时间和上下文切换时间等评测指标进行测试,结果表明,与标准Linux系统的评测指标相比,该系统的中断响应时间和上下文切换时间分别约减少10%和99%,达到了硬实时系统的要求,满足数控应用的实时需求。

实时Linux系统;实时抢占;实时性能;硬实时系统;代码插桩;数控平台

1 概述

实时操作系统作为可以在有限确定的时间内对异步输入进行处理并输出的系统[1],近年来得到了广泛关注和多样性发展,并应用于工业自动化、数字控制、航空等领域。实时Linux系统[2]是实时操作系统的一个重要发展方向,它具有开放源码、可自行修改内核适应应用需求等特点。本文中增加实时抢占补丁的Linux系统,区别于 RTLinux,RTAI(Real-Time Application Interface)等众多实时 Linux系统,通过修改 Linux内核本身让其支持完全可抢占、可移植性增强,并具有强大的社区支持[3]。本文对该抢占补丁进行了研究和分析,在此基础上提出简单有效的测试方法来测试增加该补丁 Linux系统的实时性能[4]。在实际应用特别是数控领域应用中,可为选择该系统提供有价值的参考数据。

2 实时抢占补丁研究

2.1 实时补丁现状

实时抢占补丁(Realtime Preemption Patch, Preempt RT)是由IngoMolnar和Thomas Gleixner更新维护,和其他在微内核中通过增加实时抢占方法所不同,它在原有的低延迟补丁和抢占补丁的基础上,加入中断线程化、高精度时钟、优先级继承等新特性,将Linux内核修改成完全可抢占式内核,使其具有硬实时能力[5]。

目前,Preempt RT还没有完全加入到标准Linux内核中,但部分抢占支持、高精度时钟、中断线程化等已经加入到最近的内核版本中,如Linux 2.6.23内核中加入Completely Fair Scheduler(CFS)、2.6.24版本中加入高精度时钟以及2.6.30版本加入中断线程化特性等。对完全可抢占的支持目前还没有加入内核中,但增加Preempt RT后可实现。因此,随着实时特性不断融入Linux内核中,其实时性会越来越强[6]。

2.2 实时抢占补丁分析

本文针对Linux2.6.33内核实时抢占补丁中一些关键的实时特性进行分析。其中包括新型锁机制、中断线程化、优先级继承、高精度时钟。

(1)新型锁机制提升内核性能

Preempt RT将大内核锁(BKL)和自旋锁(spinlock)全部转化为优先级继承的互斥锁(mutex),持有锁的线程可以被抢占,减少了内核调度延迟,避免了不必要的时间开销;同时该补丁实现了可抢占的RCU(Read-Copy Update)锁和串行化读写锁,提高了内核性能。

(2)中断线程化

中断线程化是实时改造Linux的一个重要步骤。在Linux标准内核中,中断是最高优先级的执行单元,只要有中断事件,系统将立即响应,会使中断非常频繁,实时任务很难有机会运行。为解决这个问题,引入了中断线程化,中断将作为内核线程运行而且被赋予不同的实时优先级,若实时任务比到来的中断线程拥有更高的优先级,实时任务不会被中断线程中断。中断线程化保证了实时性,减小实时抢占延迟。

(3)优先级继承

自旋锁被互斥锁取代后会产生优先级逆转(rriority inversion)现象,即优先级高的进程由于优先级低的进程保持了竞争资源被迫等待,而让中间优先级的进程运行。优先级逆转将导致高优先级进程的抢占延迟增大,不能保证实时性。为避免不可预期的优先级反转问题,Preempt RT实现了优先级继承协议,即自旋锁的保持者将继承高优先级的竞争者进程的优先级,从而能先于中间优先级进程运行,尽可能快地释放锁,这样高优先级进程就能很快得到竞争的自旋锁,使抢占延迟更短[7]。

(4)高精度时钟

Linux标准内核通过基于Jiffies周期性时钟滴答计时,而且高精度的时间获取需要依赖特定的平台,为调度短周期任务,需要设置时钟频率为更小值,意味着时钟中断更加频繁,会造成大量时钟中断处理和资源浪费。为了解决这个问题,实时抢占内核的时钟系统重新设计,实现了高精度定时器[8]。时钟精度不再依赖 jiffies,使 POSIX定时器和nanosleep精度由具体硬件提供的精度决定,从而系统调用gettimeofday能够获得精确的时间值。

3 实时性能测试方法

3.1 测试方法原理

在进行实时性能的指标评测时,一般有基于硬件仪器测试[9]和软件测试[10]2种方法。基于硬件仪器的方法通常利用示波器测试外部中断响应时间,但是需要昂贵的仪器以及需要设计软、硬件环境,而且测试结果会受到仪器精度的影响。软件测试是通过系统调用读取系统时钟所提供的时间,记录内核中任意两处代码间的执行时间。相比前者,对硬件要求小,而且测试方法易于设计,可跨多平台使用。

通过对Linux内核以及实时抢占补丁的研究,本文提出了代码插桩的软件测试方法,如图1所示,其原理是设计测试程序,将它们加载到待测的实时系统上,并在测试程序的关键位置插入代码探测段来获得系统信息,包括程序运行信息、系统时间以及系统结构信息。

图1 测试方法原理

由于增加Preempt RT的内核实现了高精度定时器,使得系统调用能够获得精确时间值,因此在关键位置的探测代码,可以准确收集到其实时性能的时间信息。

3.2 测试方法实现

一个实时操作系统的实时性能的主要评测标准包括系统中断响应时间、中断延迟时间、上下文切换时间、调度延迟时间等。针对实时系统的实时性能应具有可预测性和低延时的特点,本文认为测试中断响应时间和上下文切换时间对于实时性能的评测具有较高的参考价值。

(1)中断响应时间

中断响应时间是指从中断触发到开始执行中断服务程序(Interrupt Service Routines,ISR)的第一条指令之间的时间。如图2所示,中断响应时间包括中断仲裁时间T1,系统关中断和结束当前指令时间T2、处理器延迟时间T3以及系统处理时间T4,因此,需要测试的中断响应时间为Tir=T1+T2+T3+T4。

图2 中断响应时间划分

首先,编写一个并口的中断服务程序,将其绑定至对应的中断号IRQ7。在中断服务程序中加入代码探测段,系统调用do_gettimeofday用于获取当前系统时间,使用outb命令对并口进行操作。在实时主线程中,同样加入代码探测段,并利用并口引脚频繁产生中断信号,记录中断发生时间TIME_START,在中断服务程序中记录执行第一条指令的时间TIME_END,因此,中断响应时间RESPONSE_TIME= TIME_END-TIME_START。

中断响应延迟时间测试程序如下:

上下文切换时间是指从当前运行任务的最后一条指令执行完毕开始,到下一个就绪任务的首条指令开始执行之间的时间。如图3所示,当一个正在进行的任务TASK1需要切换到另一个任务TASK2时,任务自身将被挂起,而新任务准备就绪开始执行,其中包括一系列的操作,保存被切换任务的状态、查找就绪队列以及新任务载入等,这整个过程的时间开销就是上下文的切换时间Tcs。

图3 上下文切换时间Tcs

Linux内核中上下文切换过程是通过调用context_switch()函数完成的,因此,利用函数的特点设计2个实时任务TASK1和TASK2,并且在每个实时任务中插入代码探测段,即代码插桩。通过频繁切换2个实时任务来测试上下文切换时间Tcs,其中clock_gettime表示获得当前系统时间的函数,usleep函数能使调度器产生调度。为了使调度器能顾频繁的调度切换这2个实时任务,需要设置2个实时任务的优先级别为最高,并且采用SCHED_RR的调度策略。

上下文切换时间测试程序如下:

4 实时性能测试结果

通过代码插桩的测试方法,对中断响应时间和上下文切换时间重要指标进行测试。测试硬件平台为蓝天数控系统,硬件参数为Pentium(R)E2200 CPU处理器,频率为2 GHz,1 GB内存。Linux内核是官方linux2.6.33.7版本,Preempt RT为 patch-2.6.33.7-rt30。配置内核时选择 Complete Preemption(Real-Time)。

4.1 中断响应时间测试结果

实验测试了5 000次中断响应时间,并根据测试结果绘制标准 Linux系统和增加 Preempt RT的Linux系统分别在空负载和满负载的情况下中断响应时间的测试对比图,如图4、图5所示。

图4 系统空负载情况下的中断响应时间

图5 系统满负载情况下的中断响应时间

结果显示,在空负载和满负载的情况下,标准Linux系统的实时性弱于增加Preempt RT的Linux系统。前者的中断响应时间在100 μs,而后者在2种不同的负载下,中断响应延迟最大值由51 μs增加到90 μs,没有超过100 μs,平均值稳定在13 μs之下。综上所述,增加Preempt RT的Linux系统的中断响应时间指标均小于100 μs,处于微秒数量级,较标准Linux系统减少了约10%,并且达到了硬实时的要求。

4.2 上下文切换时间测试结果

通过2个实时任务进行150 000次的任务切换,根据结果绘制上下文切换时间的测试对比图,如图6、图7所示。

图6 系统空负载情况下上下文切换时间示意图

图7 系统满负载情况下的上下文切换时间

结果显示,标准Linux系统,2种负载下最大上下文切换时间分别是1 285 μs和2 612 μs,而增加补丁的Linux系统为8.9 μs和9.9 μs,上下文切换时间是毫秒级与微秒级的差别。综上所述,增加Preempt RT的Linux上下文切换时间小于10 μs,较标准Linux内核减少了约99%,并且满足硬实时的要求。

5 实时Linux系统性能对比

为了进一步分析Preempt RT,与其他实时Linux系统横向对比,综合分析实时Linux系统之间的性能差异,评估增加Preempt RT的Linux系统是否满足数控领域应用的需求。

本文就整合过的指标参数,对多种实时Linux系统进行对比测试。选择对比的测试对象是RTLinux3.0[11]和Xenomai[12-13]。

表1数据显示,增加Preempt RT的Linux系统在最大中断响应延迟时间上相比 Xenomai高出3.9倍,但是最坏时间没有超过100 μs,在平均值上3种系统相差不大,但是可以看出RTLinux的性能最好。在上下文切换时间指标上,增加Preempt RT的Linux系统最大值为9.9 μs,时间性能比Xenomai好52%,平均值上接近硬实时RTLinux系统的数值,远小于Xenomai的参数值。

表1 实时Linux系统实时性能参数值对比 μs

综合2个重要指标参数比较来看,3种实时Linux系统都满足硬实时系统的指标要求。根据数控应用对RTLinux等实时Linux系统的实时性需求[14],表明增加Preempt RT的Linux系统满足数控应用的需求,同时进一步证明了该系统具有不错的硬实时能力。

6 结束语

本文结合实时抢占补丁的特性和实时系统性能评测的方式,提出了代码插桩的软件测试方法,并且对增加Preempt RT的Linux系统进行评测,结果表明该系统基本到达了硬实时系统的要求。目前,该测试方法适用于数控平台上的一般实时系统,下一步将在实验室现有的蓝天数控系统上针对具体应用系统进行性能评测,并在实际应用中进一步优化该测试方法。

[1] Burns A,Wellings A J.Real Time Systems and Their Programming Languages:Ada 95,Real-time Java and Real-time POSIX[M].[S.1.]:Pearson Education, 2001.

[2] 夏一民,罗 军,邓胜兰.实时 Linux操作系统初探[J].计算机应用研究,2001,15(1):45-48.

[3] 吴章金.Linux实时抢占补丁的研究与实践[D].兰州:兰州大学,2010.

[4] Koolwal K.Investigating Latency Effects of the Linux Real-time Preemption Patches on AMD’s GEODE LX Platform[C]//Proc.of the 9th Annual Workshop on Operating Systems Platforms for Embedded Real-time Applications.Paris,France:[s.n.],2013:20-30.

[5] Betz W,Cereia M,BertolottiI C.Experimental Evaluation ofthe Linux RT Patch forReal-time Applications[C]//Proc.ofIEEE Conference on Emerging Technologies&Factory Automation.[S.1.]: IEEE Press,2009:1-4.

[6] Hagen W.Real-time and Performance Improvements for the 2.6 Linux Kernel[J].Linux Journal,2005,(134): 8-13.

[7] Heursch A C,Grambow D,Roedel D,et al.Time-critical Tasksin Linux 2.6: Concepts to Increase the Preemptability of the Linux Kernel[EB/OL].(2013-05-10).http://citeseer.nj.nec.com/cs.

[8] 张 健,刘青昆,王异奇,等.Linux实时化方法的研究与实现[J].计算机工程,2011,37(4):284-286.

[9] Köker K,Membarth R,German R.Performance Analyses of Embedded Real-time Operating Systems Using Highprecision Counters[C]//Proc.of the 3rd International Conference on Autonomous Robots and Agents. Wellington,New Zealand:[s.n.],2006:485-490.

[10] 江建慧,唐智杰.测量嵌入式操作系统实时性能参数的新方法[J].同济大学学报:自然科学版,2008,36 (9):1260-1266.

[11] 赵立业,张 激,游 夏.实时操作系统的性能分析和评估[J].计算机工程,2008,34(8):283-285.

[12] Marieska M D,Hariyanto P G,Fauzan M F,et al.On Performance of Kernel Based and Embedded Real-time Operating System:Benchmarking and Analysis[C]// Proc.of International Conference on IEEE ICACSIS’11. [S.1.]:IEEE Press,2011:401-406.

[13] Feuerer P.Benchmark andComparisonofRealtime Solutions Based on Embedded Linux[D].Hochschule, Germany:Hochschule ULM,2007.

[14] 秦承刚.开放式数控系统的实时操作系统优化技术研究与应用[D].沈阳:中国科学院沈阳计算技术研究所,2012.

编辑 索书志

Research of Linux Real-time Preemption Patch and Real-time Performance Measure

ZHANG Xiao-long1,2,GUO Rui-feng1,TAO Yao-dong1,LIU Sheng1,2
(1.Shenyang Institute of Computing Technology,Chinese Academy of Sciences,Shenyang 110004,China;
2.University of Chinese Academy of Sciences,Beijing 100039,China)

To obtain accurate quantitative data as a reference for evaluating and selecting real-time Linux system,this paper researches several more critical characteristics of the real-time preemption patch of real-time Linux operating system in-depth,and proposes a method of program instrumentation for real-time performance evaluation.In the evaluating process,it loads and runs the test program on the Linux operating system with Preempt-RT patch,gets the important system information data by testing the key position of program with code probe to evaluate its real-time performance,and does the comparison test of the interrupt response time and context switch time as the most important criteria between Linux system with Preempt-RT patch and standard Linux system based on the numerical control system platform. Experimental result shows the interrupt response time on the patch system decreases by about 10% compared with standard Linux system,while context switch time decreases by about 99%,which satisfies the hard real-time system and meets the real-time demand of numerical control applications.

real-time Linux system;real-time preemption;real-time performance;hard real-time system;code instrumentation;numerical control platform

1000-3428(2014)10-0304-04

A

TP391

10.3969/j.issn.1000-3428.2014.10.056

“核高基”重大专项“国产软硬件在数控/工业装置中的应用与推广”(2012ZX01029-001-002)。

张晓龙(1989-),男,硕士研究生,主研方向:实时系统;郭锐锋,研究员、博士生导师;陶耀东,副研究员;刘 生,博士。

2013-07-12

2013-09-28E-mail:wdzxl198@163.com

中文引用格式:张晓龙,郭锐锋,陶耀东,等.Linux实时抢占补丁的研究及实时性能测试[J].计算机工程,2014, 40(10):304-307,313.

英文引用格式:Zhang Xiaolong,Guo Ruifeng,Tao Yaodong,et al.Research of Linux Real-time Preemption Patch and Real-time Performance Measure[J].Computer Engineering,2014,40(10):304-307,313.

猜你喜欢
补丁内核线程
强化『高新』内核 打造农业『硅谷』
基于国产化环境的线程池模型研究与实现
基于嵌入式Linux内核的自恢复设计
健胃补丁
Linux内核mmap保护机制研究
绣朵花儿当补丁
补丁奶奶
浅谈linux多线程协作
微生物内核 生态型农资
大病医保期待政策“补丁”