Linux核心中斷延時與解決

來源:互聯網
上載者:User
中斷潛伏期(Interrupt Latency)或者說中斷延遲,這個指從中斷產生到CPU開始響應中斷的時間段,也就是圖中從t2至t3的時間段。中斷潛伏期是由於核心在進入臨界區前關閉CPU的中斷響應所引起的,在這個時間段內,雖然外部裝置使CPU的插斷要求線有效,但CPU並不立刻響應中斷,而是繼續執行臨界區的核心代碼,直至退出臨界區、使能插斷要求,才開始進行中斷的響應。當然,還需要注意的一點是,中斷潛伏期實際上包含了硬體所產生的中斷延遲時間,我們一般所研究的是如何最大限度的減少軟體所造成的延遲時間,所以,如果沒有特別說明,我們是不考慮硬體所產生的延遲(但實際上,在工程應用中,當經過軟體的最佳化還不能滿足系統即時性的要求時,唯一的辦法就只有提高硬體的處理速度了)。

文章中提出的解決方案:

1 軟體中斷類比
由於Linux存在許多關中斷的地區,這就會導致中斷潛伏期過長,當中斷頻繁時,會有丟失外部中斷的可能性,這是即時系統所不能容忍的。解決這個問題最直接的辦法,就是不關中斷;這裡所謂的不關中斷,是對整個系統來說不關中斷,但對於Linux本身來說,或者說從Linux的角度來看的話,Linux本身的行為和實際關中斷的時候時一樣的。這種方法可以用軟體中斷模式技術來實現。
軟體中斷模式技術中所指的軟體中斷,是對於Linux來說的,也就是說,Linux並不直接控制硬體中斷,當Linux需要關中斷時,它實際上的操作只是將一個軟體標識置位,表示從此時開始Linux的執行不想受到中斷的幹擾,當Linux開中斷的時候,實際上的操作是將這個軟體標識清除。而實際硬體中斷由處於硬體和Linux之間的一個軟體層來管理,這個軟體層的主要任務就是接收硬體中斷,並根據需要調度Linux的中斷服務程式;當Linux關中斷時(並沒有實際禁止硬體中斷),軟體中斷類比層繼續接收硬體中斷,並將中斷資訊記錄在日誌中,當Linux開中斷時,類比層就根據中斷日誌調用Linux的中斷服務程式;
通過軟體中斷類比技術,可以有效防止外部中斷的丟失,但是,我們應該看到,在Linux關中斷期間,外部中斷還是得不到響應(也就是Linux本身的相應中斷服務程式沒有執行),所以,這種技術並沒有縮短系統的中斷潛伏期,也就沒有提高系統的中斷回應時間,還是無法滿足即時任務對快速的中斷回應時間的要求。

