4. 內(nèi)在驅(qū)動
由以上簡要的回顧和梳理可見,內(nèi)核開發(fā)者們所不斷尋找的是一種充分表達能力的動態(tài)機制,進而打破內(nèi)核和用戶態(tài)的壁壘(至少在邏輯層面),從而實現(xiàn)一種自由、直接的需求實現(xiàn)。技術(shù)成為內(nèi)核開發(fā)者們鋒利的工具,不斷突破限制,揭示事物的本質(zhì)。
BPF技術(shù)的出現(xiàn)和發(fā)展,從時間尺度來說并不長,但是從其內(nèi)在的驅(qū)動來說,有著復(fù)雜的動因,是很多因素就和在一起的必然結(jié)果。由于其復(fù)雜性,從任何一個孤立的角度進行分析都是不充分,只有從各個不同的角度分析,才可以體會出不同的趣味。
通過探尋其深層次的原因,可以梳理出更加清晰的發(fā)展脈絡(luò),從而可以更好地展望BPF及其相關(guān)技術(shù)領(lǐng)域的未來發(fā)展。為我們學(xué)習(xí)、研究和加入BPF的發(fā)展打下基礎(chǔ)。
本文試著從復(fù)雜性、微內(nèi)核化兩個方面,分析BPF發(fā)展的內(nèi)在動力。
內(nèi)核的發(fā)展歷史就是一個復(fù)雜性不斷遞增的歷史,因此內(nèi)核的發(fā)展也是不斷控制復(fù)雜性、維持內(nèi)核代碼的可理解性的過程。因此,內(nèi)核的開發(fā)始終堅持一個原則,就是機制與策略的分離。
在不同時期,如何進行機制與策略的分離,有這不同的答案。隨著技術(shù)和應(yīng)用的不斷發(fā)展,維持這一原則的的難度是不斷增加的,需要更新的思想、更先進的技術(shù)才能支撐?;蛘咭部梢哉f,正因為內(nèi)核的發(fā)展過程中,始終堅持了這個原則,所以才不斷有影響深遠的基礎(chǔ)技術(shù)的出現(xiàn)。
我相信,要實現(xiàn)定制與動態(tài),有很多不同的方案。但我認為BPF的出現(xiàn)是最佳的選擇,使內(nèi)核的發(fā)展有了應(yīng)對未來變局的基礎(chǔ)。
這是BPF出現(xiàn)的契機,也是其未來快速發(fā)展的動力。
4.1代碼規(guī)模問題
Linux項目發(fā)展至今,其代碼總量早已超過千萬,是一個非常龐大的項目。
?注:來源https://www.phoronix.com/misc/linux-eoy2019/lines.html
由統(tǒng)計數(shù)據(jù)可以看出,Linux項目的復(fù)雜度(從代碼量角度)一直在不斷增長。
4.2軟件結(jié)構(gòu)的復(fù)雜
整個軟件系統(tǒng),從應(yīng)用程序到內(nèi)核是一個繁雜的層次結(jié)構(gòu),又由于模塊之間的交叉,實際的運行流程是一個復(fù)雜的有向圖結(jié)構(gòu)。
以完成一次簡單的文件操作為例,首先應(yīng)用程序需要open一個文件,這首先會運行到某種運行時庫,完成資源分配、接口轉(zhuǎn)換等等處理。然后,流程才會到系統(tǒng)調(diào)用這一層。
系統(tǒng)調(diào)用中,由VFS解析文件路徑信息,找到對應(yīng)的文件系統(tǒng)信息。再由具體的文件系統(tǒng)完成文件打開的操作。
這其中至少涉及到了應(yīng)用程序、運行時庫、系統(tǒng)調(diào)用、VFS、文件系統(tǒng)等多個層次。如果再細分的話,還涉及到用戶態(tài)內(nèi)存管理,內(nèi)核態(tài)內(nèi)存管理、權(quán)限管理、命名空間管理、句柄管理、緩存管理、鎖、鉤子等次級模塊。
目前Linux支持的文件系統(tǒng)至少已經(jīng)達到七十多種,有基于本地存儲設(shè)備的、基于網(wǎng)絡(luò)的、分布式的、基于內(nèi)存的、虛擬的等等。有的文件系統(tǒng)在內(nèi)核態(tài)實現(xiàn),有的在用戶態(tài)實現(xiàn)。
另外,C語言的條件編譯,可以針對使用場景選擇適合的代碼編譯。每一個條件編譯選項就是對現(xiàn)實條件的一個考量。從Linux整個源碼樹中使用的條件編譯選項的數(shù)量,也可以反映出Linux整個源碼的復(fù)雜度。對Linux 5.10的源代碼粗略統(tǒng)計,條件編譯選項已經(jīng)多達18000多個;而在6.1版本中,已經(jīng)達到了19000多個。
4.3業(yè)務(wù)系統(tǒng)的復(fù)雜
在虛擬化技術(shù)以前,不同應(yīng)用場景的業(yè)務(wù)系統(tǒng)的結(jié)構(gòu)差異,主要表現(xiàn)為平面性的拓撲結(jié)構(gòu)的差異,比如:對等式的、分布式的、客戶服務(wù)器模式的等等,由于網(wǎng)絡(luò)拓撲結(jié)構(gòu)的不同、節(jié)點承擔的業(yè)務(wù)角色的不同,形成了各種各樣的業(yè)務(wù)系統(tǒng)。
在虛擬化技術(shù)出現(xiàn)后,云計算迅猛發(fā)展,云成為了信息系統(tǒng)的基礎(chǔ)設(shè)施。業(yè)務(wù)系統(tǒng)的差異不僅僅體現(xiàn)在橫向拓撲結(jié)構(gòu)上,其自身邏輯的深層組成也是非常復(fù)雜。它可以運行在真實計算機上也可能在虛擬機上,可能在一個獨立的命名空間,也可能和別的業(yè)務(wù)共享。不同業(yè)務(wù)模塊之間的聯(lián)系有可能是直接的,也可能在無法感知的情況下被層層嵌套。
業(yè)務(wù)系統(tǒng)的復(fù)雜性,體現(xiàn)在業(yè)務(wù)的復(fù)雜性與業(yè)務(wù)系統(tǒng)的復(fù)雜性兩個方面。業(yè)務(wù)的復(fù)雜,導(dǎo)致我們需要對業(yè)務(wù)系統(tǒng)進行分層設(shè)計,需要有定制化的能力,需要有運營與持續(xù)開發(fā)并行的能力。上線前的產(chǎn)品級的開發(fā)很重要,但是上線后的業(yè)務(wù)級的持續(xù)定制和開發(fā)同樣重要。復(fù)雜的業(yè)務(wù)必然導(dǎo)致復(fù)雜業(yè)務(wù)系統(tǒng)的產(chǎn)生,如何以一個統(tǒng)一的、足夠強大的方式來解決復(fù)雜性問題,使復(fù)雜業(yè)務(wù)系統(tǒng)的復(fù)雜性是可以拆解的、可管理的,就非常重要。
4.4維護限制的要求
Linux系統(tǒng)已經(jīng)規(guī)?;\行在各種類型的設(shè)備上,每一個商業(yè)系統(tǒng),在其運行期間都是需要進行維護的。
對于大型的服務(wù)器系統(tǒng),承載在成千上萬的在線業(yè)務(wù),是不能中斷服務(wù)的,需要在線的定制能力。
對于個人終端,每個人的使用習(xí)慣不同,如何使每個用戶都能獲得最佳的使用體驗,需要數(shù)據(jù)分析和個性化的定制能力。文章來源:http://www.zghlxwxcb.cn/news/detail-426283.html
對于散布在各處角落的邊緣節(jié)點乃至物聯(lián)網(wǎng)設(shè)備,需要內(nèi)核提供更智能的介入方法,使維護人員能夠遠程完成對大量設(shè)備的維護工作。文章來源地址http://www.zghlxwxcb.cn/news/detail-426283.html
到了這里,關(guān)于eBPF的發(fā)展演進---從石器時代到成為神(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!