RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核時延、實時化主流技術(shù)和發(fā)展

電子設(shè)計 ? 來源:電子產(chǎn)品世界 ? 作者:黃武陵,何小慶,艾 ? 2020-09-02 17:37 ? 次閱讀

Linux支持PowerPC、MIPS、ARMDSP等多種嵌入式處理器,逐漸被用于多種關(guān)鍵性場合。其中實時多媒體處理、工業(yè)控制、汽車電子等特定應(yīng)用對Linux提出了強(qiáng)實時性需求[1]。Linux提供了一些實時擴(kuò)展,但需要進(jìn)行實時性改造。本文針對嵌入式Linux實時化技術(shù)中的一些關(guān)鍵問題進(jìn)行了討論,如Linux內(nèi)核時延,實時化主流技術(shù)方案及其評價等。

Linux內(nèi)核時延

主流Linux雖然部分滿足POSIX 1003.1b實時擴(kuò)展標(biāo)準(zhǔn),但還不完全是一個實時操作系統(tǒng),主要表現(xiàn)為:

* 任務(wù)調(diào)度與內(nèi)核搶占

2.6版本內(nèi)核添加了許多搶占點,使進(jìn)程執(zhí)行在內(nèi)核代碼時也可被搶占。為支持內(nèi)核代碼可搶占,在2.6版內(nèi)核中通過采用禁用中斷的自旋鎖來保護(hù)臨界區(qū)。但此時如果有低優(yōu)先級進(jìn)程在臨界區(qū)中執(zhí)行,高優(yōu)先級進(jìn)程即使不訪問低優(yōu)先級所保護(hù)的臨界區(qū),也必須等待低優(yōu)先級進(jìn)程退出臨界區(qū)。

* 中斷延遲

在主流Linux內(nèi)核設(shè)計中,中斷可以搶占最高優(yōu)先級的任務(wù),使高優(yōu)先級任務(wù)被阻塞的最長時間不確定。而且,由于內(nèi)核為保護(hù)臨界區(qū)需要關(guān)閉中斷,更加增長了高優(yōu)先級任務(wù)阻塞時間。

* 時鐘精度

Linux通過硬件時鐘編程來產(chǎn)生毫秒級周期性時鐘中斷進(jìn)行內(nèi)核時間管理,無法滿足實時系統(tǒng)較高精度的調(diào)度要求。內(nèi)核定時器精度同樣也受限于時鐘中斷,無法滿足實時系統(tǒng)的高精度定時需求。

* 其他延遲

此外,Linux內(nèi)核其他子系統(tǒng)也存在多種延遲。比如為了增強(qiáng)內(nèi)核性能和減少內(nèi)存消耗,Linux僅在需要時裝載程序地址空間相應(yīng)的內(nèi)存頁。當(dāng)被存取內(nèi)容(如代碼)不在RAM中則內(nèi)存管理單元(MMU)將產(chǎn)生頁表錯誤(Page-Fault)觸發(fā)頁面裝載,造成實時進(jìn)程響應(yīng)時間不確定。

Linux實時化技術(shù)發(fā)展

主流Linux內(nèi)核1.x、2.2.x和2.4.x版本的Linux內(nèi)核無搶占支持,直到2.6版本的Linux內(nèi)核才支持可搶占內(nèi)核,支持臨界區(qū)外的內(nèi)核搶占和可搶占的大內(nèi)核鎖。在此基礎(chǔ)上,Linux采用了下列兩類實時化技術(shù)。

* 雙內(nèi)核方式

Linux內(nèi)核實時化雙內(nèi)核方式以RTLinux、RTAI和Xenomai等為典型代表。其中RT-Linux實現(xiàn)了一個微內(nèi)核實時操作系統(tǒng)支持底層任務(wù)管理、中斷服務(wù)例程、底層任務(wù)通信隊列等。普通Linux作為實時操作系統(tǒng)的最低優(yōu)先級任務(wù),Linux下的任務(wù)通過FIFO命名管道和實時任務(wù)進(jìn)行通信,如圖1所示。

Linux內(nèi)核時延、實時化主流技術(shù)和發(fā)展

圖1 雙內(nèi)核架構(gòu)的Linux實時化技術(shù)