2 增加核心搶佔點
從對Linux的任務響應模型的分析可以看出,調度潛伏期對任務回應時間的影響非常大,在任務回應時間中佔了很大一部分(很多文獻關於這方面的測試結果都可以證明這一點);所以,Linux即時性最佳化的一個重要目標就是縮短調度潛伏期的時間。那麼,影響Linux調度潛伏期的因素有哪些呢?調度潛伏期的長短與Linux在核心態的一次已耗用時間長短有關(從進入核心態執行系統服務到退出核心態的時間段),為了減少調度潛伏期的時間,就必須減少Linux連續運行在核心態的時間;最直觀的方法就是在執行時間長的核心代碼中增加搶佔點(也就是增加部分代碼主動請求進行調度),將執行時間長的核心代碼劃分成若干段執行時間段的代碼,在各個程式碼片段之間可以進行進程調度,從而達到縮短調度潛伏期的目的。
已經有資料顯示,增加核心搶佔點是最有效縮短調度潛伏期的方法;但是,儘管這種方法的原理很簡單,實現起來卻是相當的繁瑣和費時。一方面,要找出核心中哪些部分的執行時間較長本身就不是一件容易的事,而且同樣的代碼在不同的系統狀態下執行時間的長短也不一樣,這就需要進行動態分析找出核心中耗時的程式碼片段;另一方面,隨著核心的不斷髮展,這種方法在不同版本核心之間的移植性也比較差,而且還要對新增加的核心代碼進行分析。
3 利用SMP技術實現可搶佔核心
由於Linux核心原來的設計是不可搶佔的,也就是說,核心代碼大部分沒有考慮函數的重入(一個系統服務並發的被兩個進程執行)和資料的互斥訪問的問題,在這種情況下要實現核心的可搶佔相當困難。但是,隨著後來Linux對SMP(對稱式多處理器)支援的成熟,出現了利用SMP技術實現可搶佔核心的方法。實現可搶佔核心,它的目標和增加核心搶佔點類似,實際上也是為了縮短調度潛伏期。
要實現可搶佔核心,最主要的工作就是要找出哪些代碼可能被進程並發調用,並對相關的臨界區進行保護,保持資料的一致性。而對SMP的支援,考慮的也是類似的問題,因為在多處理器系統中可以有多個進程同時運行並訪問同樣的臨界資源。所以,可以利用Linux核心對SMP的支援,實現核心的可搶佔。在可搶佔核心中,當有高優先順序的進程可以運行時,系統會立刻進行進程調度;當然,在某些情況下核心搶佔也是不允許的,這主要包括以下幾種情形:
1)當系統正在處理中斷服務程式的時候,不允許進行搶佔;中斷服務程式是與進程無關的,非同步,它並不屬於某個進程,沒有進程屬性(也就是說不存在進程上下文環境),所以並不滿足搶佔的條件(沒有被搶佔的對象)。
2)當系統正在處理下半部中斷(Bottom Half)的時候,不允許進行搶佔;這裡的原因和第一種情況一樣。
3)當系統啟動並執行時候持有自旋鎖、寫鎖或讀鎖的時候,不允許進行搶佔;這些鎖用於支援SMP,在SMP系統中,這些鎖用來保護臨界區,控制不同處理器上運行進程對臨界區的互斥訪問,也就是說,當核心持有這些鎖的時候,它不希望被其它進程所搶佔。
4)當核心在運行進程發送器時,不允許進行搶佔;這個是顯而易見的,運行進程發送器實際上本身就是搶佔的一個過程,而且此時也沒有任何進程的上下文環境。
所以,利用SMP技術實現可搶佔核心要完成的主要工作包括修改中斷傳回碼、修改SMP的自旋鎖機制、修改發送器。
根據資料顯示,雖然利用SMP技術實現可搶佔核心對調度潛伏期的改善不如增加核心搶佔點方法,但由於它易於維護、可移植性好,現在已經被加入了標準的Linux2.6版本。
4 實現細粒度定時器
Linux本身的定時器精度比較粗糙,一般為100HZ,也就是說,定時器的中斷周期為10ms;但在即時系統中,對定時器的精度有更高的要求,例如,即時系統中的某個即時任務的運行周期必須小於2ms,在這種情況下,普通的Linux是無法滿足要求的,因為當定時器頻率為100HZ的時候,定時器中斷每 10ms才運行一次,才進行一次進程調度,所有周期任務的運行周期至少為10ms。
實現細粒度定時器的一種方法就是提高定時器的頻率,這種方法最直接也最容易實現,但由於定時器的頻率提高了,定時器的中斷服務程式的運行頻率也提高了,系統花在任務處理上的時間就會減少,從而降低系統的效能。所以,這種方法有一定的局限性,必須找到一個降低系統效能和提高時鐘精度的折衷點。
實現細粒度定時器的另一種方法就是使定時器運行在單觸發模式(one-shot mode)。這與周期模式(periodic mode)啟動並執行定時器不同,周期模式啟動並執行定時器,只要對它進行一次初始化操作,以後定時器就會周期的產生中斷,不再需要額外的對定時器進行編程操作;而當定時器運行於單觸發模式下時,每當定時器產生一次中斷後就不再運行,系統再根據當前任務對時間的要求計算出定時器下一次應該產生中斷的時間間隔,然後再對定時器進行編程,使它能在系統要求的將來某一時刻產生中斷。在單觸發模式下,定時器的定時精度能達到微秒級。不過需要注意的是,由於每次中斷後都要計算下一次中斷的時間,而且還要對定時器進行編程,這兩個操作會降低系統的效能。
具體在即時系統中使用哪種定時器方案,一般需要根據具體的應用而定,並不存在一種適用於所有即時應用的定時器方案。
5 最佳化進程調度
從前述對Linux任務響應模型的分析可知,任務回應時間的長短還與進程調度時間的長短有關,當減少進程調度時間時,也可以有效加快任務的響應速度。目前,對進程調度的最佳化主要使用將即時進程和普通進程分開來調度的策略,這可以通過分級調度來實現,通過這樣的方法,可以使即時進程的調度時間縮短,從而提高即時任務的響應速度。
6 即時雙核心機制
前述的幾種Linux核心的即時最佳化機制雖然可以明顯的提高任務的響應速度,增強Linux的即時性,但都無法滿足硬即時的要求。由於Linux核心本身的實現方式和複雜度,使得Linux本身始終不能適用於硬即時應用;但隨著Linux的應用越來越廣泛,對Linux滿足硬即時應用的要求越來越強烈;在這種環境下,即時雙核心機制開創了Linux支援硬即時應用的先河。在這種技術下,存在一個支援硬即時的微核心,它與Linux核心共同運行於硬體平台上,即時核心的優先順序高於Linux核心,它負責處理系統的即時任務,而Linux則負責處理非即時任務,只有當即時核心不再有即時任務需要處理的時候,Linux核心才能得到啟動並執行機會。
即時雙核心機制把一個系統看作由兩部分組成:即時部分和非即時部分,即時部分由即時微核心處理,非即時部分由Linux處理,它們之間可以通過管道或共用記憶體的方式進行通訊。這種機制雖然在建立即時任務的時候有一套不同於Linux本身的編程介面,但由於它可以與Linux進行通訊,從而可以將後續的大量處理工作交給Linux來完成。這樣,既保證了即時任務的硬即時要求,也保留了Linux本身的應用編程環境,可以充分的利用Linux下豐富的應用。

 

 原文地址 http://linux.chinaunix.net/bbs/thread-1038059-2-1.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.