linux内核测试,Linux内核测试的生命周期
內(nèi)核持續(xù)集成(CKI)項(xiàng)目旨在防止錯(cuò)誤進(jìn)入 Linux 內(nèi)核。
在 Linux 內(nèi)核的持續(xù)集成測(cè)試 一文中,我介紹了 內(nèi)核持續(xù)集成Continuous Kernel Integration(CKI)項(xiàng)目及其使命:改變內(nèi)核開發(fā)人員和維護(hù)人員的工作方式。本文深入探討了該項(xiàng)目的某些技術(shù)方面,以及這所有的部分是如何組合在一起的。
從一次更改開始
內(nèi)核中每一項(xiàng)令人興奮的功能、改進(jìn)和錯(cuò)誤都始于開發(fā)人員提出的更改。這些更改出現(xiàn)在各個(gè)內(nèi)核存儲(chǔ)庫的大量郵件列表中。一些存儲(chǔ)庫關(guān)注內(nèi)核中的某些子系統(tǒng),例如存儲(chǔ)或網(wǎng)絡(luò),而其它存儲(chǔ)庫關(guān)注內(nèi)核的更多方面。 當(dāng)開發(fā)人員向內(nèi)核提出更改或補(bǔ)丁集時(shí),或者維護(hù)者在存儲(chǔ)庫本身中進(jìn)行更改時(shí),CKI 項(xiàng)目就會(huì)付諸行動(dòng)。
CKI 項(xiàng)目維護(hù)的觸發(fā)器用于監(jiān)視這些補(bǔ)丁集并采取措施。諸如 Patchwork 之類的軟件項(xiàng)目通過將多個(gè)補(bǔ)丁貢獻(xiàn)整合為單個(gè)補(bǔ)丁系列,使此過程變得更加容易。補(bǔ)丁系列作為一個(gè)整體歷經(jīng) CKI 系統(tǒng),并可以針對(duì)該系列發(fā)布單個(gè)報(bào)告。
其他觸發(fā)器可以監(jiān)視存儲(chǔ)庫中的更改。當(dāng)內(nèi)核維護(hù)人員合并補(bǔ)丁集、還原補(bǔ)丁或創(chuàng)建新標(biāo)簽時(shí),就會(huì)觸發(fā)。測(cè)試這些關(guān)鍵的更改可確保開發(fā)人員始終具有堅(jiān)實(shí)的基線,可以用作編寫新補(bǔ)丁的基礎(chǔ)。
所有這些更改都會(huì)進(jìn)入 GitLab CI 管道,并歷經(jīng)多個(gè)階段和多個(gè)系統(tǒng)。
準(zhǔn)備構(gòu)建
首先要準(zhǔn)備好要編譯的源代碼。這需要克隆存儲(chǔ)庫、打上開發(fā)人員建議的補(bǔ)丁集,并生成內(nèi)核配置文件。這些配置文件具有成千上萬個(gè)用于打開或關(guān)閉功能的選項(xiàng),并且配置文件在不同的系統(tǒng)體系結(jié)構(gòu)之間差異非常大。 例如,一個(gè)相當(dāng)標(biāo)準(zhǔn)的 x86_64 系統(tǒng)在其配置文件中可能有很多可用選項(xiàng),但是 s390x 系統(tǒng)(IBM zSeries 大型機(jī))的選項(xiàng)可能要少得多。在該大型機(jī)上,某些選項(xiàng)可能有意義,但在消費(fèi)類筆記本電腦上沒有任何作用。
內(nèi)核進(jìn)一步轉(zhuǎn)換為源代碼工件。該工件包含整個(gè)存儲(chǔ)庫(已打上補(bǔ)丁)以及編譯所需的所有內(nèi)核配置文件。 上游內(nèi)核會(huì)打包成壓縮包,而 Red Hat 的內(nèi)核會(huì)生成下一步所用的源代碼 RPM 包。
成堆的編譯
編譯內(nèi)核會(huì)將源代碼轉(zhuǎn)換為計(jì)算機(jī)可以啟動(dòng)和使用的代碼。配置文件描述了要構(gòu)建的內(nèi)容,內(nèi)核中的腳本描述了如何構(gòu)建它,系統(tǒng)上的工具(例如 GCC 和 glibc)完成構(gòu)建。此過程需要一段時(shí)間才能完成,但是 CKI 項(xiàng)目需要針對(duì)四種體系結(jié)構(gòu)快速完成:aarch64(64 位 ARM)、ppc64le(POWER)、s390x(IBM zSeries)和 x86_64。重要的是,我們必須快速編譯內(nèi)核,以便使工作任務(wù)不會(huì)積壓,而開發(fā)人員可以及時(shí)收到反饋。
添加更多的 CPU 可以大大提高速度,但是每個(gè)系統(tǒng)都有其局限性。CKI 項(xiàng)目在 OpenShift 的部署環(huán)境中的容器內(nèi)編譯內(nèi)核;盡管 OpenShift 可以實(shí)現(xiàn)高伸縮性,但在部署環(huán)境中的可用 CPU 仍然是數(shù)量有限的。CKI 團(tuán)隊(duì)分配了 20 個(gè)虛擬 CPU 來編譯每個(gè)內(nèi)核。涉及到四個(gè)體系結(jié)構(gòu),這就漲到了 80 個(gè) CPU!
另一個(gè)速度的提高來自 ccache 工具。內(nèi)核開發(fā)進(jìn)展迅速,但是即使在多個(gè)發(fā)布版本之間,內(nèi)核的大部分仍保持不變。ccache 工具進(jìn)行編譯期間會(huì)在磁盤上緩存已構(gòu)建的對(duì)象(整個(gè)內(nèi)核的一小部分)。稍后再進(jìn)行另一個(gè)內(nèi)核編譯時(shí),ccache 會(huì)查找以前看到的內(nèi)核的未更改部分。ccache 會(huì)從磁盤中提取緩存的對(duì)象并重新使用它。這樣可以加快編譯速度并降低總體 CPU 使用率。現(xiàn)在,耗時(shí) 20 分鐘編譯的內(nèi)核在不到幾分鐘的時(shí)間內(nèi)就完成了。
測(cè)試時(shí)間
內(nèi)核進(jìn)入最后一步:在真實(shí)硬件上進(jìn)行測(cè)試。每個(gè)內(nèi)核都使用 Beaker 在其原生體系結(jié)構(gòu)上啟動(dòng),并且開始無數(shù)次的測(cè)試以發(fā)現(xiàn)問題。一些測(cè)試會(huì)尋找簡單的問題,例如容器問題或啟動(dòng)時(shí)的錯(cuò)誤消息。其他測(cè)試則深入到各種內(nèi)核子系統(tǒng)中,以查找系統(tǒng)調(diào)用、內(nèi)存分配和線程中的回歸問題。
大型測(cè)試框架,例如 Linux Test Project(LTP),包含了大量測(cè)試,這些測(cè)試在內(nèi)核中尋找麻煩的回歸問題。其中一些回歸問題可能會(huì)回滾關(guān)鍵的安全修復(fù)程序,并且進(jìn)行測(cè)試以確保這些改進(jìn)仍保留在內(nèi)核中。
測(cè)試完成后,關(guān)鍵的一步仍然是:報(bào)告。內(nèi)核開發(fā)人員和維護(hù)人員需要一份簡明的報(bào)告,準(zhǔn)確地告訴他們哪些有效、哪些無效以及如何獲取更多信息。每個(gè) CKI 報(bào)告都包含所用源代碼、編譯參數(shù)和測(cè)試輸出的詳細(xì)信息。該信息可幫助開發(fā)人員知道從哪里開始尋找解決問題的方法。此外,它還可以幫助維護(hù)人員在漏洞進(jìn)入內(nèi)核存儲(chǔ)庫之前知道何時(shí)需要保留補(bǔ)丁集以進(jìn)行其他查看。
總結(jié)
CKI 項(xiàng)目團(tuán)隊(duì)通過向內(nèi)核開發(fā)人員和維護(hù)人員提供及時(shí)、自動(dòng)的反饋,努力防止錯(cuò)誤進(jìn)入 Linux 內(nèi)核。這項(xiàng)工作通過發(fā)現(xiàn)導(dǎo)致內(nèi)核錯(cuò)誤、安全性問題和性能問題等易于找到的問題,使他們的工作更加輕松。
【編輯推薦】
【責(zé)任編輯:龐桂玉 TEL:(010)68476606】
點(diǎn)贊 0
總結(jié)
以上是生活随笔為你收集整理的linux内核测试,Linux内核测试的生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有没有朋友入手过激光电视,求性价比高的激
- 下一篇: linux如何停用xdmcp服务,如何禁