當(dāng)Linux要關(guān)閉中斷時,實時微內(nèi)核會截取并記錄這個請求,通過軟件來模擬中斷控制器,而沒有真正關(guān)閉硬件中斷,避免了由于關(guān)中斷所造成的響應(yīng)延遲。RT-Linux將系統(tǒng)實時時鐘設(shè)置為單次觸發(fā)模式,提供微秒級的時鐘精度。RTAI類似RTLinux的實現(xiàn)方式,不同之處在于它修改了體系結(jié)構(gòu)相關(guān)代碼,形成一個實時硬件抽象層(RTHAL),使其實時任務(wù)能在任何時刻中斷普通Linux任務(wù),兩者之間通過非阻塞隊列進(jìn)行通訊。RTAI將直接修改Linux內(nèi)核的代碼減至最少,具有更好的可移植性。Xenomai以RTAI為基礎(chǔ),也稱RTAI /Fusion。采用了Adeos微內(nèi)核替代RTAI的硬件抽象層[11]。其特色還在于模仿了傳統(tǒng)RTOS的API接口,推動傳統(tǒng)RTOS應(yīng)用在GNU/Linux下的移植。類似還有基于Fiasco微內(nèi)核的L4Linux等開源項目[12]。

* 內(nèi)核補(bǔ)丁方式

雙內(nèi)核實時方案下,實時任務(wù)需要按照微內(nèi)核實時操作系統(tǒng)提供的另外一套API進(jìn)行設(shè)計。而內(nèi)核補(bǔ)丁方式則不改變Linux的API,原有應(yīng)用程序可在實時化后的操作系統(tǒng)上運行,典型的有早期研究性的Kurt-Linux和Red-Linux,商業(yè)版本的MontaVista [2]、TimeSys 和Wind River Linux,以及現(xiàn)階段Ingo Monlnar等人開發(fā)的實時搶占補(bǔ)丁內(nèi)核等[3]。

Kurt-Linux是第一個基于普通Linux的實時操作系統(tǒng)。通過正常態(tài)、實時態(tài)和混合態(tài)進(jìn)行實時和非實時任務(wù)的劃分。RED-Linux通過任務(wù)多種屬性和調(diào)度程序,可以實現(xiàn)多種調(diào)度算法。采用軟件模擬中斷管理,并在內(nèi)核插入了許多搶占點,提高了系統(tǒng)調(diào)度精度。

MontaVista Linux在低延遲補(bǔ)丁以及可搶占內(nèi)核補(bǔ)丁基礎(chǔ)上[4],通過開發(fā)內(nèi)核O(1)實時調(diào)度程序并對可搶占內(nèi)核進(jìn)行了改進(jìn)和測試,Linux 2.4內(nèi)核時代MontaVista Linux 作為商業(yè)成熟產(chǎn)品在實時性上有較強(qiáng)的優(yōu)勢。TimeSys Linux通過內(nèi)核模塊的方式也提供了高精度時鐘、優(yōu)先級繼承mutex等支持。

2.6版本的主流內(nèi)核吸收了以上技術(shù),支持CONFIG_PREEMPT_NONE,CONFIG_PREEMPT_VOLUNTARY和CONFIG_PREEMPT等多種配置選項。分別適合于計算型任務(wù)系統(tǒng),桌面用戶系統(tǒng)和毫秒級延遲嵌入式系統(tǒng)。2005年,針對2.6內(nèi)核MontaVista推出了實時Linux計劃,推進(jìn)了Linux內(nèi)核實時化進(jìn)程。隨后Ingo Molnar發(fā)布了新的實時搶占補(bǔ)丁,并逐漸成為Linux內(nèi)核實時主流技術(shù),也為包括MontaVista Linux,Wind River Linux采用和補(bǔ)充,本文后續(xù)內(nèi)容這要涉及實時搶占補(bǔ)丁。

Linux實時化技術(shù)及評價

2.6版本Linux內(nèi)核實時性能有一定增強(qiáng),雙內(nèi)核方式的Linux實時化技術(shù)也在不斷發(fā)展中。原來由FSMLab維護(hù)的RTLinux,其版權(quán)在2007年2月被Wind River購買,先對在開源社區(qū)就不很活躍,RTAI支持x386等體系結(jié)構(gòu),但由于其代碼較難維護(hù)、bug較難調(diào)試等原因,許多開發(fā)者加入了Xenomai項目。Xenomai支持最新2.6版 Linux,相比之下代碼相對穩(wěn)定和可維護(hù),開發(fā)模式較活躍。

內(nèi)核補(bǔ)丁方式的Linux實時化技術(shù)在2.6版內(nèi)核基礎(chǔ)上做了大量改進(jìn),使得內(nèi)核中除了中斷關(guān)閉和IRQ線程分派、調(diào)度和上下文切換之外的絕大部分代碼都可以被搶占,不可搶占的自旋鎖保護(hù)臨界區(qū)從一千多個減少到幾十個,使得內(nèi)核實時性得到極大的提高,獲得社區(qū)廣泛支持并逐漸成為Linux實時化主流技術(shù)。

