自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux內(nèi)核測試的生命周期

系統(tǒng) Linux
內(nèi)核持續(xù)集成(CKI)項目旨在防止錯誤進入 Linux 內(nèi)核。本文深入探討了該項目的某些技術(shù)方面,以及這所有的部分是如何組合在一起的。

[[279338]]

內(nèi)核持續(xù)集成(CKI)項目旨在防止錯誤進入 Linux 內(nèi)核。

Linux 內(nèi)核的持續(xù)集成測試 一文中,我介紹了 內(nèi)核持續(xù)集成Continuous Kernel Integration(CKI)項目及其使命:改變內(nèi)核開發(fā)人員和維護人員的工作方式。本文深入探討了該項目的某些技術(shù)方面,以及這所有的部分是如何組合在一起的。

從一次更改開始

內(nèi)核中每一項令人興奮的功能、改進和錯誤都始于開發(fā)人員提出的更改。這些更改出現(xiàn)在各個內(nèi)核存儲庫的大量郵件列表中。一些存儲庫關(guān)注內(nèi)核中的某些子系統(tǒng),例如存儲或網(wǎng)絡(luò),而其它存儲庫關(guān)注內(nèi)核的更多方面。 當開發(fā)人員向內(nèi)核提出更改或補丁集時,或者維護者在存儲庫本身中進行更改時,CKI 項目就會付諸行動。

CKI 項目維護的觸發(fā)器用于監(jiān)視這些補丁集并采取措施。諸如 Patchwork 之類的軟件項目通過將多個補丁貢獻整合為單個補丁系列,使此過程變得更加容易。補丁系列作為一個整體歷經(jīng) CKI 系統(tǒng),并可以針對該系列發(fā)布單個報告。

其他觸發(fā)器可以監(jiān)視存儲庫中的更改。當內(nèi)核維護人員合并補丁集、還原補丁或創(chuàng)建新標簽時,就會觸發(fā)。測試這些關(guān)鍵的更改可確保開發(fā)人員始終具有堅實的基線,可以用作編寫新補丁的基礎(chǔ)。

所有這些更改都會進入 GitLab CI 管道,并歷經(jīng)多個階段和多個系統(tǒng)。

準備構(gòu)建

首先要準備好要編譯的源代碼。這需要克隆存儲庫、打上開發(fā)人員建議的補丁集,并生成內(nèi)核配置文件。這些配置文件具有成千上萬個用于打開或關(guān)閉功能的選項,并且配置文件在不同的系統(tǒng)體系結(jié)構(gòu)之間差異非常大。 例如,一個相當標準的 x86_64 系統(tǒng)在其配置文件中可能有很多可用選項,但是 s390x 系統(tǒng)(IBM zSeries 大型機)的選項可能要少得多。在該大型機上,某些選項可能有意義,但在消費類筆記本電腦上沒有任何作用。

內(nèi)核進一步轉(zhuǎn)換為源代碼工件。該工件包含整個存儲庫(已打上補丁)以及編譯所需的所有內(nèi)核配置文件。 上游內(nèi)核會打包成壓縮包,而 Red Hat 的內(nèi)核會生成下一步所用的源代碼 RPM 包。

成堆的編譯

編譯內(nèi)核會將源代碼轉(zhuǎn)換為計算機可以啟動和使用的代碼。配置文件描述了要構(gòu)建的內(nèi)容,內(nèi)核中的腳本描述了如何構(gòu)建它,系統(tǒng)上的工具(例如 GCC 和 glibc)完成構(gòu)建。此過程需要一段時間才能完成,但是 CKI 項目需要針對四種體系結(jié)構(gòu)快速完成:aarch64(64 位 ARM)、ppc64le(POWER)、s390x(IBM zSeries)和 x86_64。重要的是,我們必須快速編譯內(nèi)核,以便使工作任務(wù)不會積壓,而開發(fā)人員可以及時收到反饋。

