介龍梅,徐有軍,邵國強
(大慶師范學院計算機科學與信息技術學院,黑龍江大慶 163712)
嵌入式Linux內核實時性測試研究
介龍梅,徐有軍,邵國強
(大慶師范學院計算機科學與信息技術學院,黑龍江大慶163712)
介紹了嵌入式Linux內核實時性問題的背景及其在實際中的應用。提出了實時性測試的2個主要指標:進程切換時間和中斷延遲時間。前者測試包括2個方案:一是通過程序測量父子進程切換時間,二是借助Lmbench工具測量進程上下文切換時間;后者則采用測量時鐘中斷延遲的方法來實現。針對3個測試實驗,分別給出了方案設計、方案實現和測試結果與分析。最后在分析和實驗的基礎上得出幾點重要結論,并給出2種實時性的改進方案。
嵌入式Linux;實時性;進程調度延遲;中斷延遲
21世紀以來,嵌入式系統已經應用到人類生產和生活的諸多方面,從工業控制、航空航天,到車輛導航、醫療設備等。
Linux雖然在許多方面都表現出優越特性,但其實時性卻較弱。標準的Linux并未提供實時的操作系統內核,而有些應用又對實時性提出有較高要求。比如PFX攝像機的項目,單核的實時性即無法滿足攝像機的現場需求,為此需要通過實驗對linux內核在不同環境下的實時性展開測試和分析,以確定系統是否可以滿足實時性需求[1]。
進程切換時間和中斷延遲時間是影響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。
本文分析了與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通信。