Linux內(nèi)核實時化改進(jìn)

實時搶占內(nèi)核補(bǔ)丁針對Linux各種延遲進(jìn)行了實時化改進(jìn),主要包括了幾個方面的技術(shù)。

* 實時搶占內(nèi)核

為了實現(xiàn)內(nèi)核完全可搶占,實時內(nèi)核臨界區(qū)用高性能優(yōu)先級繼承mutex替換原來自旋鎖(spin-lock)來進(jìn)行保護(hù),使得在臨界區(qū)內(nèi)的執(zhí)行也可被搶占。只有當(dāng)線程想訪問一個其他線程正在訪問的臨界區(qū)時,才被調(diào)度至睡眠,直到所保護(hù)的臨界區(qū)被釋放時被喚醒。

在實時搶占內(nèi)核中通過優(yōu)先級繼承機(jī)制(PI)在線程被一個低優(yōu)先級線程所持有的資源阻塞時,低優(yōu)先級線程通過繼承被阻塞線程優(yōu)先級,盡快執(zhí)行并釋放所持資源而不被其他線程所搶占。

* 新型鎖機(jī)制帶來內(nèi)核性能提升

實時搶占補(bǔ)丁替換了大內(nèi)核鎖(BKL),將BKL從spinlock改成是mutex,持有BKL的線程也可以被搶占,減少了內(nèi)核調(diào)度延遲。此外,實時搶占補(bǔ)丁通過mutex替代semaphore,避免了不必要的時間負(fù)載。實時搶占補(bǔ)丁實現(xiàn)了可搶占的RCU(Read Copy Update)鎖和串行化讀寫鎖,保證了執(zhí)行可預(yù)測性,提高了性能。

* 中斷線程化

實時搶占補(bǔ)丁通過內(nèi)核線程來實現(xiàn)一些硬件中斷和軟件中斷的服務(wù)程序。體系結(jié)構(gòu)相關(guān)處理代碼設(shè)置IRQ狀態(tài)、檢查線程化的中斷是否使能,并喚醒相關(guān)線程。在中斷線程被調(diào)度執(zhí)行后,進(jìn)行中斷服務(wù)處理。在實時搶占內(nèi)核中,用戶線程優(yōu)先級可以高于設(shè)備中斷服務(wù)線程。實時任務(wù)無需等待設(shè)備驅(qū)動處理程序執(zhí)行,減小了實時搶占延遲。

* 時鐘系統(tǒng)改進(jìn)

實時搶占內(nèi)核的時鐘系統(tǒng)重新進(jìn)行了設(shè)計,實現(xiàn)了高精度定時器[6]。時鐘精度不再依賴jiffies,使POSIX定時器和nanosleep精度由具體硬件所能提供的精度決定,使得gettimeofday能夠提供實時系統(tǒng)所需的精確時間值。

* 其他改進(jìn)

Linux在用戶層支持性能良好的futex,實現(xiàn)原理類似于內(nèi)核優(yōu)先級繼承mutex,僅在產(chǎn)生競態(tài)時進(jìn)入內(nèi)核,提高了應(yīng)用程序性能。此外,實時搶占補(bǔ)丁內(nèi)核還提供mutex死鎖檢測、延遲跟蹤與測量、中斷關(guān)閉跟蹤與延遲測量、搶占延遲測量等內(nèi)核調(diào)試與診斷、內(nèi)核性能測量與調(diào)優(yōu)等工具、實時Trace支持(Ftrace)等支持。

現(xiàn)階段實時化技術(shù)在各體系結(jié)構(gòu)上逐漸得到了支持,如表1所示。

表1 Linux實時搶占補(bǔ)丁技術(shù)支持情況

實時搶占內(nèi)核延遲

現(xiàn)階段,實時搶占補(bǔ)丁技術(shù)仍處于完善過程中,其表現(xiàn)在以下幾點不足。

* 中斷延遲

即使不發(fā)生中斷線程搶占,實時搶占內(nèi)核相對原來中斷服務(wù)機(jī)制額外增加一對上下文切換時間,用于喚醒中斷服務(wù)線程執(zhí)行和進(jìn)入睡眠狀態(tài)。此外,內(nèi)核中還存在少量用raw_spinlock鎖禁用中斷來保護(hù)的臨界區(qū),需要計算這些鎖造成的中斷延遲。

* 任務(wù)搶占延遲

