介龍梅,徐有軍,邵國(guó)強(qiáng)
(大慶師范學(xué)院計(jì)算機(jī)科學(xué)與信息技術(shù)學(xué)院,黑龍江大慶 163712)
嵌入式Linux內(nèi)核實(shí)時(shí)性測(cè)試研究
介龍梅,徐有軍,邵國(guó)強(qiáng)
(大慶師范學(xué)院計(jì)算機(jī)科學(xué)與信息技術(shù)學(xué)院,黑龍江大慶163712)
介紹了嵌入式Linux內(nèi)核實(shí)時(shí)性問(wèn)題的背景及其在實(shí)際中的應(yīng)用。提出了實(shí)時(shí)性測(cè)試的2個(gè)主要指標(biāo):進(jìn)程切換時(shí)間和中斷延遲時(shí)間。前者測(cè)試包括2個(gè)方案:一是通過(guò)程序測(cè)量父子進(jìn)程切換時(shí)間,二是借助Lmbench工具測(cè)量進(jìn)程上下文切換時(shí)間;后者則采用測(cè)量時(shí)鐘中斷延遲的方法來(lái)實(shí)現(xiàn)。針對(duì)3個(gè)測(cè)試實(shí)驗(yàn),分別給出了方案設(shè)計(jì)、方案實(shí)現(xiàn)和測(cè)試結(jié)果與分析。最后在分析和實(shí)驗(yàn)的基礎(chǔ)上得出幾點(diǎn)重要結(jié)論,并給出2種實(shí)時(shí)性的改進(jìn)方案。
嵌入式Linux;實(shí)時(shí)性;進(jìn)程調(diào)度延遲;中斷延遲
21世紀(jì)以來(lái),嵌入式系統(tǒng)已經(jīng)應(yīng)用到人類(lèi)生產(chǎn)和生活的諸多方面,從工業(yè)控制、航空航天,到車(chē)輛導(dǎo)航、醫(yī)療設(shè)備等。
Linux雖然在許多方面都表現(xiàn)出優(yōu)越特性,但其實(shí)時(shí)性卻較弱。標(biāo)準(zhǔn)的Linux并未提供實(shí)時(shí)的操作系統(tǒng)內(nèi)核,而有些應(yīng)用又對(duì)實(shí)時(shí)性提出有較高要求。比如PFX攝像機(jī)的項(xiàng)目,單核的實(shí)時(shí)性即無(wú)法滿足攝像機(jī)的現(xiàn)場(chǎng)需求,為此需要通過(guò)實(shí)驗(yàn)對(duì)linux內(nèi)核在不同環(huán)境下的實(shí)時(shí)性展開(kāi)測(cè)試和分析,以確定系統(tǒng)是否可以滿足實(shí)時(shí)性需求[1]。
進(jìn)程切換時(shí)間和中斷延遲時(shí)間是影響Linux實(shí)時(shí)性的2個(gè)最重要因素,對(duì)Linux實(shí)時(shí)性的測(cè)試研究可從如上2個(gè)方面著手進(jìn)行,再通過(guò)相關(guān)的測(cè)試程序和測(cè)試工具,測(cè)量進(jìn)程切換時(shí)間和中斷延遲時(shí)間,從而依據(jù)測(cè)量的時(shí)間數(shù)據(jù)來(lái)衡量Linux的實(shí)時(shí)性能[2]。
1.1父子進(jìn)程切換時(shí)間測(cè)量
1.1.1測(cè)試方案設(shè)計(jì)
程序開(kāi)始運(yùn)行后,首先創(chuàng)建2個(gè)管道A和B,而后創(chuàng)建一個(gè)子進(jìn)程。子進(jìn)程運(yùn)行時(shí),為保證在程序運(yùn)行中不會(huì)有其它的進(jìn)程搶占系統(tǒng)CPU,可將子進(jìn)程的優(yōu)先級(jí)修改為99。子進(jìn)程調(diào)用gettimeofday獲得當(dāng)前時(shí)間t1并輸出,此后進(jìn)入一個(gè)5 000次的循環(huán),在循環(huán)中執(zhí)行2條語(yǔ)句,先讀取管道A中的數(shù)據(jù),再向管道B中寫(xiě)入數(shù)據(jù)。
在父進(jìn)程中,同樣將父進(jìn)程的優(yōu)先級(jí)修改為99,而且也進(jìn)入一個(gè)5 000次的循環(huán),在循環(huán)中執(zhí)行2條語(yǔ)句,先是向管道A中寫(xiě)入數(shù)據(jù),再是讀取管道B中的數(shù)據(jù)。循環(huán)結(jié)束后,父進(jìn)程調(diào)用gettimeofday獲得當(dāng)前時(shí)間t2并輸出。
1.1.2測(cè)試方案實(shí)現(xiàn)
1.1.2.1程序運(yùn)行平臺(tái)
為使得程序的測(cè)試數(shù)據(jù)更加豐富和全面,測(cè)試程序?qū)⒃谌缦?個(gè)平臺(tái)中分別實(shí)現(xiàn)和運(yùn)行。在此,給出其中2個(gè)典型平臺(tái)的實(shí)驗(yàn)配置,預(yù)期設(shè)定如下:
1)x86平臺(tái),CPU為Pentium4,主頻2.8GHz,Vmware虛擬機(jī),操作系統(tǒng)為CentOS-5-5,Linux內(nèi)核版本為2.6.29.6。
2)x86平臺(tái),CPU為Pentium4,主頻2.8GHz,Vmware虛擬機(jī),操作系統(tǒng)為CentOS-5-5,Linux內(nèi)核版本為2.6.29.6,內(nèi)核中添加了Ingo Molnar實(shí)時(shí)補(bǔ)丁。
1.1.2.2程序流程圖
圖1為父子進(jìn)程切換時(shí)間測(cè)試程序的流程圖。
1.1.3測(cè)試結(jié)果及分析
切換次數(shù)為10 000時(shí),測(cè)試程序在各個(gè)平臺(tái)測(cè)得的進(jìn)程切換時(shí)間如表1所示。時(shí)間的單位為微秒(μs)。對(duì)表1中的數(shù)據(jù)實(shí)施重點(diǎn)分析,可得具體結(jié)論如下:
1)在x86平臺(tái)下,進(jìn)程切換的時(shí)間很短,在Linux-2.6.29.6和Linux-2.6.29.6(添加實(shí)時(shí)補(bǔ)?。┫碌钠骄鶗r(shí)間為26.49 μs和24.76 μs。
2)在S3C2410平臺(tái)下,進(jìn)程切換的時(shí)間就大大增加,在Linux-2.6.29.6和Linux-2.6.29.6(添加實(shí)時(shí)補(bǔ)?。┫碌钠骄鶗r(shí)間為204.51μs和204.46μs(考慮到上文提到的時(shí)鐘中斷的影響,這個(gè)時(shí)間出現(xiàn)了誤差,大概在幾微秒范圍內(nèi)。
3)由上述的數(shù)據(jù)及分析可以得出結(jié)論:Linux的進(jìn)程切換時(shí)間較長(zhǎng),嵌入式環(huán)境下可能會(huì)更長(zhǎng),尚不能有效滿足實(shí)時(shí)性的要求,仍然有待進(jìn)一步的提升和改善。
1.2Lmbench測(cè)試工具
1.2.1測(cè)試方案設(shè)計(jì)
Lmbench是一套為UNIX/POSIX指定的微型測(cè)評(píng)工具,本文將特別選用其測(cè)量進(jìn)程上下文切換時(shí)間的功能[3]。
1.2.2測(cè)試方案實(shí)現(xiàn)
啟動(dòng)Lmbench后進(jìn)入源碼解壓目錄,執(zhí)行make results命令開(kāi)始測(cè)試。沒(méi)有編譯錯(cuò)誤,提示對(duì)測(cè)試進(jìn)行配置并生產(chǎn)配置腳本。Lmbench根據(jù)配置文檔執(zhí)行測(cè)試項(xiàng),并在results目錄下根據(jù)系統(tǒng)類(lèi)型、系統(tǒng)名和操作系統(tǒng)類(lèi)型產(chǎn)生一個(gè)子目錄,測(cè)試結(jié)果存放在該目錄下。
測(cè)試的平臺(tái)為:x86平臺(tái),CPU為Pentium4,主頻2.8GHz,Vmware虛擬機(jī),操作系統(tǒng)為CentOS-5-5,Linux內(nèi)核版本為2.6.18。
1.2.3測(cè)試結(jié)果及分析
在CentOS-5-5,Linux內(nèi)核版本為2.6.18平臺(tái)下測(cè)得的進(jìn)程上下文切換時(shí)間如表2所示,單位為微秒(μs)。其中,第二行Host OS表示不同的進(jìn)程數(shù)量(2p、8p、16p)和進(jìn)程上下文數(shù)據(jù)塊的大?。?K、16K、64K)。
圖1 父子進(jìn)程切換時(shí)間測(cè)試流程圖Fig.1 The flow chart of the father-son process switching time delay test
表2 Lmbench測(cè)得的進(jìn)程上下文切換時(shí)間(單位:μs)Tab.2 The switching time delay of process context tested by Lmbench(Unit:μs)
針對(duì)表2中所得數(shù)據(jù),展開(kāi)如下分析:
1)進(jìn)程上下文切換的時(shí)間與進(jìn)程的數(shù)量和進(jìn)程上下文數(shù)據(jù)塊的大小都有密切的關(guān)系。在進(jìn)程數(shù)量較少的情況下(例如2個(gè)),進(jìn)程上下文切換的時(shí)間較短;進(jìn)程數(shù)量較多時(shí),進(jìn)程上下文切換的時(shí)間也會(huì)出現(xiàn)增加。同樣,數(shù)據(jù)塊較小時(shí),切換時(shí)間也會(huì)較數(shù)據(jù)塊較大時(shí)要少上一些[4]。
2)由上述數(shù)據(jù)的線性增長(zhǎng)可以得出結(jié)論:當(dāng)系統(tǒng)中進(jìn)程數(shù)量較大,進(jìn)程上下文的數(shù)據(jù)塊也較大時(shí),尤其是系統(tǒng)負(fù)載也趨于可觀時(shí),進(jìn)程上下文切換的時(shí)間會(huì)顯著增大,以致實(shí)時(shí)性較差,甚至無(wú)法達(dá)到實(shí)時(shí)要求。
1.3時(shí)鐘中斷延遲測(cè)量實(shí)驗(yàn)
1.3.1測(cè)試方案實(shí)現(xiàn)
測(cè)試方案的實(shí)現(xiàn)包括2部分:修改arch/arm/plat-s3c/ time.c文件中的代碼和編寫(xiě)內(nèi)核模塊。其中,修改arch/arm/ plat-s3c/time.c是為了使內(nèi)核擁有計(jì)算時(shí)鐘中斷延遲的功能,而內(nèi)核模塊則是將內(nèi)核中保存時(shí)鐘中斷延遲時(shí)間變量的值輸出到proc文件系統(tǒng)中。因篇幅所限,在此僅概述其重點(diǎn)實(shí)現(xiàn)步驟,并作如下呈現(xiàn):
1)修改arch/arm/plat-s3c/time.c。
①聲明6個(gè)內(nèi)核變量;
②實(shí)現(xiàn)2個(gè)函數(shù):gettimeoffset和get_latency_time;
③在timer_interrupt()時(shí)鐘中斷服務(wù)程序開(kāi)始處調(diào)用get _latency_time函數(shù),由此測(cè)得與時(shí)鐘中斷延遲相關(guān)的時(shí)間。
2)輸出內(nèi)核變量值的內(nèi)核模塊(利用proc文件系統(tǒng))。1.3.2 測(cè)試結(jié)果及分析
測(cè)試程序最終所得的時(shí)鐘中斷的延遲時(shí)間如表3所示。
表3 時(shí)鐘中斷的延遲時(shí)間(單位:μs)Tab.3 The timer interrupt delay(unit:μs)
研究可知,測(cè)試程序中,時(shí)鐘中斷服務(wù)程序開(kāi)始執(zhí)行時(shí),定時(shí)器4已走過(guò)的計(jì)數(shù)值更能精確表現(xiàn)出時(shí)鐘中斷的延遲。由于定時(shí)器4的初始值設(shè)置為42 250,即每次定時(shí)器4的值由42 250降至0時(shí),即會(huì)產(chǎn)生時(shí)鐘中斷,而后再?gòu)?fù)位。該測(cè)試中,Linux的時(shí)鐘周期是5 ms,由此則可推算出定時(shí)器4的一個(gè)計(jì)數(shù)表示的時(shí)間大約是129 ns。
本文分析了與Linux實(shí)時(shí)性相關(guān)的一些體系機(jī)制,包括內(nèi)核搶占、時(shí)鐘、進(jìn)程調(diào)度、中斷響應(yīng)[5],在實(shí)驗(yàn)的基礎(chǔ)上得出如下技術(shù)研究結(jié)果:
1)Linux2.6內(nèi)核并不是完全可搶占,在中斷處理、Spinlock自旋鎖、內(nèi)核處理CPU私有數(shù)據(jù)結(jié)構(gòu)等很多情況下仍然不可搶占,這即無(wú)法保證實(shí)時(shí)進(jìn)程在規(guī)定的時(shí)間內(nèi)得以運(yùn)行。
2)在大多數(shù)平臺(tái)上,Linux時(shí)鐘中斷的頻率是100,這個(gè)精度無(wú)法滿足實(shí)時(shí)性的要求。
3)Linux2.6內(nèi)核的O(1)調(diào)度算法能滿足實(shí)時(shí)性的要求,但缺乏調(diào)度點(diǎn)以及優(yōu)先級(jí)反轉(zhuǎn)的問(wèn)題依然無(wú)法保證實(shí)時(shí)任務(wù)的運(yùn)行。
4)Linux內(nèi)核在臨界區(qū)運(yùn)行時(shí)會(huì)關(guān)閉所有中斷,這就增加了中斷延遲時(shí)間,而臨界區(qū)代碼執(zhí)行時(shí)間的不確定性又使得中斷延遲時(shí)間的不確定性也隨即增加,從而影響系統(tǒng)實(shí)時(shí)性能。
綜上所述,目前標(biāo)準(zhǔn)Linux的實(shí)時(shí)性能仍然無(wú)法滿足很多實(shí)時(shí)應(yīng)用的需求,因而仍需對(duì)其進(jìn)行功能拓展與完善。通過(guò)RTAI多內(nèi)核方案和Ingo Molnar的實(shí)時(shí)補(bǔ)丁可以在一定程度上滿足用戶實(shí)時(shí)性需要[6]。
[1]楊豐瑞,王兵.基于Adeos的Linux實(shí)時(shí)性改造的研究與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2015,32(3):50-53,58.
[2]周保余,孔德剛,趙宏偉.嵌入式Linux實(shí)時(shí)性研究[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2011,29(4):339-343.
[3]嚴(yán)麗平,宋凱,鄧胡濱.基于嵌入式應(yīng)用的Linux內(nèi)核實(shí)時(shí)性改進(jìn)研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(1):121-124.
[4]張璐璐.Linux內(nèi)核實(shí)時(shí)性的分析和研究[J].硅谷,2012(22):97-98.
[5]甘玲,劉柄宏.基于ADEOS的RTAI/Linux的研究及其實(shí)時(shí)性測(cè)試[J].計(jì)算機(jī)應(yīng)用與軟件,2010,27(2):163-165.
[6]馮川放,馬季.基于嵌入式LINUX系統(tǒng)的實(shí)時(shí)進(jìn)程調(diào)度算法的研究[J].計(jì)算機(jī)應(yīng)用與軟件,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
黑龍江省教育廳科學(xué)技術(shù)研究項(xiàng)目(12533002);大慶師范學(xué)院科學(xué)研究基金項(xiàng)目(12ZR08)。作者簡(jiǎn)介:介龍梅(1981-),女,碩士,講師,主要研究方向:人工智能、嵌入式、3G通信。