《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于APIC時鐘的嵌入式Linux的實時性分析
基于APIC時鐘的嵌入式Linux的實時性分析
電子發(fā)燒友
摘要: 引言嵌入式Linux是指對Linux進行剪裁后,將其固化在單片機或者存儲器中,,應用于特定場合的專用Linux系統(tǒng)。嵌入式系統(tǒng)要求實時性能高,,但Linux為分時系統(tǒng)設計的操作系統(tǒng),,盡管最新的內核在實時性能方面有所提高,但它仍然不是一個實時系統(tǒng),,在很多場合不能滿足實時性要求,。一般地,,通過改造Linux的內核以提高其實時性能有2種策略:一種是采用底層編程的方法對Linux內核進行修改(如調度算法、時鐘修改等),,典型的系統(tǒng)有Kansas大學開發(fā)的KURT,。文獻提出了搶占式內核調度算法,容易引起內核優(yōu)先級翻轉,,文獻針對非搶占式內核,,增加搶占點,該方法需要優(yōu)秀的調度算法,。另一種途徑是Linux的外部實時性擴展,,在原有Linux基礎上再設計一個用于專門處理實時進程的內核,典型的系統(tǒng)有RTLinux,、RTAI等,。此方法的不足是RTLinux現在已經停止了更新,目前的開源版本僅支持2.4內核,,RTAI的設計原理和RTLinux類似,,也是一個實時性應用接口。本文采用APIC時鐘修改的方法對Linux內核進行實時化改造,,修改APIC中斷函數,,將APIC中斷和8254中斷排序,使得硬實時中斷的優(yōu)先級大于普通8254中斷,。通過多組仿真
Abstract:
Key words :

  引言

  嵌入式Linux是指對Linux進行剪裁后,,將其固化在單片機或者存儲器中,應用于特定場合的專用Linux系統(tǒng),。嵌入式系統(tǒng)要求實時性能高,,但Linux為分時系統(tǒng)設計的操作系統(tǒng),盡管最新的內核在實時性能方面有所提高,,但它仍然不是一個實時系統(tǒng),,在很多場合不能滿足實時性要求。一般地,,通過改造Linux的內核以提高其實時性能有2種策略:一種是采用底層編程的方法對Linux內核進行修改(如調度算法,、時鐘修改等),典型的系統(tǒng)有Kansas大學開發(fā)的KURT,。文獻提出了搶占式內核調度算法,,容易引起內核優(yōu)先級翻轉,文獻針對非搶占式內核,,增加搶占點,,該方法需要優(yōu)秀的調度算法。另一種途徑是Linux的外部實時性擴展,在原有Linux基礎上再設計一個用于專門處理實時進程的內核,,典型的系統(tǒng)有RTLinux,、RTAI等。此方法的不足是RTLinux現在已經停止了更新,,目前的開源版本僅支持2.4內核,,RTAI的設計原理和RTLinux類似,也是一個實時性應用接口,。

     本文采用APIC時鐘修改的方法對Linux內核進行實時化改造,,修改APIC中斷函數,將APIC中斷和8254中斷排序,,使得硬實時中斷的優(yōu)先級大于普通8254中斷,。通過多組仿真實驗,驗證了該改造方法是有效的,。

  1 嵌入式Linux的實時性分析

  Linux設計的初衷是系統(tǒng)吞吐量的平衡,,其內核試圖通過一種公平分配的策略來實現各進程平均地共享系統(tǒng)資源:

  (1)內核的不可搶占性:Linux的內核在單處理器上不可搶占,當一個任務進入內核態(tài)運行時,,一個具有更高優(yōu)先級的進程,,只有等待處于核心態(tài)的系統(tǒng)調用返回后方能執(zhí)行,這將導致優(yōu)先級逆轉,。

  (2)進程調度的不可搶占性:Linux作為一個分時系統(tǒng),,采用多級反饋輪轉調度算法,它保證了每一個進程都有一種調度策略,,但是都放在同一個隊列中運行,,這也是Linux作為實時操作系統(tǒng)的一個弱點。圖1是Linux調度機制框圖,。

  (3)時鐘中斷的精度不高:Linux 2.4.X內核的時鐘中斷周期為10 ms,時鐘粒度太過于粗糙,,不能滿足實時性要求,。

  (4)Linux的虛擬存儲管理:Linux采用段和頁機制的虛擬存儲管理技術,進程在硬盤和內存間的換入換出必然帶來額外的開銷,,造成很大的延遲,。

  