內(nèi)核搶占延遲主要是由于在內(nèi)核中使用各種鎖機(jī)制用于控制任務(wù)和中斷對臨界區(qū)的訪問所造成的,特別是實時搶占內(nèi)核中為了避免優(yōu)先級逆轉(zhuǎn)增加的鎖機(jī)制帶來了額外時間負(fù)載。

* 內(nèi)核模塊其他延遲

在實時搶占補(bǔ)丁中,內(nèi)存管理模塊還需減少頁表錯誤引起的延遲,降低mlockall內(nèi)存鎖存造成的性能降級影響。實時搶占內(nèi)核中高精度定時器的使用導(dǎo)致了額外定時器管理時間負(fù)載。此外,內(nèi)核中一些驅(qū)動程序需要針對實時應(yīng)用進(jìn)行優(yōu)化來提高實時響應(yīng)。軟浮點處理和軟浮點內(nèi)核仿真需要和實時搶占補(bǔ)丁兼容,能耗管理子系統(tǒng)還需要具備實時系統(tǒng)感知能力。

實時搶占內(nèi)核性能測試

本文在Intel Pentium M 1.7 GHz處理器上進(jìn)行了測試。測試環(huán)境包括:Linux內(nèi)核2.6.25.8最小配置;patch-2.6.25.8-rt7實時補(bǔ)??;libc 2.5+和busybox-1.10.0構(gòu)建initrdfs方式的根文件系統(tǒng)。

* 中斷延遲

采用實時搶占補(bǔ)丁支持的內(nèi)核中斷延遲測量工具測量中斷關(guān)閉(IRQ OFF)時間。在100%負(fù)載情況下,十萬采樣點中,最大值在31 us左右,絕大多數(shù)在1 us左右,如圖2所示。

圖2 實時搶占內(nèi)核中斷關(guān)閉延遲分布

* 任務(wù)搶占延遲

內(nèi)核搶占關(guān)閉時間采用實時搶占補(bǔ)丁所支持的內(nèi)核搶占關(guān)閉測量工具測量。實時搶占內(nèi)核和普通Linux內(nèi)核情況比較如表2所示。

表2 內(nèi)核任務(wù)搶占關(guān)閉時間分布

實時應(yīng)用中周期性任務(wù)需要能在確定的時間內(nèi)得到執(zhí)行。實時搶占內(nèi)核和普通內(nèi)核下的周期性任務(wù)延遲對比中可以看出實時搶占內(nèi)核提供了實時任務(wù)的精確執(zhí)行,如圖3所示。

圖3 實時搶占內(nèi)核和普通內(nèi)核下周期性任務(wù)調(diào)度延遲對比

結(jié)語

