Facebook發(fā)布免費(fèi)Linux內(nèi)核工具
幫助那些管理大量的服務(wù)器釋放代碼,這些服務(wù)器是由一堆字母組成的。
多年來(lái),F(xiàn)acebook讓世界變得更加開(kāi)放、更加緊密。這讓每個(gè)人都很高興最近,F(xiàn)acebook開(kāi)始讓世界變得更加緊密。在追求全局壓縮的同時(shí),數(shù)據(jù)業(yè)務(wù)部開(kāi)發(fā)了一些難以拼寫的Linux內(nèi)核組件,以使開(kāi)源操作系統(tǒng)更適合于大量的服務(wù)器。周二,F(xiàn)acebook將其內(nèi)核工具套件作為開(kāi)源提供,以幫助其他組織尋找更有效地管理大量Linux服務(wù)器的方法。Facebook工程師Tejun Heo和Thomas Connally在一篇博客文章中說(shuō):“這個(gè)版本中包含的內(nèi)核組件和工具可以用來(lái)解決無(wú)數(shù)的生產(chǎn)問(wèn)題。他們相信,這些服務(wù)和產(chǎn)品的集合將有助于任何開(kāi)發(fā)人員構(gòu)建應(yīng)用程序,以在多個(gè)平臺(tái)上為數(shù)百萬(wàn)用戶服務(wù)。
首先是BPF, Linux內(nèi)核中的代碼執(zhí)行引擎。這個(gè)名稱曾經(jīng)指的是Berkeley包過(guò)濾器,現(xiàn)在它包含了一組更廣泛的函數(shù)。該軟件允許字節(jié)碼響應(yīng)特定事件運(yùn)行,以修改和擴(kuò)展內(nèi)核行為。從本質(zhì)上說(shuō),它是一個(gè)能夠進(jìn)行C調(diào)用的通用指令集。雖然BPF是基于內(nèi)核代理來(lái)在邊界分離內(nèi)核和用戶空間之間過(guò)濾數(shù)據(jù)包,但它不僅僅是用于網(wǎng)絡(luò)。例如,它可以用于跟蹤和沙箱。Facebook將BPF虛擬機(jī)與其開(kāi)源的Katran負(fù)載平衡軟件一起用于網(wǎng)絡(luò)流量?jī)?yōu)化。谷歌和Netflix也參與了BPF。然后是Btrfs,一個(gè)為數(shù)據(jù)中心設(shè)計(jì)的元音匱乏的文件系統(tǒng),著眼于容錯(cuò)、文件修復(fù)和易于管理。顯然,富士通、英特爾、甲骨文、SUSE和Red Hat等公司都對(duì)項(xiàng)目的發(fā)展做出了貢獻(xiàn)。根據(jù)Heo和Connally的說(shuō)法,Btrfs使Facebook的數(shù)據(jù)中心在各種應(yīng)用程序中更加高效。他們說(shuō)Btrfs幫助消除了以前的文件系統(tǒng)在使用cgroup2進(jìn)行I/O控制時(shí),日志記錄行為導(dǎo)致的優(yōu)先級(jí)倒置。注冊(cè)用戶詢問(wèn)Facebook是否可以提供任何指標(biāo)來(lái)量化其代碼如何改進(jìn)。一名公司發(fā)言人拒絕承諾可以提高博客文章的效率。
這讓我們想到了cgroup2,這是一個(gè)Linux內(nèi)核工具,通過(guò)將工作負(fù)載劃分為組并分配內(nèi)存、IO和處理等資源來(lái)控制它們。Facebook使用該軟件隔離和保護(hù)主系統(tǒng)工作負(fù)載,使其不受正在運(yùn)行的二進(jìn)制文件和其他系統(tǒng)服務(wù)的影響。它甚至進(jìn)行了一個(gè)案例研究,以記錄利用率的提高。
套件中的另一塊代碼區(qū)域叫做Netconsd。雖然它聽(tīng)起來(lái)像瀉藥,但實(shí)際上它是用來(lái)穿梭和構(gòu)造Linux netconsole消息的代碼,也就是日志數(shù)據(jù)。Heo和Connally說(shuō)它持續(xù)記錄來(lái)自數(shù)百萬(wàn)臺(tái)主機(jī)的數(shù)據(jù),并允許工程師從內(nèi)核中產(chǎn)生的大量日志數(shù)據(jù)噪聲中提取有意義的信號(hào),幫助隨叫隨到的生產(chǎn)工程師快速識(shí)別和診斷不正常的服務(wù)。作為cgroup2的補(bǔ)充,PSI提供了一種測(cè)量?jī)?nèi)存、CPU和I/O的方法。這個(gè)工具的目的是允許組織在事情失控之前對(duì)資源短缺做出反應(yīng)。最后是Oomd。不要和80年代的科技流行樂(lè)隊(duì)OMD混淆,它是一個(gè)對(duì)內(nèi)存不足(OOM)條件做出反應(yīng)的過(guò)程劊子手。Oomd介入用戶空間以防止Linux內(nèi)核中的OOM條件。它支持自定義邏輯檢測(cè),可以針對(duì)不同的工作負(fù)載進(jìn)行定制。