• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Linux中斷線程化分析及中斷延時測試

      2018-10-31 08:15:10李彥峰孫菲艷
      智能計算機與應(yīng)用 2018年6期
      關(guān)鍵詞:處理程序延遲時間內(nèi)核

      王 娜, 李彥峰,2, 孫菲艷, 汪 辰

      (1 金陵科技學(xué)院 南京軟件研究院, 南京 211169; 2 中國科學(xué)院 軟件研究所, 北京 100190)

      引言

      Linux操作系統(tǒng)以其開源、可移植的優(yōu)勢,以及穩(wěn)定和支持多種處理器結(jié)構(gòu)的特點受到諸多嵌入式產(chǎn)品開發(fā)者的青睞,成為嵌入式領(lǐng)域發(fā)展最快的操作系統(tǒng)。作為一個通用的操作系統(tǒng),Linux本身也對實時性做了一定的考慮,但是仍有很多不足。

      目前針對Linux的實時化改造,業(yè)界已推出多種方案。其中的實時搶占補丁(PREEMPT_RT patch)即因其簡潔設(shè)計以及與內(nèi)核主線的一致性,獲得工業(yè)控制領(lǐng)域的廣泛關(guān)注,并且PREEMPT_RT補丁(以下簡稱PREEMPT_RT)對Linux的實時化改造正在不斷地被吸收融入到Linux主線中,成為Linux實時化改造的主流設(shè)計理念。

      中斷管理的高效、可靠是系統(tǒng)設(shè)計的關(guān)鍵部分之一,如果設(shè)計不良則可能造成不必要的硬件等待,使得整個任務(wù)處理出現(xiàn)延滯。PREEMPT_RT引入了中斷線程化的思路,改善由于中斷處理導(dǎo)致的內(nèi)核延遲的問題。目前很多研究實驗均已表明中斷線程化可有助于減少內(nèi)核的搶占延遲,從而整體提升實時任務(wù)的處理性能。但中斷線程化對于中斷延時的影響,現(xiàn)有研究結(jié)論卻并不一致。一部分研究推證出中斷線程化可以降低中斷延時[1],另外有些研究則指出,中斷線程化會導(dǎo)致中斷延時的增加[2]。綜上論述可知,本文將基于PREEMPT_RT對中斷線程化的實現(xiàn)進行分析,并據(jù)此研發(fā)提出了一種中斷延遲時間的測試方法,接下來又基于TI AM3358處理器的開發(fā)板進行測試驗證,得出了中斷線程化對中斷延遲時間影響的結(jié)論,同時還設(shè)計提出了實時中斷和非實時中斷的概念,對基于PREEMPT_RT內(nèi)核的驅(qū)動開發(fā)具有較強的指導(dǎo)意義。

      1 Linux搶占內(nèi)核中斷線程化的實現(xiàn)

      處理硬件中斷是造成內(nèi)核響應(yīng)延遲的一個重要原因。分析原因可知,硬件處理某一個中斷的過程中,其它中斷是被阻塞的。傳統(tǒng)Linux內(nèi)核處理中斷的過程,從系統(tǒng)檢測到一個中斷開始,一直到中斷的處理程序運行結(jié)束,處理中斷的CPU一直處于關(guān)中斷的狀態(tài), 整個過程中斷和任務(wù)均無法得到響應(yīng),造成中斷響應(yīng)時間、任務(wù)調(diào)度時間不確定。

      針對這一問題,Linux系統(tǒng)引入了中斷上半部、底半部的概念。當運行于中斷底半部程序時,中斷被使能,這在一定程度上就減少了系統(tǒng)關(guān)中斷的時間,但就效果改觀而言卻極為有限。首先,系統(tǒng)處理底半部中斷時,仍然不支持高優(yōu)先級任務(wù)的調(diào)度,增加了任務(wù)調(diào)度時間的不確定性。其次,底半部的設(shè)計思想語意含糊,在系統(tǒng)中常常作為一種改進建議,而不是強制規(guī)范。事實上,一般用戶很難清晰地界定哪部分是中斷服務(wù)的上半部分,哪部分是底半部分,因此用戶完全可能將其繞過,就使得中斷編程的隨意性增大,難以達到滿意的綜合設(shè)計效率[2]。通過以上分析可知,系統(tǒng)運行中斷的過程中,中斷響應(yīng)和任務(wù)調(diào)度的時間均存在較大的不確定性,受到中斷任務(wù)本身工作量的干擾,運行時間無法得到保證,因而難以滿足實時性的要求。

      1.1 PREEMPT_RT中斷線程化的原理

      PREEMPT_RT延續(xù)了中斷上半部、底半部的設(shè)計思路,提出了中斷線程化的概念,將中斷事件集合中的絕大部分置于內(nèi)核線程中進行處理。通過喚醒線程使中斷得以執(zhí)行,其結(jié)果是增強了內(nèi)核的可搶占性,使得實時任務(wù)能夠獲得及時處理。

      中斷線程化的核心思想就是將中斷任務(wù)盡可能地放到內(nèi)核線程中去完成,原則上,可以將中斷處理的全部工作均投放至線程中去,但也有例外,譬如對于共享中斷線的一些處理,就必須定制在硬中斷上下文中實現(xiàn),研究中將這部分的處理稱作快速檢測處理程序,而將中斷過程中除此之外的處理稱作中斷主處理程序。整個中斷處理花費的時間,將主要消耗在中斷主處理程序上,所以中斷主處理程序的運行時間決定了系統(tǒng)關(guān)中斷的時間。研究推得偽代碼可參見表1。由表1可知,中斷線程化前的代碼結(jié)構(gòu)中,快速檢測處理程序和中斷主處理程序都是在硬件中斷上下文中被執(zhí)行的,這個過程中系統(tǒng)處于關(guān)中斷狀態(tài)。中斷線程化之后,中斷主處理程序執(zhí)行被放入到內(nèi)核線程中去處理,硬件中斷上下文中原定執(zhí)行中斷主處理程序的部分現(xiàn)在卻只需完成喚醒中斷線程這一個動作,大大減少了系統(tǒng)的關(guān)中斷時間。

      表1中斷線程化前后中斷處理偽代碼

      Tab.1Interruptprocessingpseudo-codebeforeandafterthreadedinterrupt

      中斷線程化前中斷線程化后on each IRQ reacheddohard_cli();IRQ_handler(); 快速檢測處理程序; 中斷主處理程序;hard_sti();doneon each IRQ reacheddohard_cli();IRQ_handler(); 快速檢測處理程序; 喚醒中斷線程;hard_sti();done……irq_thread: 中斷主處理程序;

      中斷線程在內(nèi)核中的默認設(shè)置是實時優(yōu)先級為50,調(diào)度策略為SCHED_FIFO的實時內(nèi)核線程。這樣一來,在中斷線程的運行過程中,如果有優(yōu)先級大于50的實時進程進來,中斷線程的處理被掛起,系統(tǒng)轉(zhuǎn)而去執(zhí)行實時任務(wù),從而保證了實時任務(wù)的及時運行,增加了系統(tǒng)的確定性。

      對于被線程化的中斷,系統(tǒng)接收到中斷后,并不是直接進入中斷服務(wù)函數(shù),而是通過設(shè)置調(diào)度標志告知系統(tǒng),當中斷線程被實際調(diào)度,此時才能真正開始執(zhí)行中斷處理函數(shù)。另外,中斷線程的運行還有可能會被更高優(yōu)先級的實時任務(wù)打斷。相應(yīng)地,對于被線程化的中斷來說,自身的優(yōu)先級就被降低了。因此,中斷線程化實質(zhì)上是降低了中斷自身的響應(yīng)速度,減少了系統(tǒng)的關(guān)中斷時間,在提高系統(tǒng)可搶占性的同時,也一并優(yōu)化了系統(tǒng)的實時性能。

      1.2 實時中斷和非實時中斷

      通過原理分析可以看出,中斷線程化使得中斷自身的優(yōu)先級被降低,考慮到有些中斷的響應(yīng)必須及時(例如:系統(tǒng)的時鐘中斷),Linux搶占內(nèi)核對中斷線程化也給出了靈活處理,增加了IRQF_NODALY標志位,用戶在申請某一個中斷時,如果設(shè)置了此標志位,則此中斷將被禁止中斷線程化。這樣的設(shè)計相當于給中斷賦予了優(yōu)先級,將系統(tǒng)的中斷分為實時中斷和非實時中斷。具體來說,實時中斷可以通過設(shè)置IRQF_NODALY實現(xiàn),運行在關(guān)中斷狀態(tài)的中斷上下文; 非實時中斷則可做到中斷線程化,運行在開中斷狀態(tài),并且可以被搶占的進程上下文。

      2 中斷延遲時間測試方法

      基于中斷線程化的原理分析可知,從系統(tǒng)整體性能來看,中斷線程化減小了系統(tǒng)關(guān)中斷時間,增加了內(nèi)核的可搶占性,從而降低了系統(tǒng)的搶占延遲時間,但是對于被線程化的中斷本身,其處理優(yōu)先級卻被降低,于無形中就增加了中斷的延遲處理時間。目前,對于Linux內(nèi)核的搶占延遲時間的測量,已經(jīng)可以見到較為成熟的測試工具。諸如,rttest包中的cyclictest用于測試系統(tǒng)搶占延遲時間即已得到廣泛應(yīng)用,但是,對于中斷延遲時間的測試,還沒有一個可以供研究者直接調(diào)取的通用測試程序。在此情況下,本文即研發(fā)提出了一種簡單方便的方法用來測試中斷延遲時間。對此可做探討論述如下。

      2.1 中斷延時測試原理

      中斷延遲時間是指,從中斷被觸發(fā)開始到中斷處理函數(shù)的第一條指令執(zhí)行所經(jīng)歷的時間。本文提出了一種測試中斷延時的方法,選取系統(tǒng)中的一個定時器硬件,通過計算定時器中斷的響應(yīng)延遲,獲取系統(tǒng)的中斷延時時間。如圖1所示,設(shè)置定時器的間隔時間為period,在ts時刻啟動定時器,那么定時器中斷理論上應(yīng)該在ts+period時刻觸發(fā),事實上,由于中斷延遲的存在,實際的中斷執(zhí)行時間要遲于理論計算時間,假設(shè)在th時刻,中斷處理程序的第一條指令被執(zhí)行,那么中斷延遲時間ti就可以通過計算得來。計算公式的數(shù)學(xué)表述如下:

      ti=th-ts-period

      (1)

      圖1 測試原理

      2.2 測試實現(xiàn)

      首先選取一個定時器硬件,本文選用TI開發(fā)板的Dmtimer3硬件作為定時器的中斷觸發(fā)源。然后設(shè)置此定時器每隔100 us觸發(fā)一個中斷,設(shè)置中斷到時處理函數(shù)。在定時器啟動時獲取中斷觸發(fā)時間ts,定時器中斷到來的中斷處理函數(shù)的第一句代碼中獲取中斷到來時間th,兩者的差值即為中斷延時時間,此后重新使能定時器,開始下一輪中斷,循環(huán)測試。測試程序主要代碼可詳見如下。

      //定時器使能函數(shù)irq_enalbe

      omap_dm_timer_start(timer_ptr);

      //獲取定時器啟動時間

      do_gettimeofday(&ts);

      ……

      //定時器中斷處理函數(shù)

      do_gettimeofday(&th);

      //計算本次中斷響應(yīng)延遲時間

      diff=timeval_sub(th,ti)-period;

      //重新使能定時器,開始下一輪的測試

      irq_enable()

      3 中斷延遲時間實驗結(jié)果

      實驗基于TI AM3358處理器開發(fā)板設(shè)計展開,此開發(fā)板使用ARM Cortex-A8核心,主頻為800 MHz,內(nèi)存采用512 M的DDR3內(nèi)存。實驗使用的非實時測試環(huán)境內(nèi)核原始版本為linux-3.2.0,搶占內(nèi)核版本在原始版本基礎(chǔ)上打上PREEMPT-3.2.0-rt10補丁。

      為了更加直觀地探察中斷線程化對系統(tǒng)的影響以及對中斷自身的影響,使用本文推介的中斷延遲測試方法,設(shè)計構(gòu)建了2類實驗。內(nèi)容闡釋如下。

      (1)對系統(tǒng)影響實驗:設(shè)計一個中斷負載,分別在Linux內(nèi)核和PREEMPT_RT內(nèi)核上運行負載,統(tǒng)計此時的中斷延時時間,分析中斷線程化對系統(tǒng)關(guān)中斷時間的影響。

      (2)對中斷自身影響:分別在Linux原生內(nèi)核和PREEMPT_RT內(nèi)核下創(chuàng)建定時器中斷,測試中斷延遲時間,分析中斷線程化對中斷自身的影響。

      3.1 中斷線程化對系統(tǒng)關(guān)中斷時間的影響

      實驗基本原理可描述為:為了驗證中斷線程化對系統(tǒng)關(guān)中斷時間的影響,需要在系統(tǒng)中人為創(chuàng)建中斷,因此開發(fā)了一個負載程序。負載被設(shè)置為一個內(nèi)核模塊,該內(nèi)核模塊每隔100 us觸發(fā)一次中斷,一次中斷處理的時間大概在50 us左右,當此負載存在的情況下,新增定時器中斷,計算定時器中斷的延遲時間,通過這一指標就可以驗證系統(tǒng)的關(guān)中斷時間。

      分別在非實時Linux內(nèi)核和實時搶占內(nèi)核中進行實驗,將各自運行20 000次,并將實驗結(jié)果使用二維點陣圖繪制出來,運行結(jié)果如圖2所示。

      結(jié)果顯示,加中斷負載后,非實時內(nèi)核的中斷最小延時48 us,最大延時63 us,平均延時54.9 us。實時搶占式內(nèi)核的中斷最小延時6 us,最大延時35 us,平均延時10.9 us,在中斷延時時間上較非實時內(nèi)核要占據(jù)明顯優(yōu)勢,進而證實了中斷線程化減少了關(guān)中斷的時間,從而可以改善系統(tǒng)的中斷延時時間,增加內(nèi)核的整體可搶占性。

      (a) 非實時內(nèi)核中斷延時時間

      (b) 實時內(nèi)核中斷延時時間

      3.2 中斷線程化對自身中斷延時的影響

      實驗基本原理可描述為:分別在Linux內(nèi)核和PREEMPT_RT內(nèi)核創(chuàng)建定時器中斷,計算中斷延時時間,驗證中斷線程化對中斷自身的影響。

      實驗將在Linux內(nèi)核和PREEMPT_RT內(nèi)核的2種內(nèi)核環(huán)境下分別運行20 000次,獲取各次的中斷延時時間,并將測試結(jié)果使用二維點陣圖繪制出來,結(jié)果對比如圖3所示。

      結(jié)果顯示,經(jīng)過20 000次測試,非實時Linux內(nèi)核的中斷延時最小時間為2 us,最大值13 us,平均值5.5 us,標準方差0.5。實時搶占內(nèi)核中斷延時最小時間6 us,最大值28 us,平均值12.6 us,標準方差1.3。實時搶占Linux內(nèi)核的中斷延時時間大于普通非實時內(nèi)核的測試結(jié)果。

      (a) 非實時內(nèi)核中斷延時時間

      (b) 實時內(nèi)核中斷延時時間

      使用實時搶占內(nèi)核的系統(tǒng),在某些使用場景下,如果對中斷延時時間有著嚴格的要求(比如必須在20 us內(nèi)響應(yīng)),中斷線程化將無法做到,那么就可以在申請中斷時將其設(shè)置為實時中斷,此時就不再會被線程化,而是運行在中斷上下文中。實時搶占內(nèi)核中的實時中斷的中斷延時時間測試結(jié)果如圖4所示。

      圖4 實時搶占內(nèi)核中實時中斷中斷延時

      結(jié)果顯示,實時搶占內(nèi)核中若將中斷設(shè)置為實時中斷,中斷延時時間可以控制在15 us以內(nèi),平均中斷延時5.5 us,與非實時Linux內(nèi)核的測試結(jié)果相當。

      4 結(jié)束語

      本文探討了Linux搶占內(nèi)核中中斷線程化的實現(xiàn)原理,從原理上分析了中斷線程化對系統(tǒng)整體性能的影響,并提出了一種中斷延時時間測試的方法,將該方法在TI AM3358處理器的平臺運行實現(xiàn),實驗結(jié)果表明,Linux搶占內(nèi)核中斷線程化可以減少系統(tǒng)關(guān)中斷時間,從而提高中斷處理效率。

      Linux搶占內(nèi)核對中斷的處理更加靈活,用戶可以根據(jù)自身需要將中斷設(shè)置為實時中斷或非實時中斷。其中,實時中斷未被線程化,在中斷上下文中處理,處理的優(yōu)先級高,及時性強,但缺點是增加系統(tǒng)關(guān)中斷時間,而在此期間將無法處理其它的任何中斷或任務(wù)。非實時中斷指被線程化的中斷,在進程上下文處理,依賴調(diào)度器的調(diào)度,處理的優(yōu)先級相對較低,及時性差,優(yōu)點是減少系統(tǒng)關(guān)中斷時間,可與系統(tǒng)中的其它任務(wù)共同競爭資源,其公平性則更加突出。

      在研究中,本文進一步設(shè)計了實驗仿真來證明上述理論,從而為使用PREEMPT_RT內(nèi)核的開發(fā)人員設(shè)計內(nèi)核驅(qū)動提供了重要的參考依據(jù)。

      猜你喜歡
      處理程序延遲時間內(nèi)核
      萬物皆可IP的時代,我們當夯實的IP內(nèi)核是什么?
      強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      高速公路工程變更與計量支付處理程序的優(yōu)化方法
      二氧化碳對乙烷燃燒著火延遲時間的影響
      煤氣與熱力(2021年3期)2021-06-09 06:16:22
      LTE 系統(tǒng)下行鏈路FDRX 節(jié)能機制研究
      基于分層COX模型的跟馳反應(yīng)延遲時間生存分析
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
      Linux內(nèi)核mmap保護機制研究
      基于C++的數(shù)控加工通用后處理程序的開發(fā)應(yīng)用研究
      企業(yè)危機公關(guān)管理問題分析
      天祝| 太湖县| 古田县| 南雄市| 肃南| 洪泽县| 农安县| 文登市| 多伦县| 津南区| 大冶市| 长寿区| 天气| 南江县| 庆元县| 大姚县| 新巴尔虎左旗| 枣阳市| 陕西省| 中宁县| 卓资县| 邵阳市| 炎陵县| 乌什县| 龙泉市| 达拉特旗| 颍上县| 育儿| 三台县| 江油市| 邵东县| 尖扎县| 什邡市| 桐梓县| 民和| 屏东县| 微山县| 德庆县| 黔江区| 丹寨县| 商都县|