嵌入式應(yīng)用對Linux實時性要求越來越多,主流內(nèi)核逐漸加入實時化技術(shù),最終將為實時應(yīng)用提供完美解決方案。本文綜述了Linux內(nèi)核時延,介紹了Linux內(nèi)核實時化發(fā)展,分析了內(nèi)核實時化主流技術(shù),并分析了實時化技術(shù)不足之處,為更好地理解Linux實時化技術(shù)提供了參考。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19259

    瀏覽量

    229651
  • 嵌入式
    +關(guān)注

    關(guān)注

    5082

    文章

    19104

    瀏覽量

    304800
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209326
收藏 人收藏

    評論

    相關(guān)推薦

    Linux 實時技術(shù)與典型實現(xiàn)分析(一)

    Ingo's RT patch是又一個Linux實時實現(xiàn),它采用了與TimeSys完全相同的技術(shù)路線,而且有一些實現(xiàn)是基于TimeSys的源代碼的,如IRQ和 softirq線程
    發(fā)表于 10-06 13:42

    Linux 2.6 內(nèi)核中的最新電源管理技術(shù)綜述

    發(fā)展方向?! ∽鳛楸鞠盗形恼碌拈_篇之作,首先要向大家介紹的是 cpufreq,它是 Linux 2.6內(nèi)核為了更好的支持近年來在各款主流 CPU 處理器中出現(xiàn)的變頻
    發(fā)表于 09-28 14:15

    如何進(jìn)行嵌入式Linux內(nèi)核實時研究?

    的設(shè)計原理和RTLinux類似,也是一個實時性應(yīng)用接口。那我們究竟該如何進(jìn)行嵌入式Linux內(nèi)核實時研究?修改APIC中斷函數(shù),將APIC中斷和8254中斷排序,使得硬
    發(fā)表于 08-06 07:15

    嵌入式Linux實時技術(shù)是什么?

    一些實時擴(kuò)展,但需要進(jìn)行實時性改造。本文針對嵌入式Linux實時技術(shù)中的一些關(guān)鍵問題進(jìn)行了討論
    發(fā)表于 10-08 14:19

    詳細(xì)解析,嵌入式Linux實現(xiàn)實時技術(shù)過程

    一些實時擴(kuò)展,但需要進(jìn)行實時性改造。本文針對嵌入式Linux實時技術(shù)中的一些關(guān)鍵問題進(jìn)行了討論
    發(fā)表于 04-30 09:00

    嵌入式Linux實時技術(shù)詳談

    一些實時擴(kuò)展,但需要進(jìn)行實時性改造。本文針對嵌入式Linux實時技術(shù)中的一些關(guān)鍵問題進(jìn)行了討論
    發(fā)表于 08-03 07:00

    嵌入式Linux實時技術(shù)

    嵌入式Linux實時技術(shù)  引言   Linux支持PowerPC、MIPS、ARM、DSP等多種嵌入式處理器,逐漸被用于多種關(guān)鍵性
    發(fā)表于 03-03 16:40 ?1477次閱讀
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>實時</b><b class='flag-5'>化</b><b class='flag-5'>技術(shù)</b>

    嵌入式Linux實時性能提高方案

    本文在分析Linux實時性的同時,探討了其本身提供的一些支持實時性的機(jī)制以及在實時應(yīng)用中的技術(shù)障礙。而后,基于增強(qiáng)
    發(fā)表于 05-06 10:32 ?1272次閱讀
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>實時</b>性能提高方案

    基于APIC時鐘的嵌入式Linux內(nèi)核實時研究

    本文采用APIC時鐘修改的方法對Linux內(nèi)核進(jìn)行實時改造,修改APIC中斷函數(shù),將APIC中斷和8254中斷排序,使得硬實時中斷的優(yōu)先級
    發(fā)表于 04-25 09:43 ?926次閱讀
    基于APIC時鐘的嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核實時</b><b class='flag-5'>化</b>研究

    REDIce-Linux--靈活的實時Linux內(nèi)核

    REDSonic, Inc. REDSonic的RedIce-Linux是一個實時Linux內(nèi)核,設(shè)計來支持以任務(wù)和時間為臨界的應(yīng)用,為你的系統(tǒng)提供質(zhì)量服務(wù)。RedIce-
    發(fā)表于 11-08 10:24 ?12次下載

    嵌入式Linux實時技術(shù)

    ]。Linux提供了一些實時擴(kuò)展,但需要進(jìn)行實時性改造。本文針對嵌入式Linux實時
    發(fā)表于 12-01 12:23 ?508次閱讀
     嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>實時</b><b class='flag-5'>化</b><b class='flag-5'>技術(shù)</b>

    怎么才能更好的理解嵌入式操作系統(tǒng)Linux實時技術(shù)

    一些實時擴(kuò)展,但需要進(jìn)行實時性改造。本文針對嵌入式Linux實時技術(shù)中的一些關(guān)鍵問題進(jìn)行了討論
    發(fā)表于 09-03 17:44 ?1227次閱讀

    如何使用BPF對Linux內(nèi)核進(jìn)行實時跟蹤

    我們可以使用BPF對Linux內(nèi)核進(jìn)行跟蹤,收集我們想要的內(nèi)核數(shù)據(jù),從而對Linux中的程序進(jìn)行分析和調(diào)試。與其它的跟蹤技術(shù)相比,使用BPF
    的頭像 發(fā)表于 06-30 17:28 ?2292次閱讀
    如何使用BPF對<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>進(jìn)行<b class='flag-5'>實時</b>跟蹤

    使用 PREEMPT_RT 在 Ubuntu 中構(gòu)建實時 Linux 內(nèi)核

    盟通技術(shù)干貨構(gòu)建實時Linux內(nèi)核簡介盟通技術(shù)干貨Motrotech如果需要在Linux中實現(xiàn)
    的頭像 發(fā)表于 04-12 08:36 ?2414次閱讀
    使用 PREEMPT_RT 在 Ubuntu 中構(gòu)建<b class='flag-5'>實時</b> <b class='flag-5'>Linux</b> <b class='flag-5'>內(nèi)核</b>

    Linux內(nèi)核測試技術(shù)

    Linux 內(nèi)核Linux操作系統(tǒng)的核心部分,負(fù)責(zé)管理硬件資源和提供系統(tǒng)調(diào)用接口。隨著 Linux 內(nèi)核的不斷
    的頭像 發(fā)表于 08-13 13:42 ?482次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>測試<b class='flag-5'>技術(shù)</b>
    RM新时代网站-首页