Linux調度機制框圖 www.elecfans.com

 

  由此可見,要將Linux應用于嵌入式系統(tǒng),,必須對其進行實時化改造,,以適應嵌入式領域要求。

  2 基于時鐘修改的內核改造方案

  在單CPU系統(tǒng)中,,與時間有關的活動都是由8254時鐘芯片來驅動的,,8254產生0號中斷。直接修改內核定時參數HZ的初值就可構造細粒度定時器。這種方式實現起來很簡單,,但是由此帶來頻繁的定時中斷使得系統(tǒng)的開銷很大,,當然隨著硬件速度的提高,這種開銷會逐步降低,。

  簡單地修改赫茲參數HZ進行實時化的方法顯然并不可取,。Linux 2.6內核的時鐘粒度是1 ms,但仍然與嵌入式領域的實時化要求差距較遠,,因此需要更高精度的時鐘,。目前常見的修改時鐘系統(tǒng)達到實時化的方法都是從軟件層面著手,這方面己獲得較大進展,,但是從時鐘系統(tǒng)的硬件結構分析并開展實時化工作也是一個值得注意的方向,。本文利用先進的APIC時鐘實現一個高精度時鐘系統(tǒng),提供了高精度的中斷響應,,從而以較少的改動獲得較高的實時性,。

  APIC以總線頻率工作,可立即執(zhí)行所有的定時器操作,,目前x86都有片內APIC,,用戶可在單CPU內使用APIC。APIC除了能提供高精度的時鐘外還具有一個重要的優(yōu)點,,是由于它位于片內,,對其編程只需幾個CPU指令周期,而對IntelX86的8254存取需要若干慢速的ISA總線指令,。

  在100MHz的CPU系統(tǒng)中,,處理一個中斷的時間不到10μs,因此高速CPU完全可在更短的時間內處理更多的APIC中斷,。理論上APIC可實現10 ns左右的系統(tǒng)時鐘,,但實際上在處理中斷時要耗費一些時間,因此中斷的響應時間要大于10 ns,。

  APIC本身提供了中斷處理函數apic_timer_interrupt,,該函數包括Irq_enter(),Run_realtimer_queue()和irq_exit(),,其中函數irq_ exit通常負責判斷當前是否有8254產生的軟中斷存在,,如果存在,就會觸發(fā)8254軟中斷,,這樣會造成APIC硬中斷處理延遲,。本文的思路就是修改irq_exit,在其中將各軟中斷線程和硬中斷線程進行排序,,使APIC硬中斷的優(yōu)先級高于軟中斷,,此時硬中斷線程得到優(yōu)先處理,,從而提高內核的實時性能。Irp_exit函數的核心代碼如下:

  

 

  上面調用invoke_softirq()函數執(zhí)行軟中斷使本文修改的重點,,修改中斷向量表,,對向量表中所有軟中斷和實時中斷進行排序,提前硬中斷的時間片,,這樣使當前處于pending狀態(tài)的軟中斷被屏蔽和懸掛,,直到硬中斷處理完成為止。將invoke_softirq()函數修改為:

  

 

  每個處理器時間片上能夠處理的中斷只有一個,,通過更新當前任務時間片,,使硬中斷在第一時間獲得CPU的響應,此時軟中斷將被屏蔽,,這就保證了硬中斷能夠得到實時的響應,。

  由于Linux采用8254完成時序分配,8254需要保留以保證系統(tǒng)的穩(wěn)定性,。這樣的話,,8254定時器和APIC必須共存,對于硬實時應用,,可采用APIC時鐘進行計時,。在8254中斷過程中,如果產生APIC中斷,,采用通過本文的方琺必須對優(yōu)先對APIC時鐘進行響應,,會出現8254中斷被搶占,此時上下文切換等操作可能導致不可預料的錯誤,。解決問題的方法可采取在APIC相應中斷期間,,關閉軟中斷,只有當APIC中斷執(zhí)行完畢后,,8254軟中斷才能夠被響應,。

  3 實時性能測試與分析

  實驗條件1:CPU:PⅢ300 MHz,內存為128 MB,,硬盤為5 400轉的15 GB臺式機硬盤,,操作系統(tǒng)為Fedora2.6.18內核。環(huán)境一(vd-d1)采用原版內核,,環(huán)境二(vd-d2)采用改進型內核。測試方法為通過測試內核的上,、下文切換,、內存延遲及模擬外部中斷來評價改造前后的性能。統(tǒng)計測試結果,,如圖2,、圖3所示。

  

 

  從實驗結果可知,在上,、下文切換中I/0讀/寫和文件打開和關閉,,改進型內核的實時性能都有明顯提高,模擬TCP通道子項,,改進型內核性能提高了約6倍,,但在對中斷響應要求不是很高的null call測試中,中斷響應時間幾乎相同,。改進型內核中斷響應速度始終穩(wěn)定在微妙級,。在處理器負荷較輕時原始內核有著良好的內存延遲,隨著處理器負荷的進一步加重,,原始內核的內存延遲急劇增加,。在最差情況下,系統(tǒng)響應速度較慢,,延遲時間達到5μs,。而改進型內核在處理器負荷變化時,系統(tǒng)的響應速度變化不明顯,,而且中斷響應速度始終穩(wěn)定在2μs以下,,性能穩(wěn)定。

  實驗條件2:采用改進型內核,,環(huán)境一(vd-d2)CPU:PIII 300 MHz,,環(huán)境二(vd-d3)CPU降頻為200 MHz(接近ARM9)。統(tǒng)計測試結果,,獲得它們的文件系統(tǒng)延遲結果見圖4,。圖4反映了同樣采用改進型內核,將CPU降頻前后,,測試結果差距在10μs以內,,可看出在文件系統(tǒng)延遲中,處理器頻率的較小差距對內核的影響不大,。如采用高主頻的處理器,,實驗結果差距較大。

  

 

  4 結語

  本文通過修改APIC時鐘,,可顯著地改進嵌入式系統(tǒng)的實時性能,,通過對比試驗可看出改進型內核具有良好的實時性能,滿足了系統(tǒng)實時性和穩(wěn)定性要求,。本文方法使得嵌入式Linux系統(tǒng)在高實時性領域中得到實際的應用,。


此內容為AET網站原創(chuàng),未經授權禁止轉載,。