LWN:實(shí)時(shí)Linux和嵌入式Linux的當(dāng)前狀態(tài)!
共 5809字,需瀏覽 12分鐘
·
2024-05-15 12:58
關(guān)注了就能看到更多這么棒的文章哦~
The state of realtime and embedded Linux
By Jonathan Corbet
April 25, 2024
OSSNA
ChatGPT translation
https://lwn.net/Articles/970555/
Linux 以存在于眾多類型的系統(tǒng)中而聞名。其中服務(wù)器和數(shù)據(jù)中心確實(shí)獲得了大量的關(guān)注,而今年又總是被稱為 Linux 桌面之年,其實(shí)還是有很多 Linux 是運(yùn)行在實(shí)時(shí)和嵌入式場(chǎng)景里。在 2024 北美開源峰會(huì)中的 realtime and embedded 主題中,聽(tīng)眾們了解到了 Linux 近期在這些方面的進(jìn)展。針對(duì)實(shí)時(shí) Linux 的工作已經(jīng)快要完結(jié)了,而嵌入式相關(guān)社區(qū)則還在全力推動(dòng)開發(fā)工作。
完善實(shí)時(shí)性工作
實(shí)時(shí)性相關(guān)討論是以小組討論的形式進(jìn)行,參與討論的有 Kate Stewart、Daniel Bristot de Oliveira、Sebastian Siewior,還有代表 Thomas Gleixner 的一個(gè)空椅子,由于航空公司的原因,他錯(cuò)過(guò)了會(huì)議時(shí)間。Bristot 開始詢問(wèn)實(shí)時(shí)性社區(qū),推動(dòng)所有工作的動(dòng)機(jī)是什么。Stewart 回答說(shuō),先有了一個(gè)問(wèn)題(需要一個(gè)能夠滿足實(shí)時(shí)響應(yīng)需求的 Linux 版本),然后一些公司聯(lián)合資助了它。單單最新階段就是一個(gè)長(zhǎng)達(dá)八年的過(guò)程,但這個(gè)項(xiàng)目接近完成。
Siewior 補(bǔ)充說(shuō),實(shí)時(shí)性的特有存儲(chǔ)庫(kù)中幾乎沒(méi)有什么核心代碼了;大部分與 持續(xù)進(jìn)行的 printk() 工作 有關(guān)。其余的是驅(qū)動(dòng)程序的更改等。Stewart 表示,完成這項(xiàng)工作所需的資金支柱也已經(jīng)具備了。Siewior 指出,也正在努力將與實(shí)時(shí)性相關(guān)的修復(fù)內(nèi)容向后移植到舊內(nèi)核中。
Bristot 表示,調(diào)度和工具方面的工作仍在進(jìn)行中。人們已經(jīng)花費(fèi)多年致力于解決 實(shí)時(shí)性限流(realtime throttling) 的問(wèn)題。為了防止一個(gè)失控的實(shí)時(shí)性進(jìn)程拖死系統(tǒng),哪怕沒(méi)有其他人在爭(zhēng)奪 CPU,內(nèi)核也只允許實(shí)時(shí)任務(wù)使用可用 CPU 時(shí)間的 95%。實(shí)時(shí)性開發(fā)者希望也能用上那 5%,但又不會(huì)損失在系統(tǒng)失控時(shí)恢復(fù)出來(lái)的能力。Bristot 表示,提出的許多解決方案會(huì)在未來(lái)給開發(fā)社區(qū)帶來(lái)限制。他從這個(gè)經(jīng)驗(yàn)中得出的結(jié)論是“走捷徑是不好的”,并且從長(zhǎng)遠(yuǎn)來(lái)看并沒(méi)有幫助。
目前出現(xiàn)的針對(duì)這個(gè)限流問(wèn)題的解決方案是 截止期服務(wù)器(deadline servers)。內(nèi)核的 截止期調(diào)度器 以比實(shí)時(shí)任務(wù)更高的優(yōu)先級(jí)運(yùn)行任務(wù),這意味著它不會(huì)被失控的實(shí)時(shí)任務(wù)卡住。截止期服務(wù)器是一個(gè)任務(wù),會(huì)在截止期調(diào)度器下以 5% 的 CPU 份額來(lái)運(yùn)行,如果有任何非實(shí)時(shí)性的進(jìn)程需要 CPU,那么就運(yùn)行那些進(jìn)程。必須要做一些工作來(lái)在合適的時(shí)間運(yùn)行截止期服務(wù)器,從而最小化對(duì)實(shí)時(shí)性任務(wù)的影響。
Stewart 問(wèn)上游實(shí)時(shí)性代碼是否對(duì)內(nèi)核的其余部分產(chǎn)生了影響;Bristot 回答說(shuō),實(shí)時(shí)性討論現(xiàn)在只是內(nèi)核開發(fā)過(guò)程的一部分,而不是一個(gè)獨(dú)立事物了。Siewior 觀察到,實(shí)時(shí)性代碼推送到 upstream 的動(dòng)作導(dǎo)致完成后續(xù)工作的關(guān)注變少了。Bristot 指出,內(nèi)核中有很多有用的代碼起源于實(shí)時(shí)性代碼倉(cāng)庫(kù);現(xiàn)在它已經(jīng) upstream 了,每個(gè)人都從中受益,但他們忘記了它的來(lái)源。
一位觀眾問(wèn)實(shí)時(shí)性社區(qū)接下來(lái)要開展的項(xiàng)目。Bristot 表示,到目前為止,焦點(diǎn)幾乎完全集中在延遲方面,但現(xiàn)在是時(shí)候開始更多地考慮其他相關(guān)問(wèn)題了。首先要解決的是多個(gè)任務(wù)的調(diào)度以及優(yōu)化所有任務(wù)的響應(yīng)時(shí)間。與多個(gè)實(shí)時(shí)任務(wù)共享一個(gè) CPU 可能會(huì)引發(fā)更多的鎖問(wèn)題;這實(shí)際上是在推動(dòng)將 代理執(zhí)行 的工作合并到主線中。
Bristot 提出了截止期調(diào)度器的一個(gè)長(zhǎng)期存在的問(wèn)題:它的準(zhǔn)入控制算法(決定是否可以接受新的截止期任務(wù),同時(shí)確保所有任務(wù)都能滿足它們的截止期)是在整個(gè)系統(tǒng)范圍內(nèi)的全局性判斷。這種設(shè)計(jì)帶來(lái)的副作用是不能為截止期任務(wù)設(shè)置 CPU 親和性,但用戶希望能夠這樣做。禁用準(zhǔn)入控制就可以讓用戶來(lái)安排他們的任務(wù),但這會(huì)導(dǎo)致?lián)p失一個(gè)重要的保證措施,并且全局策略也是低效的做法。因此,人們希望尋找到其他的對(duì)系統(tǒng)中各種工作進(jìn)行區(qū)分的方法。
Stewart 將討論轉(zhuǎn)向人們?nèi)绾螀⑴c到實(shí)時(shí)性 Linux 中來(lái);Siewior 迅速指出,需要更好的文檔。一位觀眾也表達(dá)了這種觀點(diǎn),說(shuō)用戶必須重新認(rèn)識(shí)應(yīng)該如何設(shè)置實(shí)時(shí)系統(tǒng);他們會(huì)從一些更好的指南中受益。他還指出,實(shí)時(shí) Linux 分析工具(RTLA) 在這項(xiàng)任務(wù)中已經(jīng)證明是有幫助的,但這只是一個(gè)開始。Bristot 回答說(shuō),有些事情需要時(shí)間;RTLA 誕生于 2010 年,但多年后才真正變得有用。
另一位觀眾強(qiáng)調(diào)了這一點(diǎn);用戶急需指南來(lái)幫助他們進(jìn)行設(shè)置、基準(zhǔn)測(cè)試等。Bristot 回答說(shuō),“在合入內(nèi)核之后就為此做好了重要準(zhǔn)備”,后續(xù)可以解決這類問(wèn)題 — 只是要隨著時(shí)間的推移。一個(gè)適用于所有用例的解決方案可以鼓勵(lì)進(jìn)一步的發(fā)展。現(xiàn)在比如說(shuō)就很容易向 RTLA 添加新工具,其他人正在對(duì)它們做出貢獻(xiàn)。
Tim Bird 表示,他一直在試圖說(shuō)服太空領(lǐng)域的人員,Linux 是一個(gè)實(shí)時(shí)系統(tǒng),但是“他們并不相信”。實(shí)時(shí) Linux 仍然存在一個(gè)信息傳遞問(wèn)題,他說(shuō)。RTLA 在這方面并沒(méi)有幫助,它是一個(gè)“顯示 Linux 在實(shí)時(shí)性方面失敗的所有方式”的工具;它傳遞了錯(cuò)誤的信息。Bristot 回答說(shuō),實(shí)時(shí)性不僅僅是關(guān)于延遲的;解決問(wèn)題需要理解相關(guān)的工作負(fù)載,使其適應(yīng) Linux 執(zhí)行模型,并使用工具(如 RTLA)來(lái)查找不當(dāng)行為。在這方面,Linux 和其他操作系統(tǒng)類似。Siewior 補(bǔ)充說(shuō),如果購(gòu)買了一個(gè) 100GB/秒 的網(wǎng)絡(luò)卡,那種帶寬不會(huì)立即出現(xiàn)。系統(tǒng)必須進(jìn)行調(diào)整才能獲得預(yù)期的性能水平;實(shí)時(shí)性是相同的情況。
Bristot 堅(jiān)稱,Linux 是一個(gè)事實(shí)上的實(shí)時(shí)方案選項(xiàng);通過(guò)適當(dāng)?shù)恼{(diào)優(yōu)和使用 CPU 隔離就能達(dá)成,他說(shuō),RHEL 系統(tǒng)可以實(shí)現(xiàn)低于 10μs 的延遲。Bird 表示,這樣的結(jié)果只會(huì)讓人產(chǎn)生這樣的印象,即一個(gè)專家用戶可以在調(diào)整了 100 個(gè)調(diào)優(yōu)開關(guān)之后獲得所需的響應(yīng)。Bristot 承認(rèn),確實(shí)需要一定程度的專業(yè)知識(shí),但他表示情況正在好轉(zhuǎn)。
當(dāng)一位觀眾問(wèn)是否到了需要一本關(guān)于 Linux 實(shí)時(shí)性的詳細(xì)書籍的時(shí)候,Siewior 指出了 實(shí)時(shí)性維基 作為一個(gè)起點(diǎn)。他一直在要求開發(fā)者和用戶提供更新,但抱怨從來(lái)沒(méi)有發(fā)生過(guò)。Bristot 建議將信息添加到內(nèi)核的文檔樹中,以增加動(dòng)力并鼓勵(lì)貢獻(xiàn);Stewart 表示,這往往也會(huì)提高文檔的質(zhì)量。Alison Chaiken 建議將內(nèi)核的冗長(zhǎng) 命令行參數(shù)文檔 拆分出一個(gè)專門針對(duì)實(shí)時(shí)性的文檔;Siewior 擔(dān)心這樣分割文檔會(huì)隨著時(shí)間的推移帶來(lái)一致性問(wèn)題。
另一位觀眾建議消除所有這些內(nèi)核參數(shù),將實(shí)時(shí)性的相關(guān)調(diào)優(yōu)開關(guān)改為可以在運(yùn)行時(shí)修改。Bristot 表示這將是一項(xiàng)漫長(zhǎng)而艱巨的任務(wù);Siewior 補(bǔ)充說(shuō),有相當(dāng)多的參數(shù)只能在引導(dǎo)時(shí)設(shè)置。
隨著會(huì)議時(shí)間的不斷流逝,討論逐漸變得不那么嚴(yán)肅,甚至出現(xiàn)了刪除所有代碼(解決了太多調(diào)優(yōu)開關(guān)的問(wèn)題)或者干脆讓一些大型語(yǔ)言模型輸出一堆有用的實(shí)時(shí)文檔。Bristot 表示,ChatGPT 對(duì)實(shí)時(shí) Linux 一無(wú)所知,所以這種完全可行的選擇被拋棄了,會(huì)議隨之結(jié)束。
了解嵌入式 Linux 的情況
“嵌入式 Linux 的現(xiàn)狀”會(huì)議于第二天舉行;由 Bird 和 Marta Rybczyńska 主持??傮w印象是有大量的活動(dòng)在進(jìn)行,但還有一些問(wèn)題有待解決。
Rybczyńska 首先概述了最近的內(nèi)核發(fā)布版本,指出了一些對(duì)嵌入式系統(tǒng)開發(fā)人員有幫助的改動(dòng):
6.4 :移除了 SLOB 內(nèi)存分配器,構(gòu)建精簡(jiǎn)內(nèi)核的文檔,將
MODULE_LICENSE()聲明從非模塊化代碼中 移除,以及 user trace events。6.5 :在啟動(dòng) x86 CPU 時(shí)改進(jìn)了更好的并行化,重新組織了 32 位設(shè)備樹文件,以及大量的 ftrace 和 perf 更新。
6.6 :能夠 在沒(méi)有buffer head的情況下構(gòu)建內(nèi)核,eventfs 文件系統(tǒng),以及 x86 shadow stack。
6.7 :在 64 位 x86 系統(tǒng)上禁用 32 位仿真執(zhí)行的參數(shù),移除 Itanium 架構(gòu)支持,改進(jìn)了內(nèi)核同頁(yè)合并,以及一些 printk() 改進(jìn)。
6.8 :初步支持截止日期服務(wù)器,第一個(gè)用 Rust 編寫的驅(qū)動(dòng)程序,一些核心網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu)的重新組織,perf 的數(shù)據(jù)類型分析。
6.9 (即將發(fā)布):ext2 文件系統(tǒng)已被棄用,一些重要的 內(nèi)核定時(shí)器變更,降低網(wǎng)絡(luò)堆棧中鎖爭(zhēng)用的工作,以及 運(yùn)行時(shí)可修改的能源模型。
也討論了對(duì)長(zhǎng)期穩(wěn)定內(nèi)核版本的六年支持的結(jié)束。Bird 表示,尋求更長(zhǎng)期支持的用戶可以轉(zhuǎn)向 民用基礎(chǔ)設(shè)施平臺(tái)(Civil Infrastructure Platform) 或 Ubuntu 的長(zhǎng)期支持版本 — 或者在設(shè)備生命周期內(nèi)持續(xù)跟隨穩(wěn)定更新更改內(nèi)核版本?!暗覀儚膩?lái)不這樣做”。
Rybczyńska 提到了一些正在進(jìn)行的工作,首先是 TI 公司正在進(jìn)行的減少啟動(dòng)時(shí)間的工作。這在汽車領(lǐng)域尤為重要。該工作似乎側(cè)重于在引導(dǎo)加載程序中就完成設(shè)備的初始化,然后以完全就緒的狀態(tài)將它們傳遞給內(nèi)核。
在圖形方面,她提到了為 NVIDIA GPU 推出的 NVK Vulkan 驅(qū)動(dòng)程序。正在進(jìn)行的工作包括改進(jìn) MTD-SPI-NOR 子系統(tǒng)以提高文件系統(tǒng)訪問(wèn)速度,以及為 EROFS 文件系統(tǒng)提供緩存和速度增強(qiáng)。實(shí)時(shí)性工作也被提及。這部分討論結(jié)束時(shí),也談到了內(nèi)核項(xiàng)目開始為漏洞 分配自己的 CVE 編號(hào)。
Bird 接下來(lái)介紹了“關(guān)于系統(tǒng) size 的怨言”;這始終是嵌入式部署中關(guān)注的一個(gè)問(wèn)題。他表示,SLOB 分配器被移除了,它本來(lái)是為小型系統(tǒng)設(shè)計(jì)的,不過(guò)這是可以接受的,因?yàn)樗鼘?shí)際上已經(jīng)不再被使用了。但是,他抱怨說(shuō),在 SLOB 被棄用和實(shí)際刪除之間只有兩個(gè)內(nèi)核發(fā)布版本;在那段時(shí)間內(nèi),嵌入式開發(fā)人員不太可能注意到 SLOB 已經(jīng)被棄用了的這個(gè)信息,這段時(shí)間應(yīng)該延長(zhǎng)。在同一年內(nèi)刪除 SLAB 也同樣有問(wèn)題。他承認(rèn)增加了 CONFIG_SLUB_TINY 配置選項(xiàng)是有幫助的,但他說(shuō) SLUB 永遠(yuǎn)不會(huì)像 SLOB 那樣小。他擔(dān)心,一些用戶已經(jīng)失去了一個(gè)有用的內(nèi)核功能。
在測(cè)試方面,有 提議 與 GitLab 的持續(xù)集成(CI)系統(tǒng)進(jìn)行集成,但是 Linus Torvalds 并不 喜歡它。因此,該提議被擱置了,但仍有可能在內(nèi)核的較低級(jí)別添加此類支持,“Linus 不需要關(guān)注”。Bird 表示,可以直接運(yùn)行 CI 測(cè)試將使測(cè)試變得更容易。
關(guān)于工具鏈,GCC 13.2 于 2023 年 7 月發(fā)布;GCC 14 版本隨時(shí)會(huì)發(fā)布,并帶來(lái)一些有趣的 靜態(tài)分析器改進(jìn)。他說(shuō),GCC 是一個(gè)有用的測(cè)試程序;它找到的錯(cuò)誤比其他任何程序都多。他提到 Bootlin 提供了 一套預(yù)構(gòu)建的交叉工具鏈,供那些不想自己構(gòu)建的人使用。
Rybczyńska 提到,Yocto 項(xiàng)目 5.0 版即將發(fā)布。這將是一個(gè)新的長(zhǎng)期支持版本,也是第一個(gè)具有通用 Arm 64 位支持的版本。此版本基于內(nèi)核 6.6。
在行業(yè)新聞方面,歐洲的《網(wǎng)絡(luò)安全法》(CRA, Cyber Resilience Act)正在進(jìn)展中;它要求供應(yīng)商為其產(chǎn)品提供安全更新,并對(duì)其所包含的組件進(jìn)行盡職調(diào)查。CRA 的最終出版公布預(yù)計(jì)將于 10 月份完成,在 2027 年全面生效。她表示,三年的準(zhǔn)備時(shí)間并不長(zhǎng),因?yàn)檫€有許多相關(guān)標(biāo)準(zhǔn)需要編寫。
HDMI 2.1 規(guī)范已經(jīng)發(fā)布。AMD 想要為 HDMI 2.1 編寫一個(gè)開源驅(qū)動(dòng)程序,但是 HDMI 論壇阻止了這樣做,因此將不會(huì)有自由代碼驅(qū)動(dòng)程序。
她總結(jié)說(shuō),火星直升機(jī)在進(jìn)行了 72 次飛行后,由于受損的葉片而被迫停飛,該任務(wù)已經(jīng)結(jié)束。但她說(shuō),我們肯定會(huì)看到其他將 Linux 帶入太空的任務(wù)。
Bird 概述了會(huì)議情況;嵌入式 Linux 會(huì)議已恢復(fù)到每年兩次的安排。北半球春季的活動(dòng)將在北美舉行,而秋季活動(dòng)將在歐洲舉行。下一次活動(dòng)將于 9 月在維也納舉行。一些與會(huì)者不喜歡現(xiàn)在不再獨(dú)立進(jìn)行而是選擇與大型活動(dòng)(如開源峰會(huì))合作的舉措;Bird 表示,這一舉措是由贊助(或缺乏贊助)驅(qū)動(dòng)的決定。
嵌入式 Linux 維基,這是該社區(qū)的一個(gè)長(zhǎng)期資源,最近失去了對(duì)系統(tǒng)管理員的資金支持。好消息是,參與其中的人已經(jīng)在 Linux 基金會(huì)找到了一份工作,并將繼續(xù)致力于維基工作。他說(shuō),該站點(diǎn)在某些方面已經(jīng)過(guò)時(shí)且未充分利用,但它也包含了許多有用的材料;歡迎志愿者提供幫助。
Rybczyńska 結(jié)束時(shí)表示,嵌入式社區(qū)發(fā)展良好;今年又會(huì)是嵌入式 Linux 的一年。她說(shuō),嵌入式 Linux 所需的大部分內(nèi)核基礎(chǔ)設(shè)施現(xiàn)在已經(jīng)就位,而且仍然有新的開發(fā)人員加入幫助。整個(gè)社區(qū)的基礎(chǔ)設(shè)施需要一些投資,但整體處于一個(gè)好的狀態(tài)。
全文完
LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。
長(zhǎng)按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開源社區(qū)的各種新近言論~
