侯朋朋 張 珩 武延軍 于佳耕 邰 陽 苗玉霞
1(智能軟件研究中心(中國科學(xué)院軟件研究所) 北京 100190) 2(中國科學(xué)院大學(xué) 北京 100049)
(pengpeng@iscas.ac.cn)
Linux作為開源軟件基石其應(yīng)用場景廣泛,從資源匱乏的邊緣計算到云計算中心、超算中心均有廣泛應(yīng)用,不同應(yīng)用場景需求各異,如邊緣計算場景更關(guān)注內(nèi)核大小,超算中心場景更關(guān)注系統(tǒng)性能.為適應(yīng)復(fù)雜的應(yīng)用場景,Linux提供了數(shù)量巨大的內(nèi)核配置項便于靈活設(shè)置個性化內(nèi)核.內(nèi)核配置項覆蓋廣泛,涉及體系架構(gòu)、文件系統(tǒng)、內(nèi)存管理、安全加密、驅(qū)動設(shè)置等.內(nèi)核配置項可使能或禁用內(nèi)核模塊或機制,如CONFIG_USB設(shè)置為Y(yes)M(model)則表示將USB模塊直接編譯或以可加載模塊的方式進入內(nèi)核,設(shè)置為N(no)則在內(nèi)核編譯時禁用該模塊.除Y(yes)M(model)N(no)外,內(nèi)核配置項值也可設(shè)置為其他值,如設(shè)置默認(rèn)IO調(diào)度策略時可將CONFIG_DEFAULT_IOSCHED設(shè)置為“cfq”或“deadline”.
Linux內(nèi)核靈活的配置項機制在內(nèi)核裁剪、內(nèi)核安全增強、內(nèi)核性能優(yōu)化等應(yīng)用場景中均有廣泛應(yīng)用.以內(nèi)核性能優(yōu)化為例,Ren等人[1]基于Ubuntu的v3.0至v4.20內(nèi)核版本的研究發(fā)現(xiàn),造成Linux內(nèi)核性能下降的原因有11項,其中涉及到內(nèi)核配置項有8項,且涉及內(nèi)核配置項帶來的性能損失大于其他因素,通過調(diào)整內(nèi)核配置項值等操作可將Redis,Apache,Nginx工作負(fù)載提高56%,33%,34%.
雖然Linux內(nèi)核提供了靈活、全面的內(nèi)核配置項,但正確使用這些配置項門檻高,難度大.配置項的數(shù)量巨大且增長快速,配置項的默認(rèn)值在不同內(nèi)核版本中經(jīng)常改變,即使專業(yè)的內(nèi)核團隊要能夠正確設(shè)置配置項也面臨很多挑戰(zhàn).如圖1所示[2],橫軸表示Linux內(nèi)核版本號,縱軸表示內(nèi)核配置項數(shù)量.
Fig. 1 Kernel configuration item growth trend圖1 內(nèi)核配置項增長趨勢
內(nèi)核v5.3版本有15 000多個內(nèi)核配置項,從內(nèi)核v4.0版本到v5.3版本間增長了3 000多個配置項.Ubuntu內(nèi)核4.16版本中已設(shè)置的內(nèi)核配置項有7 520項,而當(dāng)前Linux內(nèi)核代碼仍在快速增長,平均每小時接受8.5次代碼提交[3],可預(yù)見內(nèi)核配置項的數(shù)量會同步增長.為了適應(yīng)新硬件、新場景,內(nèi)核配置項值需要適時進行調(diào)整,如Ubuntu v3.1版本和v3.0版本的配置文件相比,刪除配置項100項,新增配置項117項,此外還有13個配置項的值變更[4].專業(yè)的內(nèi)核團隊在設(shè)置內(nèi)核配置項時也會出現(xiàn)錯誤,Ubuntu曾在v3.10版本中無意打開配置項CONFIG_CONTEXT_TRACKING_FORCE,該配置項的錯誤設(shè)置導(dǎo)致系統(tǒng)性能下降,直到v3.16版本中該配置項才被修復(fù)[5-7].
針對當(dāng)前內(nèi)核配置項數(shù)量巨大、難以理解、設(shè)置困難等問題,提出了一種基于多標(biāo)簽的內(nèi)核配置圖,該圖包含內(nèi)核配置項間的依賴關(guān)系(從中可得到父配置項標(biāo)簽和子配置項標(biāo)簽)、功能標(biāo)簽、性能標(biāo)簽、安全標(biāo)簽和配置項使能率(配置項在各個內(nèi)核版本中的使能(enable)比例)標(biāo)簽.其中依賴關(guān)系屬于配置項之間的關(guān)系,使能率標(biāo)簽屬于配置項自身屬性,功能標(biāo)簽、性能標(biāo)簽和安全標(biāo)簽不僅是配置項屬性,也可以通過此3種標(biāo)簽為不同的內(nèi)核配置項建立關(guān)聯(lián)關(guān)系.該內(nèi)核配置圖可輔助內(nèi)核開發(fā)人員高效理解和設(shè)置內(nèi)核配置項,在內(nèi)核啟動優(yōu)化、內(nèi)核裁剪、內(nèi)核安全增強、內(nèi)核性能優(yōu)化、內(nèi)核配置項異常檢測,內(nèi)核配置項智能問答和內(nèi)核配置項推薦等場景均可應(yīng)用.該內(nèi)核配置圖提供了可視化功能,更加直觀、高效、人性化.此外,本文將內(nèi)核配置圖應(yīng)用到檢索場景,設(shè)計了面向內(nèi)核配置項的檢索框架KCIR(kernel config information retrieval),該框架基于內(nèi)核配置圖中的標(biāo)簽信息和依賴關(guān)系分別對查詢語句和內(nèi)核配置項描述文本進行了擴展.實驗表明與傳統(tǒng)檢索框架相比,KCIR對檢索效果提升顯著,通過對KCIR的有效性評估驗證了內(nèi)核配置圖在實際應(yīng)用中的有效性.
本文的主要貢獻包括3個方面:
1) 提出一種基于多標(biāo)簽的內(nèi)核配置圖,包含內(nèi)核配置項的依賴關(guān)系、功能標(biāo)簽、性能標(biāo)簽、安全標(biāo)簽,此外還包含了基于內(nèi)核社區(qū)和主流發(fā)行版(Ubuntu和Fedora)的各個內(nèi)核版本的使能率.
2) 提供內(nèi)核配置圖的可視化功能:配置項間的依賴關(guān)系可視化,基于標(biāo)簽的內(nèi)核配置項聚類可視化,圍繞配置項的多標(biāo)簽可視化.
3) 基于內(nèi)核配置圖實現(xiàn)了面向內(nèi)核配置項的檢索框架KCIR,并通過與傳統(tǒng)檢索框架的對比實驗,表明KCIR對檢索效果有顯著的提升.
內(nèi)核配置圖包含配置項間的依賴關(guān)系、功能標(biāo)簽、性能標(biāo)簽、安全標(biāo)簽以及基于內(nèi)核社區(qū)和主流發(fā)行版(Ubuntu和Fedora)的使能率標(biāo)簽,其中依賴關(guān)系屬于配置項之間的關(guān)系,使能率標(biāo)簽屬于配置項自身屬性,功能標(biāo)簽、性能標(biāo)簽、安全標(biāo)簽這3種標(biāo)簽則兼顧了配置項屬性也為不同的配置項建立了關(guān)聯(lián)關(guān)系.
1) 內(nèi)核配置項間依賴關(guān)系.內(nèi)核系統(tǒng)中模塊間依賴關(guān)系廣泛存在,如文件系統(tǒng)Ext4,XFS等均依賴于VFS(virtual file system)模塊,同時模塊內(nèi)的子模塊間也存在依賴關(guān)系,如配置項CONFIG_EXT4_FS提供對Ext4文件系統(tǒng)[8]的支持,配置項CONFIG_EXT4_FS_SECURITY提供Ext4安全標(biāo)簽功能,只有配置項CONFIG_EXT4_FS使能后,配置項CONFIG_EXT4_FS_SECURITY才能生效.內(nèi)核配置項可能依賴于多個配置項,同時也可能存在多個配置項依賴于該內(nèi)核配置項.為了便于后續(xù)描述,我們定義2個關(guān)鍵詞:
定義1.父配置項.將當(dāng)前配置項直接依賴的配置項稱為其父配置項.
定義2.子配置項.直接依賴于當(dāng)前配置項的內(nèi)核配置項稱為其子配置項.
基于依賴關(guān)系可為當(dāng)前配置項創(chuàng)建其父配置項標(biāo)簽和子配置項標(biāo)簽.
2) 功能標(biāo)簽.即根據(jù)內(nèi)核配置項功能特征為其創(chuàng)建1個或者多個標(biāo)簽,如配置項CONFIG_NETFILTER_NETLINK_LOG涉及到了網(wǎng)絡(luò)和日志2方面的功能,為其創(chuàng)建“network”和“l(fā)og”2個標(biāo)簽.
3) 性能標(biāo)簽.即根據(jù)內(nèi)核配置項性能特性為配置項創(chuàng)建1個或者多個標(biāo)簽.若內(nèi)核配置項會影響系統(tǒng)的性能,不論該影響為正面影響或負(fù)面影響,均為其創(chuàng)建性能標(biāo)簽.性能標(biāo)簽主要包含CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)4種.
4) 安全標(biāo)簽.該標(biāo)簽涉及的內(nèi)核配置項有2類.一類配置項自身屬于安全增強機制,如配置項CONFIG_SECURI TY_NETWORK本身就是安全機制的一部分;另一類配置項包含潛在的安全缺陷,如CONFIG_KVM涉及的KVM(kernel-based virtual machine)模塊暴露過CVE-2019-19332等漏洞.
5) 使能率標(biāo)簽.即包括基于內(nèi)核社區(qū)[9]的使能率和基于發(fā)行版的使能率.內(nèi)核配置項若未設(shè)置則默認(rèn)是禁用的,只有經(jīng)過使能(enable)的配置項才能生效,如將配置項設(shè)置為Y(yes)或M(model).基于各內(nèi)核版本中該配置項的使能情況計算出該配置項的使能率,使能率是量化配置項在實際應(yīng)用中重要性的一個指標(biāo).將內(nèi)核社區(qū)和主流發(fā)行版(Ubuntu和Fedora)區(qū)別對待是因為即使對同一內(nèi)核配置項,兩者的使能狀態(tài)會有不同,如配置項CONFIG_RCU_TRACE在內(nèi)核社區(qū)發(fā)布的4.15版本中使能,而Ubuntu的內(nèi)核4.15版本中禁用;反之,配置項CONFIG_INTEL_IDLE在Ubuntu發(fā)布的內(nèi)核4.15版本中使能,而在內(nèi)核社區(qū)的版本中禁用.
內(nèi)核配置圖中的功能標(biāo)簽、性能標(biāo)簽、安全標(biāo)簽和使能率標(biāo)簽屬于傳統(tǒng)標(biāo)簽,其值是屬性值;通過內(nèi)核配置項間的依賴關(guān)系得到的父配置項和子配置項屬于特殊標(biāo)簽,該類標(biāo)簽本身是內(nèi)核配置項,而不是純粹的屬性值.
內(nèi)核配置項間關(guān)聯(lián).如圖2(a)所示,內(nèi)核配置項間的關(guān)聯(lián)關(guān)系主要通過依賴關(guān)系和3種標(biāo)簽(功能標(biāo)簽、性能標(biāo)簽、安全標(biāo)簽)建立.其中有向?qū)嵕€表示依賴關(guān)系,由父配置項指向子配置項;虛線關(guān)聯(lián)的內(nèi)核配置項屬于同一標(biāo)簽,不同的虛線表示不同的標(biāo)簽類型,可以通過標(biāo)簽將沒有依賴關(guān)系的配置項聯(lián)系起來.內(nèi)核配置圖通過依賴關(guān)系和多種標(biāo)簽為配置項之間建立多元的關(guān)聯(lián)關(guān)系.內(nèi)核配置圖為配置項從不同維度建立關(guān)聯(lián)關(guān)系,挖掘配置項之間更深層次的關(guān)系,其要比傳統(tǒng)的樹結(jié)構(gòu)組織方式更加豐富.
內(nèi)核配置項自身屬性.如圖2(b)所示,內(nèi)核配置項屬性主要包括父配置項標(biāo)簽(CONFIG_FATHER)、子配置項標(biāo)簽(CONFIG_SON1,CONFIG_SON2)、功能標(biāo)簽、性能標(biāo)簽、安全標(biāo)簽、使能率,圍繞配置項提供不同維度的屬性信息,在開發(fā)人員使能或者禁用該配置項時可輔助決策.
Fig. 2 Schematic diagram of kernel configuration items圖2 內(nèi)核配置示意圖
內(nèi)核配置圖提供可視化功能,包括依賴關(guān)系可視化、功能標(biāo)簽聚類可視化、性能標(biāo)簽聚類可視化、安全標(biāo)簽聚類可視化和圍繞內(nèi)核配置項的多標(biāo)簽可視化,其可以輔助內(nèi)核開發(fā)人員高效的理解和設(shè)置內(nèi)核配置項,在內(nèi)核啟動優(yōu)化、內(nèi)核裁剪、內(nèi)核安全增強、內(nèi)核性能優(yōu)化、內(nèi)核配置項異常檢測、內(nèi)核配置項智能問答、內(nèi)核配置項推薦等場景均可應(yīng)用.
將內(nèi)核配置項集合設(shè)為S={C1,C2,…,Cn},其中Ci表示第i個配置項,n表示集合中內(nèi)核配置項的數(shù)目,依賴關(guān)系D定義為集合S上的二元關(guān)系,對于任意2個配置項Ci和Cj,且Ci,Cj∈S,若Ci的狀態(tài)改變會影響Cj的狀態(tài),則配置項Cj依賴于配置項Ci,其依賴關(guān)系D定義為D={Cj,Ci|Ci,Cj∈S}.內(nèi)核配置項間的依賴關(guān)系D是基于內(nèi)核的Kconfig文件[10]抽取,內(nèi)核配置項在Kconfig文件中的定義如圖3所示,涉及到依賴關(guān)系的關(guān)鍵字有“depends on”“select”“imply”.其中“depends on”表示當(dāng)前配置項依賴于其他配置項,CONFIG_NAME依賴CONFIG_A,即CONFIG_A為CONFIG_NAME的父配置項.“select”表示反向依賴關(guān)系即CONFIG_B依賴于CONFIG_NAME,即CONFIG_B為其子依賴項.“imply”是弱化版的“select”,表示反向依賴關(guān)系但強制性較弱.本文基于“depends on”“select”“imply”三個關(guān)鍵字構(gòu)建配置項間的依賴關(guān)系.一個配置項可以有多個父配置項和多個子配置項,創(chuàng)建的內(nèi)核配置項依賴關(guān)系圖是一個有向無環(huán)圖.
Fig. 3 Configuration item definition in Kconfig圖3 Kconfig中內(nèi)核配置項定義
基于依賴關(guān)系可獲取內(nèi)核配置項的父配置項和子配置項,父子配置項可看作特殊標(biāo)簽,其本身是內(nèi)核配置項,同時也是當(dāng)前配置項的標(biāo)簽.基于父子配置項通過遞歸操作可進一步得到其祖父配置項和子孫配置項,依賴關(guān)系具有傳遞性.在內(nèi)核裁剪、內(nèi)核優(yōu)化等應(yīng)用場景中,通常需要使能或禁用某內(nèi)核配置項,基于依賴關(guān)系便于獲取當(dāng)前配置項的所有子孫配置項,利于分析該配置項變更的影響范圍,如CONFIG_AUDIT配置項表示內(nèi)核審計功能,若使能該配置項會給系統(tǒng)調(diào)用帶來性能開銷,但基于依賴關(guān)系易知SELinux[11]等安全機制均依賴于該配置項,若啟用SELinux相關(guān)安全機制則不能禁用CONFIG_AUDIT配置項.此外,子孫配置項數(shù)目也是衡量配置項重要性的一個指標(biāo),若某內(nèi)核配置項有30個子孫配置項,則其重要性通常大于沒有子孫的內(nèi)核配置項.
構(gòu)建內(nèi)核配置項間依賴關(guān)系時需關(guān)注不同體系架構(gòu)帶來的依賴關(guān)系差異,否則會引入潛在錯誤依賴信息.同一個內(nèi)核配置項在不同平臺下定義經(jīng)常有差異,如圖4中為內(nèi)核配置項CONFIG_ARCH_HIBERNATION_POSSIBLE在ARM和ARM64架構(gòu)下的定義,該配置項在ARM架構(gòu)下依賴于配置項CONFIG_MMU,在ARM64架構(gòu)下依賴于CONFIG_CPU_PM.若忽略不同架構(gòu)差異則會引入錯誤的依賴關(guān)系,甚至導(dǎo)致依賴關(guān)系圖從有向無環(huán)圖變?yōu)橛邢蛴协h(huán)圖,而有向有環(huán)圖會導(dǎo)致創(chuàng)建或獲取依賴關(guān)系時陷入死循環(huán),程序崩潰.
如圖5所示,依賴關(guān)系構(gòu)成一個有向有環(huán)的循環(huán)圖(由父配置項指向子配置項),為了清晰展示圖中省略了配置項的名稱前綴“CONFIG_”,依賴關(guān)系中的“comm”表示該依賴關(guān)系屬于多個體系架構(gòu)的公共依賴關(guān)系,“ARM”表示該依賴關(guān)系針對ARM架構(gòu),“ARM64”表示該依賴關(guān)系針對ARM64架構(gòu).圖5中產(chǎn)生循環(huán)的原因是將內(nèi)核配置項CONFIG_CPU_PM和CONFIG_ARCH_HIBERNATION_POSSIBLE在ARM64架構(gòu)中存在的依賴關(guān)系引入到ARM架構(gòu)的依賴關(guān)系圖中,而如圖4所示,基于ARM架構(gòu)的內(nèi)核配置項定義中此兩者并不存在依賴關(guān)系.
Fig. 4 CONFIG_ARCH_HIBERNATION_POSSIBLE under different architectures圖4 不同架構(gòu)下內(nèi)核配置項CONFIG_ARCH_HIBERNATIO_POSSIBLE定義
Fig. 5 Diagram of abnormal kernel configuration dependencies圖5 內(nèi)核配置項異常依賴關(guān)系圖
功能標(biāo)簽是基于內(nèi)核配置項的功能描述生成的標(biāo)簽,其功能描述主要從內(nèi)核自帶的Kconfig,Documents,Git log等文檔中抽取.功能標(biāo)簽的類型不僅包含內(nèi)核模塊中常見的機制如Filesystem(文件系統(tǒng))、Memory manage(內(nèi)存管理),也包括非模塊功能如Log(日志)、Debug(調(diào)試)等標(biāo)簽,部分功能標(biāo)簽示例如表1.一個內(nèi)核配置項可以有多個功能標(biāo)簽,如CONFIG_BFQ_CGROUP_DEBUG涉及Debug,Schedule,Cgroup這3個標(biāo)簽.
Table 1 Function Label Example表1 功能標(biāo)簽示例
功能標(biāo)簽等信息和依賴關(guān)系相互補充.很多內(nèi)核配置項間沒有依賴關(guān)系,但是存在其他潛在關(guān)聯(lián).如配置項CONFIG_XEN_MCE_LOG涉及Xen日志功能,配置項CONFIG_SCSI_LOGGING涉及SCSI(small computer system interface)日志功能,從依賴關(guān)系分析,CONFIG_XEN_MCE_LOG和CONFIG_SCSI_LOGGIN沒有依賴關(guān)系,但是兩者均涉及日志功能,可通過標(biāo)簽“Log”將2個配置項關(guān)聯(lián).相比依賴關(guān)系中的直觀聯(lián)系,標(biāo)簽更能深層挖掘出配置項間的潛在關(guān)聯(lián)關(guān)系.
內(nèi)核配置項采取多標(biāo)簽策略而不是分類策略是由于Linux內(nèi)核功能復(fù)雜,很多功能模塊或者機制并不能清晰歸為某一類別,如內(nèi)核源碼文件夾中Ceph在Fs和Net目錄下均有子目錄;Bluetooth在Drivers和Net目錄下均有子目錄.配置項存在同樣問題,一個配置項通常涉及多個子模塊或機制.以CONFIG_PCI_XEN為例,其既可以歸為Xen子類別,也可以歸為PCI(peripheral component interconnect)子類別.內(nèi)核配置項分類時,從不同角度會將配置項分入不同的類別,難以處理跨模塊的配置項,而標(biāo)簽方式更加靈活,可以通過多標(biāo)簽將跨模塊的配置項關(guān)聯(lián)起來.
內(nèi)核配置項數(shù)量巨大,僅Ubuntu 4.16版本中使能的有7 520個配置項,人工創(chuàng)建多標(biāo)簽工作量大、易出錯.可借助Scikit-learn[12]中的多標(biāo)簽算法(如OneVsRest策略+支持向量機算法)來輔助多標(biāo)簽的生成:首先Linux專家創(chuàng)建標(biāo)簽并為每個標(biāo)簽挑選初始配置項,然后依據(jù)多標(biāo)簽算法為剩余配置項生成標(biāo)簽.在后續(xù)的性能標(biāo)簽和安全標(biāo)簽中均可借助Scikit-learn中的多標(biāo)簽算法輔助創(chuàng)建標(biāo)簽.
研究顯示內(nèi)核配置項的錯誤設(shè)置已是當(dāng)前內(nèi)核性能降低的主要原因,Ren等人[1]發(fā)現(xiàn)內(nèi)核配置項的錯誤設(shè)置會導(dǎo)致核心系統(tǒng)調(diào)用性能降低或波動,很多系統(tǒng)調(diào)用性能相比老版本顯著下降,如poll,mmap,select等系統(tǒng)調(diào)用在內(nèi)核V4.20比內(nèi)核V4.0版本性能開銷成本增長了100%.內(nèi)核配置項對于系統(tǒng)性能影響很大,且內(nèi)核系統(tǒng)很難優(yōu)化,Red Hat和Suse通常需要6~18個月來優(yōu)化上游Linux內(nèi)核的性能[1];Google組織100多名工程師團隊對數(shù)據(jù)中心的內(nèi)核進行性能調(diào)優(yōu),對每個新內(nèi)核的優(yōu)化需要6~18個月的時間[1].為了輔助內(nèi)核開發(fā)者通過配置項調(diào)試系統(tǒng)性能,本節(jié)針對配置項創(chuàng)建性能標(biāo)簽.
本文基于Linux內(nèi)核提供的Kconfig,Documents,Git log等信息,評估配置項對系統(tǒng)性能的影響并生成標(biāo)簽,性能標(biāo)簽主要分為4種:內(nèi)存、磁盤、網(wǎng)絡(luò)、CPU.若某內(nèi)核配置項對內(nèi)存、磁盤、網(wǎng)絡(luò)、CPU中的某一種或多種硬件資源性能有提高或降低,則為該配置項貼上相應(yīng)的標(biāo)簽.性能標(biāo)簽示例如表2所示:
Table 2 Performance Label Example表2 性能標(biāo)簽示例
本文對內(nèi)核配置項的性能影響沒有依據(jù)性能提升或降低進一步創(chuàng)建標(biāo)簽,因為并非所有配置項對性能的影響都很明確,很多配置項對性能的影響與其使用的具體應(yīng)用場景緊密相關(guān).一些內(nèi)核配置項對系統(tǒng)性能的影響比較明確,如CONFIG_AIO配置項支持異步IO,常被高性能多線程使用,使能后有利于提高CPU的性能,CONFIG_CONTEXT_TRACKING_FORCE配置項負(fù)責(zé)上下文的強制跟蹤,該配置項使能后將會降低系統(tǒng)調(diào)用性能.另一些內(nèi)核配置項對系統(tǒng)性能影響比較模糊,需要根據(jù)硬件環(huán)境、應(yīng)用場景才能確定.如通過配置項CONFIG_DEFAULT_IOSCHED將IO調(diào)度策略設(shè)置為CFQ(completely fair queuing),該調(diào)度策略有利于提高傳統(tǒng)機械磁盤的性能,但對SSD硬盤并不是最優(yōu)調(diào)度策略,該配置項對系統(tǒng)性能的影響跟硬件緊密相關(guān);配置項CONFIG_PARAVIRT_SPINLOCKS支持半虛擬化自旋鎖,使能該配置項后可以提高KVMXen虛擬機CPU性能,但對宿主機性能有負(fù)面影響,該配置項帶來的性能影響跟應(yīng)用場景緊密相關(guān).
內(nèi)核配置項對系統(tǒng)安全的影響有2種:
1) 配置項涉及安全模塊或機制,使能該配置項后即為內(nèi)核提供相關(guān)安全機制,該類為安全增強標(biāo)簽;
2) 配置項關(guān)聯(lián)的功能模塊本身存在潛在的安全隱患,使能該配置項后會將該模塊中的安全隱患引入內(nèi)核,該類為安全削弱標(biāo)簽.
2種安全標(biāo)簽分類基于內(nèi)核的Kconfig,Docu-ments,Git log信息以及CVE(common vulnerabilities & exposures)[13]信息.
1) 安全增強標(biāo)簽.Linux內(nèi)核核心安全機制均需要配置項支持,如SELinux機制需要CONFIG_SECURITY_SELINUX支持;AppArmor安全機制需要配置項CONFIG_SECURITY_APPARMOR支持.對系統(tǒng)安全有增強作用的內(nèi)核配置項示例如表3所示,相關(guān)配置項使能后,其相關(guān)的安全機制會編譯進內(nèi)核,否則內(nèi)核無法提供相關(guān)安全機制.安全增強標(biāo)簽有助于內(nèi)核工程師判斷該內(nèi)核配置項對系統(tǒng)安全的影響.
Table 3 Security Enhancement Configuration Example表3 安全增強配置項示例
2) 安全削弱標(biāo)簽.一些模塊包含潛在的系統(tǒng)漏洞,如KVM模塊存在CVE-2019-14821系統(tǒng)漏洞,該漏洞可能導(dǎo)致主機內(nèi)核崩潰,配置項CONFIG_KVM_GUEST使能后KVM模塊會編譯進內(nèi)核,從而將該潛在漏洞引入內(nèi)核.對系統(tǒng)安全有削弱作用的內(nèi)核配置項的示例如表4所示,安全削弱標(biāo)簽可輔助內(nèi)核工程師根據(jù)應(yīng)用場景對配置項進行設(shè)置,如應(yīng)用場景為邊緣計算,則可考慮禁用CONFIG_KVM_GUEST避免安全隱患;如應(yīng)用場景為云計算則應(yīng)確認(rèn)KVM模塊中的潛在漏洞都已修復(fù).
Table 4 Security Weaken Configuration Example表4 安全削弱配置項示例
內(nèi)核配置項的依賴關(guān)系和其他標(biāo)簽均依據(jù)配置項本身的客觀特性創(chuàng)建,未從實踐應(yīng)用的角度對配置項進行分析.提出內(nèi)核配置項使能率,該指標(biāo)對配置項在實踐中使能情況進行統(tǒng)計,從實際應(yīng)用角度衡量配置項的重要性.內(nèi)核配置項的使能狀態(tài)在不同版本中通常會有改變,如配置項CONFIG_UEVENT_HELPER在內(nèi)核社區(qū)發(fā)布的v3.16至v5.1版本中均為使能狀態(tài),而在v5.2,v5.3,v5.4版本中則禁用.此外不同內(nèi)核配置項間的使能率差異顯著,如Ubuntu發(fā)行版v3.0至v4.20總計41個版本中,配置項CONFIG_KVM_GUEST均被使能,配置項CONFIG_IIO_HRTIMER_TRIGGER總計被使能14次,配置項CONFIG_IIO_STM32_TIMER_TRIGGER被使能0次.內(nèi)核配置項的使能率反映其在所有內(nèi)核版本中總的使能情況.內(nèi)核配置項使能率越高,則認(rèn)為其重要性越高,反之則認(rèn)為其重要性越低.內(nèi)核配置項使能率從實踐應(yīng)用角度為內(nèi)核配置項的重要性提供一個可量化參考指標(biāo).
內(nèi)核配置項使能率以各內(nèi)核版本中的配置項的使能狀態(tài)為基礎(chǔ),同時基于內(nèi)核版本的發(fā)布時間引入時間權(quán)重.新版本的內(nèi)核配置項的設(shè)置更適應(yīng)當(dāng)前硬件特性和功能需求,其參考價值大于老版本內(nèi)核中的設(shè)置,因此新版本的權(quán)重大于老版本的權(quán)重.為了對不同內(nèi)核版本的權(quán)重進行量化,本文引入了牛頓冷卻定律,該定律描述物體溫度隨著時間的衰減情況,在計算機領(lǐng)域常被用來量化文章熱度隨著時間的衰減情況[14]等場景,本節(jié)利用該定律計算內(nèi)核版本隨時間衰減后的權(quán)重.內(nèi)核版本vi的權(quán)重wi計算為
wi=wcur×exp(-α×(tcur-ti)),
(1)
其中,wcur表示最新發(fā)行版權(quán)重,默認(rèn)值為1,tcur表示當(dāng)前最新版本號,ti表示內(nèi)核版本vi的版本號,α為衰減因子,當(dāng)有新的內(nèi)核版本發(fā)布時,所有老版本的權(quán)重均會衰減.引入權(quán)重后的配置項使能率(config enable rate, CER)RCER計算公式為
(2)
其中,RCER表示內(nèi)核配置項基于各個內(nèi)核版本計算出的使能率,enable為配置項在版本vi中的使能值,若配置項在該版本中使能則enable=1,否則enable=0.
本文分別基于內(nèi)核社區(qū)和主流發(fā)行版(Ubuntu和Fedora)發(fā)布的內(nèi)核版本計算內(nèi)核配置項使能率.
1) 基于內(nèi)核社區(qū)的使能率.Linux內(nèi)核社區(qū)是Linux內(nèi)核最權(quán)威研發(fā)機構(gòu),負(fù)責(zé)Linux內(nèi)核版本的開發(fā)、維護和發(fā)布.該社區(qū)聚集了最權(quán)威的內(nèi)核開發(fā)人員,且有嚴(yán)格的開發(fā)流程保障內(nèi)核代碼質(zhì)量,所以內(nèi)核社區(qū)發(fā)布版中的配置項設(shè)置具有極高的權(quán)威性和參考價值,因此本文基于內(nèi)核社區(qū)發(fā)布的各版本計算內(nèi)核配置項使能率.
雖然內(nèi)核社區(qū)發(fā)布的版本具有極高權(quán)威性,但由于內(nèi)核應(yīng)用場景廣泛,從簡易IC卡到超級計算機均有應(yīng)用,為覆蓋復(fù)雜的應(yīng)用場景,內(nèi)核社區(qū)對配置項設(shè)置時通常比較保守,故本文還參考了Ubuntu和Fedora發(fā)行版的內(nèi)核配置項設(shè)置.
2) 基于主流發(fā)行版使能率.主流發(fā)行版選擇了Ubuntu和Fedora,Ubuntu是服務(wù)器市場應(yīng)用最廣泛的Linux發(fā)行版[15],且在個人用戶市場占據(jù)較大的份額.Fedora由全球最大開源軟件公司紅帽支持開發(fā),其特色為追求并吸納最新技術(shù),該發(fā)行版也是RHELCentos系發(fā)行版的試驗田.發(fā)行版針對內(nèi)核進行多方面調(diào)整和優(yōu)化,很多配置項的設(shè)置與內(nèi)核社區(qū)存在差異.如內(nèi)核配置項CONFIG_BLK_DEV_RAM_SIZE負(fù)責(zé)設(shè)置RamDisk的大小,內(nèi)核社區(qū)為適應(yīng)資源匱乏的應(yīng)用場景如邊緣計算,將其設(shè)置為16 384,Ubuntu的應(yīng)用場景資源通常比較充足,因此將其設(shè)置為65 536;選擇磁盤調(diào)度策略時,內(nèi)核社區(qū)使能內(nèi)核配置項CONFIG_IOSCHED_CFQ,選擇對傳統(tǒng)機械磁盤友好的策略CFQ,而Fedora新版本中使能內(nèi)核配置項CONFIG_IOSCHED_BFQ選擇對新興固態(tài)SSD硬盤更友好的BFQ(budget fair queueing)策略.基于Ubuntu和Fedora發(fā)行版的使能率可以從實踐應(yīng)用角度為內(nèi)核開發(fā)者提供參考.
內(nèi)核配置圖中包含了內(nèi)核配置項的依賴關(guān)系、功能標(biāo)簽、性能標(biāo)簽、安全標(biāo)簽、使能率的信息,可廣泛應(yīng)用在很多場景,如內(nèi)核優(yōu)化時可借助內(nèi)核配置圖的性能標(biāo)簽對內(nèi)核配置項進行篩選;內(nèi)核裁剪時可借助內(nèi)核配置圖的依賴關(guān)系了解禁用某配置項帶來的影響;內(nèi)核編譯失敗時可借助內(nèi)核配置項使能率輔助檢查配置項設(shè)置是否異常.此外,內(nèi)核配置圖在內(nèi)核配置項的推薦、檢索、智能問答等場景也可應(yīng)用.下一節(jié)將以內(nèi)核配置圖在內(nèi)核配置項檢索場景應(yīng)用為例,進一步說明和驗證內(nèi)核配置圖在實際應(yīng)用中的有效性和實用性.
本節(jié)將以內(nèi)核配置圖在內(nèi)核配置項檢索場景中的應(yīng)用為例,說明內(nèi)核配置圖的實用性.當(dāng)前Linux內(nèi)核v5.3版本已有超過15 000個配置項,導(dǎo)致內(nèi)核工程師很難熟悉和掌握,查找目標(biāo)配置項時存在時間成本高、效率低的問題.主流Linux發(fā)行版自帶的搜索工具apropos等僅支持對于本地命令、文本等搜索,并不支持內(nèi)核配置項的搜索,且Linux現(xiàn)有的文本內(nèi)容檢索工具都是關(guān)鍵字匹配,檢索效果不佳,為高效查詢內(nèi)核配置項,本節(jié)基于內(nèi)核配置圖實現(xiàn)了一個面向內(nèi)核配置項的本地檢索框KCIR.
傳統(tǒng)信息檢索框架如圖6(a)所示,將查詢語句query和內(nèi)核配置項的描述文檔config_doc作為入?yún)?經(jīng)過相似度算法計算得到查詢語句和配置項的相似度.本文基于內(nèi)核配置圖提出檢索框架KCIR,該框架的優(yōu)化主要包括查詢語句擴展和配置項描述信息文檔擴展.
1) 查詢語句擴展.研究表明,用戶輸入的查詢語句通常較短,包含關(guān)鍵字平均僅有2.4個單詞[16],只有約25%的查詢語句能夠清晰表達用戶意圖[17],即使用戶清楚自己查詢目的,也通常無法輸入準(zhǔn)確的查詢關(guān)鍵字[16],本文借助內(nèi)核配置圖對于查詢語句進行擴展,有助于提高查詢效果.
qenhance=qinit∪lchosen.
(3)
2) 內(nèi)核配置項描述信息擴展.配置項的描述信息主要來源于Linux內(nèi)核官方自帶的Kconfig及Documents等文檔,相比第三方信息源,內(nèi)核官方文檔更加專業(yè)可信,但存在自然語言中不可避免的語義模糊、描述不夠準(zhǔn)確等問題.
基于內(nèi)核配置圖中的依賴關(guān)系對配置項描述信息進行擴展:從配置項依賴關(guān)系圖中可獲得當(dāng)前配置項的父子配置項信息,可使用父子配置項描述信息對當(dāng)前配置項的描述信息進行補充和擴展.如內(nèi)核配置項CONFIG_MEMCG_SWAP跟Cgroup的內(nèi)存功能緊密相關(guān),但其在Kconfig中描述信息不夠充分,如圖7所示,其描述信息中缺少“memory”等相關(guān)關(guān)鍵字,其父配置項CONFIG_MEMCG和其子配置項CONFIG_MEMCG_SWAP_ENABLED在Kconfig中的描述如圖7,其中包含“memory”等關(guān)鍵字,父子配置項描述信息可對配置項CONFIG_MEMCG_SWAP的描述信息進行補充.
Fig. 6 Configuration item retrieval tool architecture圖6 內(nèi)核配置項檢索工具架構(gòu)
將配置項本身的描述信息稱為局部配置項信息,將融合了父子配置項的描述信息稱為全局配置項信息,CONFIG_MEMCG_SWAP的全局配置項信息擴展示意圖如圖7所示.在檢索時分別基于局部和全局的配置項描述信息進行相似度計算,然后將兩者得到的相似度加權(quán)相加,得到最終相似度.
基于查詢語句擴展和內(nèi)核配置項描述文檔擴展后的檢索框架KCIR的邏輯架構(gòu)圖如圖6(b)所示.首先將初始查詢語句qinit擴展后得到新查詢語句qenhance,將qenhance和配置項局部描述信息dlocal通過相似度算法得到相似度分?jǐn)?shù)Slocal,將qenhance和配置項全局描述信息dglobal經(jīng)過同樣的相似度算法得到相似度得分Sglocal,最后基于Slocal和Sglobal得到混合后相似度分?jǐn)?shù)Smix.
Slocal=sim(dlocal,qenhance),
(4)
Sglobal=sim(dglobal,qenhance),
(5)
Smix=δ×Slocal+(1-δ)×Sglobal,δ∈(0,1),
(6)
其中,式(4)(5)中的相似度算法sim可以是傳統(tǒng)算法如TF-IDF(term frequency-inverse document frequency)[18]或基于深度學(xué)習(xí)算法DSSM(deep structured semantic models)[19]等.
此外,若實際場景中更注重應(yīng)用頻率較高的內(nèi)核配置項,則可基于配置項使能率對內(nèi)核配置項設(shè)置權(quán)重.應(yīng)用頻率越高的內(nèi)核配置項的使能率越高,則其權(quán)重越高.
本節(jié)以檢索場景為例描述了內(nèi)核配置圖在實踐中的應(yīng)用,基于內(nèi)核配置圖實現(xiàn)了檢索框架KCIR,該框架主要優(yōu)化點是:1)使用功能標(biāo)簽對查詢語句進行了擴展;2)使用依賴關(guān)系對配置項的描述文檔進行擴展.
內(nèi)核配置圖提供的可視化功能包括依賴關(guān)系的可視化、功能標(biāo)簽聚類可視化、性能標(biāo)簽聚類可視化、安全標(biāo)簽聚類可視化、內(nèi)核配置項的多標(biāo)簽可視化.鑒于很多內(nèi)核配置項名較長,如CONFIG_ACPI_TABLE_OVERRIDE_VIA_BUILTIN_INITRD和CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT,為了展示更清楚,可視化圖中省略了內(nèi)核配置項的前綴“CONFIG_”.由于內(nèi)核配置項數(shù)量巨大,為了較清晰地顯示相關(guān)可視化信息細(xì)節(jié),對可視化圖進行適當(dāng)簡化.
1) 依賴關(guān)系可視化.在實際應(yīng)用中常需要了解某一內(nèi)核配置項的依賴關(guān)系,以評估該內(nèi)核配置項的影響,因此提供了配置項依賴關(guān)系可視化.對某一內(nèi)核配置項,可根據(jù)設(shè)置的祖先配置項和子孫配置項的遞歸深度對其依賴關(guān)系進行可視化展示,默認(rèn)可視化顯示當(dāng)前配置項的父配置項和其所有子孫配置項.圖8為內(nèi)核配置項CONFIG_CPU_FREQ的依賴關(guān)系可視化圖,有向連接從父配置項指向其子配置項,圖8中顯示了內(nèi)核配置項CONFIG_CPU_FREQ的直系父配置項CONFIG_SCHED_MC_PRIO和14個子孫配置項.從圖8中也可看出依賴關(guān)系并不符合樹結(jié)構(gòu)邏輯,樹結(jié)構(gòu)一般僅有1個父節(jié)點,而圖8中配置項CONFIG_CPU_FREQ_GOV_ATTR_SET有2個父節(jié)點CONFIG_CPU_FREQ_GOV_COMMON和CONFIG_CPU_FREQ_GOV_SCHEDUTIL.
Fig. 8 Visualization of CONFIG_CPU_FREQ dependency圖8 CONFIG_CPU_FREQ依賴關(guān)系可視化圖
2) 功能標(biāo)簽聚類可視化.功能標(biāo)簽聚類可視化主要圍繞功能標(biāo)簽顯示相關(guān)內(nèi)核配置項,如圖9所示.在圖9中以實線六邊形表示功能標(biāo)簽,Cgroup(控制組)、Debug(調(diào)試)、Sched(調(diào)度)分別表示3個功能標(biāo)簽.一個內(nèi)核配置項可有多個相關(guān)標(biāo)簽,如配置項CONFIG_BFQ_CGROUP_DEBUG同時和Cgroup,Debug,Sched這3個標(biāo)簽均有關(guān)聯(lián).
Fig. 9 Visualization of function label圖9 功能標(biāo)簽聚類可視化圖
3) 性能標(biāo)簽聚類可視化.性能標(biāo)簽聚類可視化主要圍繞CPU、內(nèi)存、網(wǎng)絡(luò)、硬盤4個維度顯示相關(guān)內(nèi)核配置項.以CPU性能標(biāo)簽為例,如圖10所示,以虛線橢圓表示性能標(biāo)簽,CPU標(biāo)簽關(guān)聯(lián)的內(nèi)核配置項均和CPU性能相關(guān),如配置項CONFIG_SCHED_MC針對多核CPU進行調(diào)度策略優(yōu)化.
Fig. 10 Visualization of CPU label圖10 CPU標(biāo)簽聚類可視化圖
4) 安全標(biāo)簽聚類可視化.安全標(biāo)簽分為2個子標(biāo)簽,即安全增強標(biāo)簽和安全削弱標(biāo)簽.安全增強標(biāo)簽如圖11,secur_en表示安全增強,跟該標(biāo)簽關(guān)聯(lián)的內(nèi)核配置項均對系統(tǒng)安全有積極意義,如配置項CONFIG_SECCOMP使能則允許使用SECCOMP技術(shù)安全的運行非信任代碼.安全削弱標(biāo)簽如圖12,secur_wk表示安全削弱,跟該標(biāo)簽關(guān)聯(lián)的內(nèi)核配置項存在潛在的安全漏洞,如配置項CONFIG_KVM存在過CVE-2019-7221漏洞.
Fig. 11 Visualization of security enhanced label圖11 安全增強標(biāo)簽可視化示意圖
Fig. 12 Visualization of security weakened label圖12 安全削弱標(biāo)簽可視化圖
Fig. 13 Multi-label visualization of CONFIG_BFQ_GROUP_IOSCHED圖13 CONFIG_BFQ_GROUP_IOSCHED多標(biāo)簽可視化圖
5) 內(nèi)核配置項多標(biāo)簽可視化.多標(biāo)簽可視化主要包括父配置項標(biāo)簽、子配置項標(biāo)簽、功能標(biāo)簽、性能標(biāo)簽、安全標(biāo)簽、使能率.以內(nèi)核配置項CONFIG_BFQ_GROUP_IOSCHED為例,其多標(biāo)簽可視化圖如圖13所示,該配置項對于Disk(硬盤)性能(虛線橢圓)有影響,其功能標(biāo)簽(實線六邊形)涉及Cgroup和Sched,其父節(jié)點包括配置項CONFIG_BLK_CGROUP和CONFIG_IOSCHED_BFQ,子配置項為CONFIG_BFQ_CGROUP_DEBUG.以實線橢圓標(biāo)簽表示使能率,其中“0.00L”中的L表示Linux社區(qū),0.00為相應(yīng)使能率;“0.40U”中U表示Ubuntu,“0.56F”中的F表示Fedora.因此圖13中的0.00L_0.40U_0.56F表示該配置項在內(nèi)核社區(qū)中的使能率為0,在Ubuntu發(fā)行版中加權(quán)后的使能率為0.40,在Fedora發(fā)行版中加權(quán)后的使能率為0.56.內(nèi)核社區(qū)的內(nèi)核配置項策略比較保守,更傾向選擇傳統(tǒng)調(diào)度策略CFQ而不是對新興SSD硬盤更友好的BFQ策略,因此基于內(nèi)核社區(qū)的內(nèi)核配置項CONFIG_BFQ_GROUP_IOSCHED的使能率為0,Ubuntu發(fā)行版對SSD硬盤提供了一定的支持,其對內(nèi)核配置項CONFIG_BFQ_GROUP_IOSCHED的使能率高于內(nèi)核社區(qū),Fedora發(fā)行版更傾向于新技術(shù)的應(yīng)用,在新版本中均選擇策略BFQ,因此對內(nèi)核配置項CONFIG_BFQ_GROUP_IOSCHED的使能率較高.
內(nèi)核配置項CONFIG_BFQ_GROUP_IOSCHED不涉及安全相關(guān)特性,故圖13中并沒有安全標(biāo)簽,我們以配置項CONFIG_SECURITY_SELINUX多標(biāo)簽可視化圖為例展示安全標(biāo)簽,如圖14所示,其中虛線六邊形標(biāo)簽為安全標(biāo)簽,標(biāo)簽secur_en表示該配置項對安全有增強作用,標(biāo)簽secur_wk表示該配置項涉及潛在安全隱患,隱患信息為CVE-2017-2618.
Fig. 14 Multi-label visualization of CONFIG_SECURITY_SELINUX圖14 CONFIG_SECURITY_SELINUX多標(biāo)簽可視化圖
本節(jié)對基于內(nèi)核配置圖的面向內(nèi)核配置項的檢索框架KCIR進行評估,KCIR邏輯架構(gòu)如圖6(b)所示,該框架分別對查詢語句和配置項描述文本進行擴展增強,適用于多種文本相似度算法.本節(jié)分別基于4個具有代表性文本相似度算法VSM[20],LSI[21],Word2vce[22],DSSM[19]對KCIR和傳統(tǒng)檢索框架進行對比評估.本實驗中KCIR的局部配置文本和全局配置文本的權(quán)重值即式(6)中統(tǒng)一設(shè)置δ=0.3.
1) VSM(vector space model)算法.VSM是20世紀(jì)70年代被提出,是信息檢索中的經(jīng)典檢索算法,該算法將文本內(nèi)容的處理簡化為向量空間中的向量運算,以空間上的相似度表達語義的相似度.本實驗中VSM算法沒有設(shè)置超參數(shù).
2) LSI(latent semantic indexing)算法.LSI是主題模型的代表算法,簡單實用、邏輯清晰,基于奇異值分解得到主題模型,同時解決詞義的問題.本實驗中LSI算法中的主題參數(shù)設(shè)置為500.
3) Word2vec算法.Word2vec是詞嵌入代表算法,該算法可將詞語映射為詞向量,其核心思想是利用簡單神經(jīng)網(wǎng)絡(luò)對詞的上下文訓(xùn)練得到詞的向量化表示.可基于詞向量計算文本間的相似度.本實驗中Word2vec算法中的特征維度設(shè)置為71,移動窗口設(shè)置為10,采用skip-gram訓(xùn)練算法.
4) DSSM算法.DSSM是基于深度神經(jīng)網(wǎng)絡(luò)計算文本相似度的代表算法,基于深度神經(jīng)網(wǎng)絡(luò)把查詢和文本轉(zhuǎn)化為低緯語義向量,并通過余弦相似度計算2個語義向量的距離,此外根據(jù)用戶的點擊進行有監(jiān)督學(xué)習(xí),最終訓(xùn)練出語義相似度模型.本實驗使用微軟提供的基于DSSM模型已訓(xùn)練好的文本轉(zhuǎn)化向量工具[23]對查詢和文本進行轉(zhuǎn)換.
本文基于4個算法進行實驗評估,介紹實驗中的基準(zhǔn)數(shù)據(jù).
1) 基準(zhǔn)數(shù)據(jù).當(dāng)前針對文本相似度評估有很多可用的數(shù)據(jù)集,但已有的數(shù)據(jù)集如新聞數(shù)據(jù)和內(nèi)核配置項的文本數(shù)據(jù)特征差異較大,針對內(nèi)核配置項檢索缺少可用的基準(zhǔn)數(shù)據(jù)集,因此我們邀請Linux專家提供了一個針對內(nèi)核配置項的包含178條query-doc數(shù)據(jù)的數(shù)據(jù)集,該數(shù)據(jù)集覆蓋內(nèi)存、虛擬化、文件系統(tǒng)、網(wǎng)絡(luò)、進程、安全、電源、調(diào)試等內(nèi)核模塊,平均每個模塊20條左右基準(zhǔn)數(shù)據(jù).基于該數(shù)據(jù)對檢索結(jié)果評估.該基準(zhǔn)數(shù)據(jù)格式如表5所示,包含查詢語句和相應(yīng)的目標(biāo)配置項.
Table 5 query-doc Example表5 query-doc示例
2) 評估指標(biāo).在基準(zhǔn)數(shù)據(jù)中,每組基準(zhǔn)數(shù)據(jù)包含查詢語句和目標(biāo)配置項信息,本實驗將查詢語句作為入?yún)?查看返回的TopK結(jié)果中是否包含目標(biāo)配置項,若包含則該query-doc為命中狀態(tài),統(tǒng)計命中狀態(tài)的query-doc條目數(shù)量作為評估指標(biāo),其中TopK的K取值分別為1,3,5,7,9.
3) 結(jié)果分析.本實驗使用的基準(zhǔn)為傳統(tǒng)檢索框架,其邏輯架構(gòu)圖如圖6(a)所示,使用該框架與本文提出的KCIR框架對比評估.檢索框架KCIR主要包含2點優(yōu)化策略:
1) 基于內(nèi)核配置圖中的標(biāo)簽對查詢擴展;
2) 基于內(nèi)核配置圖中的依賴關(guān)系對內(nèi)核配置項描述信息擴展.
評估時首先對KCIR中的2個優(yōu)化策略分別評估,然后對KCIR進行總評估.實驗使用內(nèi)核社區(qū)發(fā)布的v5.4版本內(nèi)核,基于VSM,LSI,Word2vec,DSSM這4個相似度算法分別對檢索框架KCIR和傳統(tǒng)檢索框架進行對比評估,以驗證框架KCIR的有效性.
基于VSM算法評估結(jié)果如圖15所示,對于TopK(1,3,5,7,9)分別統(tǒng)計:傳統(tǒng)檢索框架、KCIR中查詢擴展優(yōu)化、KCIR中描述文檔擴展優(yōu)化、KCIR框架(綜合查詢擴展和描述文檔擴展)共4種情況的檢索結(jié)果,其中傳統(tǒng)檢索框架作為基準(zhǔn)數(shù)據(jù).從圖15易知KCIR的查詢擴展和描述文檔擴展策略均可提高檢索效果.與傳統(tǒng)檢索框架相比,KCIR中的查詢擴展策略可將TopK命中率提升5.26%~18.18%,KCIR中的描述文檔擴展策略可將TopK的命中率提升3.92%~7.27%,KCIR檢索框架可將TopK命中率提升8.27%~27.27%.
Fig. 15 Retrieval results based VSM圖15 基于VSM算法評估結(jié)果
Fig. 16 Retrieval results based LSI圖16 基于LSI算法評估結(jié)果
基于LSI算法評估結(jié)果如圖16所示,與傳統(tǒng)檢索框架相比,KCIR中的查詢擴展策略可將TopK命中率提升9.70%~14.28%,KCIR中的描述文檔擴展策略可將TopK的命中率提升10.67%~15.71%,KCIR檢索框架可將TopK命中率提升14.00%~30.00%.
基于Word2vec算法評估結(jié)果如圖17所示,與傳統(tǒng)檢索框架相比,KCIR中的查詢擴展策略可將TopK命中率提升3.09%~15.87%,KCIR中的描述文檔擴展策略在Top1上帶來了4.44%的下降,在Top3~Top9將命中率提升5.00%~12.79%,KCIR檢索框架可將TopK命中率提升6.66%~22.22%.
Fig. 17 Retrieval results based Word2vec圖17 基于Word2vec算法評估結(jié)果
基于DSSM算法評估結(jié)果如圖18所示,與傳統(tǒng)檢索框架相比,KCIR中的查詢擴展策略可將TopK命中率提升0.00%~14.51%,KCIR中的描述文檔擴展策略可將TopK的命中率提升4.34%~11.29%,KCIR檢索框架可將TopK命中率提升6.08%~29.03%.
Fig. 18 Retrieval results based DSSM圖18 基于DSSM算法評估結(jié)果
本文研究點是檢索框架而不是具體算法的改進優(yōu)化,重點關(guān)注檢索框架KCIR和傳統(tǒng)檢索框架的對比分析.通過4個相似度算法的評估可見,與傳統(tǒng)檢索框架相比,基于內(nèi)核配置圖的檢索框架KCIR對檢索效果有顯著提升:將基于VSM算法的TopK命中率提升了8.27%~27.27%,將基于LSI算法的TopK命中率提升了14.00%~30.00%,將基于Word2vec算法的TopK命中率提升了6.66%~22.22%,將基于DSSM算法的TopK命中率提升了6.08%~29.03%.
在內(nèi)核裁剪、內(nèi)核優(yōu)化等場景常需要對內(nèi)核定制化的設(shè)置和修改,內(nèi)核配置項數(shù)量巨大,人工修改會引入一些錯誤的設(shè)置[24],并對系統(tǒng)造成嚴(yán)重負(fù)面影響,如CONFIG_CONTEXT_TRACKING_FORCE設(shè)置不當(dāng)會嚴(yán)重影響系統(tǒng)的性能.基于內(nèi)核配置圖可對修改后的配置項值進行異常檢測,從內(nèi)核配置圖中可抽取配置項的多種特征信息如基于內(nèi)核社區(qū)和發(fā)行版的使能率、子孫配置項數(shù)量等,然后借助異常檢測算法如Isolation Forest算法等對內(nèi)核配置項進行異常檢測并生成最終的檢測報告表,示例如表6所示,表6包含了配置項當(dāng)前的設(shè)置值、核心特征數(shù)據(jù)以及最后的檢測建議(是否).
Table 6 Example of Abnormal Detection Report表6 異常檢測報告示例
當(dāng)前針對內(nèi)核配置項的研究工作比較多元,研究者從配置文件Kconfig語法、內(nèi)核配置項對Linux系統(tǒng)性能和安全的影響、內(nèi)核配置項和源代碼的關(guān)聯(lián)等不同角度進行多樣化研究.文獻[25]中,El-Sharkawy等人對內(nèi)核配置項的定義文件Kconfig語義進行分析,發(fā)現(xiàn)Kconfig存在語義模糊的現(xiàn)象,且說明文檔中對于一些特殊情況缺少相關(guān)描述.此外他們對現(xiàn)有的Kconfig分析工具的有效性進行了評估,分析結(jié)果有助于Kconfig分析工具的改進.文獻[1]中,Ren等人對Ubuntu v3.0至v4.20橫跨7年的不同內(nèi)核版本的系統(tǒng)調(diào)用性能進行分析對比,發(fā)現(xiàn)內(nèi)核配置項的錯誤設(shè)置是導(dǎo)致系統(tǒng)性能波動或下降的重要原因,同時Linux內(nèi)核優(yōu)化成本很高,并不適合個人或小團隊去做.文獻[2]中,Acher等人針對內(nèi)核構(gòu)建中出現(xiàn)的因內(nèi)核配置項錯誤設(shè)置導(dǎo)致的構(gòu)建失敗問題,提出了一個TuxML工具框架,該框架可以輔助內(nèi)核配置項的設(shè)置,避免內(nèi)核構(gòu)建錯誤.文獻[26]中,Walch等人提出了一個基于SAT的內(nèi)核配置項形式化分析方法,該方法幫助開發(fā)者了解內(nèi)核配置項的相關(guān)問題,如針對特定架構(gòu)的處理器哪些選項是必須配置的,哪些選項是不能設(shè)置的.文獻[27]中,Ziegle等人對內(nèi)核配置項和其影響到的代碼文件的關(guān)聯(lián)關(guān)系進行分析,發(fā)現(xiàn)大部分內(nèi)核配置項僅影響較少的代碼文件,僅有少數(shù)內(nèi)核配置項會影響到幾乎所有代碼文件.文獻[24]中,Melo等人對內(nèi)核配置項的相關(guān)警告進行分析,通過對40萬條警告信息進行統(tǒng)計和分類,發(fā)現(xiàn)Linux中包含大量與內(nèi)核配置項相關(guān)的警告,且很多警告對系統(tǒng)影響嚴(yán)重.文獻[28]中,Acher等人對基于內(nèi)核配置項的內(nèi)核裁剪進行研究,發(fā)現(xiàn)基于機器學(xué)習(xí)對配置項進行設(shè)置時由于內(nèi)核配置項數(shù)量巨大,導(dǎo)致算法搜索空間隨之變大,對于配置項的預(yù)測結(jié)果誤差很大;當(dāng)縮小內(nèi)核配置項的范圍后可有效提高內(nèi)核配置項的預(yù)測,并對內(nèi)核裁剪提供幫助.
當(dāng)前針對Linux的檢索工具基本可以分為2類:1)針對文本內(nèi)容的檢索工具;2)針對文件名的檢索工具.文本內(nèi)容檢索的代表工具有Grep[29]和Apropos[30].Grep是本地查詢工具,在指定目錄和文件中根據(jù)關(guān)鍵字進行匹配,Apropos根據(jù)關(guān)鍵字在系統(tǒng)的文檔和手冊中進行匹配,跟Grep相比,Apropos有2個區(qū)別:1)Apropos不需要指定目標(biāo)目錄和文件,搜索范圍為系統(tǒng)自帶的文檔和手冊;2)Apropos的檢索目標(biāo)是命令行或者函數(shù)等,查詢相關(guān)幫助文檔.Grep和Apropos均是系統(tǒng)自帶的本地檢索工具.文件名檢索的代表工具有Find[31],Locate[32],Fsearch[33],這些工具主要基于關(guān)鍵字對文件名進行匹配,而不是文本內(nèi)容檢索.Find根據(jù)用戶指定目錄進行檢索,Locate和Fsearch會進行整個系統(tǒng)檢索.此外還有專有檢索工具如Which[34]專門搜索系統(tǒng)命令的絕對路徑地址,Lawall等人[35]針對Linux驅(qū)動信息檢索進行了研究.當(dāng)前還沒有針對內(nèi)核配置項的檢索工具,現(xiàn)有Linux檢索工具并沒有針對內(nèi)核配置項的數(shù)據(jù)特征(如配置項間存在依賴關(guān)系)進行優(yōu)化,本文基于內(nèi)核配置圖,提出了針對內(nèi)核配置項的檢索框架KCIR,該框架屬于文本內(nèi)容檢索.
本文提出了一種基于多標(biāo)簽的內(nèi)核配置圖(1)基于多標(biāo)簽的內(nèi)核配置項及KCIR的開源版本代碼參見https:gitee.comkcirkcir,該圖包含內(nèi)核配置項的依賴關(guān)系(從中可得父配置項和子配置項標(biāo)簽)、功能標(biāo)簽、性能標(biāo)簽、安全標(biāo)簽、配置項使能率標(biāo)簽.此外,內(nèi)核配置圖提供可視化功能,更加直觀、高效、人性化.該內(nèi)核配置圖在內(nèi)核裁剪、內(nèi)核安全增強、內(nèi)核性能優(yōu)化、內(nèi)核配置項異常檢測、內(nèi)核配置項智能問答和內(nèi)核配置項推薦等場景均可應(yīng)用.為了驗證內(nèi)核配置圖在實際應(yīng)用中的有效性,將內(nèi)核配置圖應(yīng)用到檢索場景,設(shè)計實現(xiàn)了面向內(nèi)核配置項的檢索框架KCIR,該框架使用內(nèi)核配置圖對查詢和配置項文本信息分別擴展,實驗評估表明該框架相比傳統(tǒng)的檢索框架可顯著提升檢索效果,也從實踐角度證明內(nèi)核配置圖的有效性和實用性.未來工作中,將內(nèi)核配置圖的信息進一步增強,如添加內(nèi)核配置項帶來空間大小信息,同時將內(nèi)核配置圖應(yīng)用到更多的場景,如內(nèi)核配置項異常值檢測等.