張曉龍,郭銳鋒,陶耀東,劉 生
(1.中國科學院沈陽計算技術研究所,沈陽110004;2.中國科學院大學,北京100039)
Linux實時搶占補丁研究及實時性能測試
張曉龍1,2,郭銳鋒1,陶耀東1,劉 生1,2
(1.中國科學院沈陽計算技術研究所,沈陽110004;2.中國科學院大學,北京100039)
準確的量化數據可作為評測及選擇實時Linux系統的參考依據。研究實時Linux系統中實時搶占補丁的關鍵特性,提出一種代碼插樁的實時性能評測方法。在增加實時搶占補丁的Linux操作系統上加載運行測試程序,利用測試程序關鍵位置的代碼探測段來獲取運行系統中的重要信息,以完成實時性能的評測。對基于數控平臺上該實時系統的中斷響應時間和上下文切換時間等評測指標進行測試,結果表明,與標準Linux系統的評測指標相比,該系統的中斷響應時間和上下文切換時間分別約減少10%和99%,達到了硬實時系統的要求,滿足數控應用的實時需求。
實時Linux系統;實時搶占;實時性能;硬實時系統;代碼插樁;數控平臺
實時操作系統作為可以在有限確定的時間內對異步輸入進行處理并輸出的系統[1],近年來得到了廣泛關注和多樣性發展,并應用于工業自動化、數字控制、航空等領域。實時Linux系統[2]是實時操作系統的一個重要發展方向,它具有開放源碼、可自行修改內核適應應用需求等特點。本文中增加實時搶占補丁的Linux系統,區別于 RTLinux,RTAI(Real-Time Application Interface)等眾多實時 Linux系統,通過修改 Linux內核本身讓其支持完全可搶占、可移植性增強,并具有強大的社區支持[3]。本文對該搶占補丁進行了研究和分析,在此基礎上提出簡單有效的測試方法來測試增加該補丁 Linux系統的實時性能[4]。在實際應用特別是數控領域應用中,可為選擇該系統提供有價值的參考數據。
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.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的調度策略。
上下文切換時間測試程序如下:

通過代碼插樁的測試方法,對中斷響應時間和上下文切換時間重要指標進行測試。測試硬件平臺為藍天數控系統,硬件參數為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%,并且滿足硬實時的要求。
為了進一步分析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系統滿足數控應用的需求,同時進一步證明了該系統具有不錯的硬實時能力。
本文結合實時搶占補丁的特性和實時系統性能評測的方式,提出了代碼插樁的軟件測試方法,并且對增加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.