[導讀]改善Linux內(nèi)核實時性方法的研究與實現(xiàn)
0 引言
由于Linux具有功能強大、源代碼開放、支持多種硬件平臺、模塊化的設計方案以及豐富的開發(fā)工具支持等特點,在實際系統(tǒng)中,得到了廣泛的應用。但由于其最初的設計目標為通用分時操作系統(tǒng),對于實時系統(tǒng)而言,Linux仍然存在核心不可搶占、關(guān)中斷、時鐘粒度
粗糙等缺陷。為了使其應用于嵌入式系統(tǒng),實時控制等領(lǐng)域,越來越多的廠家和研究機構(gòu)熱衷于改善其實時性,構(gòu)建基于Linux的實時操作系統(tǒng)。
在Linux 2.4和以前的版本,內(nèi)核是不可搶占的,也就是說,如果當前任務運行在內(nèi)核態(tài),即使當前有更緊急的任務需要運行,當前任務也不能被搶占。因此那個緊急任務必須等到當前任務執(zhí)行完內(nèi)核態(tài)的操作返回用戶態(tài)后或當前任務因需要等待某些條件滿足而主動讓出CPU才能被考慮執(zhí)行,這很明顯嚴重影響搶占延遲。在Linux 2.6中,內(nèi)核已經(jīng)可以
搶占,因而實時性得到了加強。但是內(nèi)核中仍有大量的不可搶占區(qū)域, 如由自旋鎖spinlock保護的臨界區(qū),以及一些失效搶占的臨界區(qū)。另一個影響Linux實時性的因素就是關(guān)中斷,同步操作中使用的關(guān)中斷指令增大了中斷延遲,這樣很多由中斷驅(qū)動的實時任務得不到及時的執(zhí)行,系統(tǒng)的實時性能得不到保障。因此提高Linux的可搶占性,改進其中斷機制有利于改善內(nèi)核的實時性。
本文詳細闡述了這些措施的原理并基于標準Linux2.6內(nèi)核加以實現(xiàn),最后通過測試,驗證了此改進方法的效果。
1 中斷線程化
1.1 Linux中斷對內(nèi)核實時性的影響
中斷處理是由內(nèi)核執(zhí)行的最敏感的任務之一,當內(nèi)核正打算去做一些別的事情時,中
斷隨時會到來,中斷當前的任務進而執(zhí)行中斷處理程序。因此內(nèi)核的目標就是讓中斷盡可能快的處理完,盡其所能把更多的處理工作向后推遲。為此Linux把中斷的處理分成上半部分和下半部分。上半部分立即執(zhí)行,下半部分將喚醒相應的和中斷處理相關(guān)的進程稍后執(zhí)行。雖然這種機制使得中斷處理變得更加高效和易于維護,但是對于系統(tǒng)如果有嚴重的網(wǎng)絡負載或其他I/O負載時,中斷將非常頻繁,內(nèi)核當前的實時任務會被不停中斷,這對于Linux的實時應用來說是不可接受的。
另外,Linux為了使內(nèi)核同步而采用了關(guān)中斷,在內(nèi)核的關(guān)中斷區(qū)域,中斷是被屏蔽的。即使此時有通過中斷驅(qū)動的實時任務也得不到響應,增加了實時任務的中斷延遲。實時化后的Linux中,自旋鎖被互斥鎖取代,而中斷處理代碼中大量運用了自旋鎖,中斷處理代碼就有可能因為得不到鎖而需要被掛到該鎖的等待隊列上去。但是只有可調(diào)度的進程才可這么做,如果中斷處理代碼仍然使用原來的自旋鎖,那么互斥鎖取代自旋鎖改進內(nèi)核實時性的努力將大打折扣。
線程化的中斷管理可以有效的解決這些問題。中斷線程化后,中斷將作為內(nèi)核線程運行而且賦予不同的實時優(yōu)先級,實時任務可以有比中斷線程更高的優(yōu)先級,這樣,實時任務就可以作為最高優(yōu)先級的執(zhí)行單元來運行,即使在嚴重負載下仍有實時性保證。另一方面中斷處理線程也可以因為在內(nèi)核同步中得不到鎖而掛載到鎖的等待隊列中。很多關(guān)中斷就不必真正的禁止硬件中斷了,而是禁止內(nèi)核進程搶占,這樣就可以減小中斷延遲。
1.2 設計與實現(xiàn)
Linux提供了kthread_create創(chuàng)建內(nèi)核線程,該內(nèi)核線程在內(nèi)核空間執(zhí)行,因此在調(diào)度時沒有用戶空間和內(nèi)核空間切換,使得其運行更為高效。中斷線程化要做的工作是創(chuàng)建中斷線程以及中斷的處理。中斷線程是在系統(tǒng)初始化或者調(diào)用requestirq函數(shù)時通過kthread_create函數(shù)創(chuàng)建的。其過程等同于如下功能代碼:
for (i = 0; i < NR_IRQS; i++) {
irq_desc_t *desc = irq_desc + i;
if (desc->action && !(desc->status & IRQ_NODELAY))
desc->thread = kthread_create();
}
對于非緊急中斷,kthread_create為其創(chuàng)建一個內(nèi)核線程,并且根據(jù)中斷號為其賦予一定的靜態(tài)實時優(yōu)先級和設置其調(diào)度策略。中斷到來后,內(nèi)核并不是直接進入中斷服務函數(shù),而是通過設置調(diào)度標志告知內(nèi)核,內(nèi)核調(diào)度程序比較該中斷線程的優(yōu)先級和當前運行任務的優(yōu)先級,作出調(diào)度決策。因此當前正在運行的高優(yōu)先級的實時任務不會受中斷的太大的影響,保證了實時任務運行的可靠性和準確性,中斷線程將會其他合適的時刻被調(diào)度執(zhí)行,而且Linux2.6內(nèi)核的O(1)調(diào)度機制也不會因為內(nèi)核線程數(shù)的增加在調(diào)度時間上額外增加調(diào)度開銷。對于緊急的中斷(比如時鐘中斷),內(nèi)核保持原來的中斷處理方式,而不為其創(chuàng)建中斷線程,這樣保證了緊急中斷的快速響應。
2 自旋鎖改互斥鎖
2.1 新的自旋鎖設計
為了同步不同內(nèi)核控制路徑對共享資源的訪問,標準Linux內(nèi)核提供了很多內(nèi)核同步原語,其中自旋鎖spinlock是一種廣泛應用于可搶占內(nèi)核,SMP環(huán)境下的內(nèi)核同步機制。在spinlock的保持期間,內(nèi)核是搶占失效的。被自旋鎖保護的區(qū)域稱為臨界區(qū),內(nèi)核中大量使用了spinlock,存在大量的內(nèi)核不可搶占的臨界區(qū),這將嚴重影響系統(tǒng)的實時性,我們使用新的實時互斥鎖rt_mutex來替換spinlock,即讓臨界區(qū)內(nèi)內(nèi)核可搶占。其結(jié)構(gòu)體如下:
typedef struct {
struct rt_mutex lock;
unsigned int break_lock;
} spinlock_t;
struct rt_mutex {
…
raw_spinlock_t wait_lock;
struct plist wait_list;
struct thread_info *owner;
……
}
類型raw_spinlock_t就是原來的spinlock_t。新的自旋鎖還是使用spinlock_t來標記。在結(jié)構(gòu)struct rt_mutex中的wait_list字段就是優(yōu)先級化的等待隊列。Owner字段為擁有該鎖的進程的環(huán)境信息。mutex比spinlock優(yōu)越的地方有這么幾點:(1)當遇到一個鎖住的臨界區(qū)時,任務被掛起到鎖的優(yōu)先級等待隊列wait_list中,臨界區(qū)解鎖時等待任務被激活。(2)內(nèi)核將一個鎖住的臨界區(qū)和一個任務關(guān)聯(lián),當獲得互斥鎖時將任務的標識存入鎖中。(3)臨界區(qū)可以在被保護的同時不禁止搶占。(4)在被鎖住的臨界區(qū)中可以實現(xiàn)優(yōu)先級繼承。
2.2 實時互斥鎖的操作
并不是所有內(nèi)核中的自旋鎖都可以轉(zhuǎn)換為互斥鎖的,一些底層的臨界區(qū)必須是不可搶占的,所以必須由不可搶占的自旋鎖保護,比如:保護硬件寄存器的鎖、調(diào)度器的運行隊列鎖、和其它不可搶占自旋鎖嵌套的鎖。實時內(nèi)核中,不可搶占的自旋鎖與RT互斥鎖共存,不可搶占的自旋鎖被重命為raw_spinlock_t。spin_lock函數(shù)利用gcc的內(nèi)嵌技術(shù)根據(jù)鎖的類型通過預處理選擇具體的鎖執(zhí)行函數(shù)。預處理器使用__builtin_types_compatible函數(shù),由宏TYPE_EQUAL調(diào)用:
#define TYPE_EQUAL(lock, type) \
__builtin_types_compatible_p(typeof(lock), type *)
函數(shù)映射結(jié)構(gòu)PICK_OP是允許兩種鎖共存的機制,PICK_OP在編譯階段將鎖操作轉(zhuǎn)化為合適的種類(mutex或者spinlock):
#define PICK_OP(type, optype, op, lock) \
do { \
if (TYPE_EQUAL((lock), type)) \
_raw_##optype##op((type *)(lock)); \
else if (TYPE_EQUAL(lock, spinlock_t)) \
_spin##op((spinlock_t *)(lock)); \
else __bad_spinlock_type(); \
} while (0)
#define spin_lock(lock) \
PICK_OP(raw_spinlock_t, spin, _lock, lock)
根據(jù)宏處理的結(jié)果,如果類型為spinlock_t,將運行函數(shù)_spin_lock,而如果類型為raw_spinlock_t,將運行函數(shù)_raw_spin_lock。對于實時rt_mutex獲取,當前任務由于優(yōu)先級高如果可以搶占該鎖,則把鎖的先前擁有者添加到該鎖的等待隊列中并且在新的鎖擁有者的task_struct中標記等待該鎖的所有任務;而如果不能獲得鎖,則把當前任務放到鎖的優(yōu)先級等待隊列中,直到鎖的擁有者釋放該鎖,喚醒等待隊列中最高優(yōu)先級的任務進入臨界區(qū)。為了防止優(yōu)先級反轉(zhuǎn),可以改變鎖的當前擁有者的優(yōu)先級為鎖的等待隊列中任務的最高優(yōu)先級。
實時互斥鎖的應用使得高優(yōu)先級的任務通過搶占鎖可以進入臨界區(qū),這樣內(nèi)核的不可搶占區(qū)的數(shù)量和范圍都大大縮小,內(nèi)核可搶占性有了很大的提高,充分減小了實時高優(yōu)先級任務的搶占延遲。
3 改進后的內(nèi)核實時性能測試
對Linux進行了實時化改造后,需要對其進行測試來確定系統(tǒng)是否符合實際應用的需要。實時性能測試主要包括測試內(nèi)核的最大中斷延遲和任務調(diào)度時間延遲兩個重要的指標。
中斷延遲反映的是中斷信號發(fā)生到內(nèi)核對中斷做出響應所需要的時間,通過利用并口的7號中斷,短路并口的9-10腳,其中10腳為中斷引腳,9口為并口數(shù)據(jù)口的高位,往IO口0X378寫8就可以引發(fā)中斷,然后在中斷服務程序里往0x378寫0就會重新拉低中斷引腳電平。用高精度示波器測量這個脈沖的寬度來測得中斷延遲時間。對于賽揚650MHz,內(nèi)存128M的工控平臺,負載為拷貝CF卡情況下,標準Linux2.6內(nèi)核最長中斷延遲為240us,而改進后的實時內(nèi)核最長中斷延遲為16us。
采用開源軟件LMbench3.0測試系統(tǒng)調(diào)度延遲時間。測試機器配置為:CPU ,Intel P4 2.8GHz,內(nèi)存512M,負載情況為拷貝硬盤、訪問網(wǎng)絡。標準Linux2.6內(nèi)核調(diào)度延遲為1038us,而改進后的內(nèi)核的調(diào)度延遲為140us。
可見改進后的內(nèi)核的最長中斷延遲和調(diào)度延遲比標準內(nèi)核要短很多,內(nèi)核的實時性能有了很大的提高。
4 結(jié)束語
針對標準Linux2.6內(nèi)核由于中斷關(guān)閉時間過長、內(nèi)核臨界不可搶占區(qū)過大而多,明顯存在實時性能方面的不足,提出了改進其實時性的方法,實現(xiàn)了實時Linux內(nèi)核的中斷線程化以及新的內(nèi)核同步自旋鎖,使其具有更短的中斷延遲和調(diào)度延遲。
本文作者的創(chuàng)新點:在標準的Linux2.6可搶占內(nèi)核上對其中斷處理機制進行線程化改造,大大的減小了中斷響應時間。另外對內(nèi)核同步機制采用新的自旋鎖使得內(nèi)核可搶占性能更加優(yōu)異,改進后的內(nèi)核可以適用于對Linux內(nèi)核實時性要求更高的場合。
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
世界上最大的兩家資產(chǎn)管理公司貝萊德(BlackRock)和先鋒(Vanguard)等金融機構(gòu)已在英國一項問詢中表示,它們將繼續(xù)投資化石燃料,并且不認同氣候變化計劃要求停止新的煤炭、石油和天然氣投資的觀點。貝萊德是試圖采取...
關(guān)鍵字:
CK
天然氣
AN
AC
成都2022年10月19日 /美通社/ -- 近期,平安養(yǎng)老險積極籌備個人養(yǎng)老金的產(chǎn)品設計和系統(tǒng)開發(fā)工作,發(fā)展多樣化的養(yǎng)老金融產(chǎn)品,推動商業(yè)養(yǎng)老保險、個人養(yǎng)老金、專屬商業(yè)養(yǎng)老保險等產(chǎn)品供給。 搭養(yǎng)老政策東風 ...
關(guān)鍵字:
溫度
BSP
東風
大眾
廣東佛山2022年10月19日 /美通社/ -- 空間是人居生活的基礎(chǔ)單元,承載著生存與活動的最基本功能。而對于理想空間的解構(gòu)意義卻在物理性容器之外,體現(xiàn)出人們對于空間和生活深層關(guān)系的思考,同時也塑造著人與空間的新型連接...
關(guān)鍵字:
溫度
BSP
智能化
進程
上海2022年10月19日 /美通社/ -- 10月17日晚間,安集科技披露業(yè)績預告。今年前三季度,公司預計實現(xiàn)營業(yè)收入7.54億元至8.33億元,同比增長60.24%至77.03%;歸母凈利潤預計為1.73億...
關(guān)鍵字:
電子
安集科技
BSP
EPS
北京2022年10月19日 /美通社/ -- 10月18日,北京市經(jīng)濟和信息化局發(fā)布2022年度第一批北京市市級企業(yè)技術(shù)中心創(chuàng)建名單的通知,諾誠健華正式獲得"北京市企業(yè)技術(shù)中心"認定。 北京市企業(yè)技...
關(guān)鍵字:
BSP
ARMA
COM
代碼
北京2022年10月18日 /美通社/ -- 10月14日,國際數(shù)據(jù)公司(IDC)發(fā)布《2022Q2中國軟件定義存儲及超融合市場研究報告》,報告顯示:2022年上半年浪潮超融合銷售額同比增長59.4%,近5倍于...
關(guān)鍵字:
IDC
BSP
數(shù)字化
數(shù)據(jù)中心
上海2022年10月18日 /美通社/ -- 2022年9月5日,是首都銀行集團成立60周年的紀念日。趁著首都銀行集團成立60周年與首都銀行(中國)在華深耕經(jīng)營12年的“大日子”,圍繞作為外資金融機構(gòu)對在華戰(zhàn)略的構(gòu)想和業(yè)...
關(guān)鍵字:
數(shù)字化
BSP
供應鏈
控制
東京2022年10月18日 /美通社/ -- NIPPON EXPRESS HOLDINGS株式會社(NIPPON EXPRESS HOLDINGS, INC.)旗下集團公司上海通運國際物流有限公司(Nipp...
關(guān)鍵字:
溫控
精密儀器
半導體制造
BSP
廣州2022年10月18日 /美通社/ -- 10月15日,第 132 屆中國進出口商品交易會("廣交會")于"云端"開幕。本屆廣交會上高新技術(shù)企業(yè)云集,展出的智能產(chǎn)品超過140,...
關(guān)鍵字:
中國智造
BSP
手機
CAN
要問機器人公司哪家強,波士頓動力絕對是其中的佼佼者。近來年該公司在機器人研發(fā)方面獲得的一些成果令人印象深刻,比如其開發(fā)的機器人會后空翻,自主爬樓梯等。這不,波士頓動力又發(fā)布了其機器人組團跳男團舞的新視頻,表演的機器人包括...
關(guān)鍵字:
機器人
BSP
工業(yè)機器人
現(xiàn)代汽車
南京2022年10月17日 /美通社/ -- 日前《2022第三屆中國高端家電品牌G50峰會》于浙江寧波落幕,來自兩百余名行業(yè)大咖、專家學者共同探討了在形勢依然嚴峻的當下,如何以科技創(chuàng)新、高端化轉(zhuǎn)型等手段,幫助...
關(guān)鍵字:
LINK
AI
BSP
智能家電
SAIHUB CAB 025M成功獲得安全試驗所UL美國與加拿大認證證書 新加坡2022年10月17日 /美通社/ -- SAI.TECH Global Corporation("SAI.TECH"...
關(guān)鍵字:
AI
BSP
PS
清潔能源
鄭州2022年10月17日 /美通社/ -- 近日,《福布斯》發(fā)布了"2022年全球最佳雇主榜單"(The World's Best Employers 2022),中國平安再度上榜并排名全...
關(guān)鍵字:
福布斯
ST
TI
BSP
通過第二項3nm設計選用擴展技術(shù)領(lǐng)先地位 第三季度強勁的貿(mào)易和設計選用反映出我們結(jié)合了IP和定制硅的混合業(yè)務模式 自2022年9月1日起,OpenFive首次并入集團 盡管宏觀環(huán)境困難,但管理層仍對業(yè)務...
關(guān)鍵字:
BSP
ALPHA
PEN
Silicon
(全球TMT2022年10月17日訊)日前,德勤中國旗下德勤管理咨詢中國數(shù)據(jù)科學卓越中心所出品的"機器學習推薦算法"論文被第十三屆IEEE 知識圖譜國際會議(簡稱"ICKG")收錄。ICKG是知識圖譜研究領(lǐng)域的國際權(quán)威...
關(guān)鍵字:
機器學習
IC
CK
MULTI
歐洲藥品管理局人用藥品管理委員會 (CHMP) 的積極建議是基于 EFFISAYIL® 1 研究結(jié)果,該研究是針對泛發(fā)性膿皰型銀屑病 (GPP) 發(fā)作患者的最大的臨床研究[1] 與斑塊狀銀屑病不同,GP...
關(guān)鍵字:
HM
BSP
GP
FOR
流體動壓滑動軸承為風機發(fā)展書寫嶄新篇章 軸承滑動層增材制造與精加工為工業(yè)級大規(guī)模生產(chǎn)鋪平道路 軸承設計從綜合性系統(tǒng)理念出發(fā) 德國施韋因富特和漢堡2022年10月17日 /美通社/ -- 舍弗勒推出了采...
關(guān)鍵字:
齒輪箱
滑動軸承
風力渦輪機
BSP
上海2022年10月17日 /美通社/ -- Brother內(nèi)置墨倉彩色噴墨一體機DCP-C421W新上市。此次Brother創(chuàng)新引入"按需打印,按頁付費"...
關(guān)鍵字:
DC
打印機
BSP
DESIGN
上海2022年10月17日 /美通社/ -- 日前,德勤中國迎來喜訊:旗下德勤管理咨詢中國數(shù)據(jù)科學卓越中心所出品的"機器學習推薦算法"論文被第十三屆IEEE 知識圖譜國際會議(以下簡稱"IC...
關(guān)鍵字:
機器學習
IC
CK
FM
慕尼黑2022年10月17日 /美通社/ -- TUV南德意志集團(以下簡稱"TUV南德")在EcoVadis全球企業(yè)社會責任評級中以總分71分榮獲金獎。...
關(guān)鍵字:
OV
ADIS
BSP
COM