添加更多的 CPU 可以大大提高速度,但是每個系統(tǒng)都有其局限性。CKI 項目在 OpenShift 的部署環(huán)境中的容器內(nèi)編譯內(nèi)核;盡管 OpenShift 可以實現(xiàn)高伸縮性,但在部署環(huán)境中的可用 CPU 仍然是數(shù)量有限的。CKI 團隊分配了 20 個虛擬 CPU 來編譯每個內(nèi)核。涉及到四個體系結(jié)構(gòu),這就漲到了 80 個 CPU!

另一個速度的提高來自 ccache 工具。內(nèi)核開發(fā)進展迅速,但是即使在多個發(fā)布版本之間,內(nèi)核的大部分仍保持不變。ccache 工具進行編譯期間會在磁盤上緩存已構(gòu)建的對象(整個內(nèi)核的一小部分)。稍后再進行另一個內(nèi)核編譯時,ccache 會查找以前看到的內(nèi)核的未更改部分。ccache 會從磁盤中提取緩存的對象并重新使用它。這樣可以加快編譯速度并降低總體 CPU 使用率?,F(xiàn)在,耗時 20 分鐘編譯的內(nèi)核在不到幾分鐘的時間內(nèi)就完成了。

測試時間

內(nèi)核進入最后一步:在真實硬件上進行測試。每個內(nèi)核都使用 Beaker 在其原生體系結(jié)構(gòu)上啟動,并且開始無數(shù)次的測試以發(fā)現(xiàn)問題。一些測試會尋找簡單的問題,例如容器問題或啟動時的錯誤消息。其他測試則深入到各種內(nèi)核子系統(tǒng)中,以查找系統(tǒng)調(diào)用、內(nèi)存分配和線程中的回歸問題。

大型測試框架,例如 Linux Test Project(LTP),包含了大量測試,這些測試在內(nèi)核中尋找麻煩的回歸問題。其中一些回歸問題可能會回滾關(guān)鍵的安全修復(fù)程序,并且進行測試以確保這些改進仍保留在內(nèi)核中。

測試完成后,關(guān)鍵的一步仍然是:報告。內(nèi)核開發(fā)人員和維護人員需要一份簡明的報告,準確地告訴他們哪些有效、哪些無效以及如何獲取更多信息。每個 CKI 報告都包含所用源代碼、編譯參數(shù)和測試輸出的詳細信息。該信息可幫助開發(fā)人員知道從哪里開始尋找解決問題的方法。此外,它還可以幫助維護人員在漏洞進入內(nèi)核存儲庫之前知道何時需要保留補丁集以進行其他查看。

總結(jié)

CKI 項目團隊通過向內(nèi)核開發(fā)人員和維護人員提供及時、自動的反饋,努力防止錯誤進入 Linux 內(nèi)核。這項工作通過發(fā)現(xiàn)導(dǎo)致內(nèi)核錯誤、安全性問題和性能問題等易于找到的問題,使他們的工作更加輕松。 

責任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2015-07-08 16:28:23

weak生命周期

2022-04-19 07:20:24

軟件開發(fā)安全生命周期SSDLC應(yīng)用安全

2009-06-11 11:28:35

JSF生命周期

2010-07-14 10:48:37

Perl線程

2009-06-18 13:32:39

Java線程生命周期

2012-04-28 13:23:12

Java生命周期

2011-06-16 09:31:21

ActivityAndroid

2009-06-24 10:47:55

JSF生命周期

2012-06-20 10:29:16

敏捷開發(fā)

2013-08-19 17:03:00

.Net生命周期對象

2021-07-19 05:52:29

網(wǎng)絡(luò)生命周期網(wǎng)絡(luò)框架

2009-06-16 15:56:10

MIDlet生命周期J2ME程序測試

2010-07-14 10:59:15

Perl線程

2015-07-09 15:42:48

ios應(yīng)用生命周期

2021-02-14 00:39:57

機器學習技術(shù)人工智能

2013-06-18 10:48:41

OpenSUSEOpenSUSE 12

2024-01-08 22:08:48

Rust生命周期編程

2012-01-16 09:00:56

線程

2013-07-29 05:11:38

iOS開發(fā)iOS開發(fā)學習類的'生命周期'

2009-06-17 15:06:50

Hibernate實體
點贊
收藏

51CTO技術(shù)棧公眾號