當前位置:
首頁 > 科技 > Facebook開源Linux內核組件和工具:BPF、Btrfs、Netconsd、Cgroup2、PSI、Oomd

Facebook開源Linux內核組件和工具:BPF、Btrfs、Netconsd、Cgroup2、PSI、Oomd

作者:Tejun Heo(Facebook的軟體工程師)和Thomas Connally。

Facebook工程文化的一個組成部分始終是我們的開發團隊致力於開發開源解決方案,以解決實際的生產問題,並應對現代大規模雲計算的重大挑戰。今天,我們宣布了一套解決重要的計算集群(fleet)管理問題的開源Linux內核組件和相關工具。這些包括資源控制、資源利用、工作負載隔離、負載均衡、測量和監控等方面的工具。

Facebook的內核和內核應用程序開發人員與各內部團隊合作,開發解決Facebook數據中心中諸多問題的技術,這也是整個行業中的許多企業共同面臨的挑戰。下列產品現在已大規模用於Facebook所有基礎設施的生產環境中,並用於其他許多企業組織的環境中。

BPF

BPF是Linux內核中一種高度靈活、高效率的代碼執行引擎,讓位元組碼可以在各個鉤子點(hook point)運行,以便可以使用自定義代碼,安全而輕鬆地改動內核行為。雖然BPF已廣泛用於數據包過濾,但是BPF的指令集具有很強的通用性和靈活性,足以支持和允許除網路之外的眾多使用場合,比如跟蹤和安全(比如沙盒)。

在Facebook,為我們的用戶確保快速而可靠的訪問是首要任務。為了實現這個目標,我們的基礎設施工程師開發出了多個流量優化系統,BPF在這些系統中發揮著重要作用。其中一個例子是Katran,這是一種基於軟體的負載均衡解決方案,完全重新設計的轉發平面可充分利用BPF虛擬機。Katran轉發平面軟體庫為Facebook基礎設施中所用的網路負載均衡器提供支持,幫助提高了網路負載均衡的性能和可擴展性,同時大大減少了低效率現象。

Btrfs

Btrfs是下一代文件系統,設計時考慮到了如今的數據中心。它是一種寫時拷貝(CoW)文件系統,專註於高級功能的實現、容錯、修復和易於管理。Btrfs旨在應對和管理大型存儲子系統,並支持快照、聯機碎片整理、池化(pooling)和集成的多設備支持等功能。

在許多不同的應用環境下,Btrfs為Facebook的數據中心提高效率和資源利用率發揮了作用。最近,Btrfs與cgroup2(下文有介紹)一起用於I/O控制,幫助消除了之前文件系統的日誌行為引起的優先順序倒置(priority inversion)。Btrfs是目前實現的唯一與資源隔離機制協同使用的文件系統,現在它部署在數百萬台伺服器上,大幅提高了效率。

Netconsd

Netconsd是一個基於UDP的netconsole守護程序,為Linux netconsole消息提供輕量級傳輸機制。它接收並處理來自Linux內核的日誌數據,並將該數據作為結構化數據來提供,幫助生產級工程師迅速識別計算集群中的問題。

在Facebook,netconsd提供了重要的數據中心統計數據。它可以持續記錄來自數百萬個主機的數據,讓工程師得以從內核中生成的一大堆日誌數據中提取有意義的信號,幫助隨叫隨到的生產級工程師迅速識別和診斷行為異常的服務。

Cgroup2

Cgroup2是下一代Linux內核機制,用於工作負載的分組和安排,並控制分配給每個組的系統資源數量。它擁有面向內存、I/O、中央處理單元及更多部件的控制器。它還讓你可以隔離工作負載,為每個工作負載配置資源分配,並確定優先順序。

藉助更好地處理內存過量分配以及內存變得稀缺時進行減載(load shedding)等策略,使用cgroup2實現的資源控制正在推動Facebook的數據中心在多租戶機制方面大有改進。它改善Facebook計算集群的資源利用率的方法是,將系統的主要工作負載與廣泛分布的系統二進位文件以及在Facebook主機上運行的其他系統服務隔離開來,並加以保護。

為這些系統二進位文件保留的資源被稱為fbtax,fbtax後來成了解決Facebook計算集群中優先順序倒置及其他資源分配問題的那個項目的名稱。fbtax項目表明了在使用內存管理和文件系統等操作系統功能時有望實現全面的資源隔離,因而為此創造了機會:使工作負載堆疊起來簡單又安全,從而提高計算集群的效率。想了解詳細信息,請查看cgroup2文檔中的fbtax2案例研究(https://facebookmicrosites.github.io/cgroup2/docs/overview.html#case-study-the-fbtax2-project)。

PSI

Pressure Stall Information(PSI)首次提供了一種堪稱典範的方法:藉助內存、CPU和I/O這三種主要資源的新pressure指標,量化資源短缺。這些pressure指標與這次一起開源的其他內核和用戶空間工具相結合,便於開發團隊在開發和智能響應時可以檢測資源短缺情況。PSI統計數據為即將發生的資源短缺提供了預警功能,因而實現更主動、更細緻、更準確的響應。

我們Facebook將PSI與cgroup2結合使用,以便針對每個cgroup深入了解眾多不同工作負載的資源使用(和濫用)情況,從而在資源不足的情況下提高利用率和可靠性。

該圖顯示了各個組件和工具如何協同工作

Oomd

Oomd是一個用戶空間OOM(內存溢出)進程終止工具,它在使用時可以更好地了解系統上運行的進程的上下文和優先順序。它讓你可以配置對OOM條件作出的響應,比如暫停或終止非必需項、重新分配系統中的內存或執行其他操作。

在過去,OOM終止在內核裡面進行。如果系統耗盡了物理內存,Linux內核將被迫對一個或多個進程執行OOM終止。這番操作通常緩慢而痛苦,原因是只有在內核本身無法進入到下一步時,內核才觸發:它缺乏了解應用程序運行狀況的任何方式,常常導致抖動(thrashing)行為,即內核認為條件正常,但應用程序受到影響。除了這個行為之外,策略配置起來複雜且不靈活。Oomd通過OOM在內核中出現之前採取糾正措施來解決用戶空間中的這些問題。支持自定義檢測邏輯的一個靈活的插件系統可配置這些操作。Oomd讓你可以為每個工作負載編寫自定義保護規則。

在Facebook的數據中心,Oomd與PSI指標和cgroup2結合使用,提高了可靠性和效率,有助於大幅增加容量並大幅提升資源利用率。

前景無限

這裡描述的使用場合僅僅是個開端。這次發布的開源內核組件和工具稍加調整,注有望解決幾乎無窮無盡的生產問題。Facebook繼續使用這些工具來開發和部署解決方案。我們相信,這一批服務和產品將有助於任何開發人員構建在多個平台上為數百萬用戶提供服務的應用軟體。

我們很高興向開源社區發布這些解決方案,但願它們幫助其他人解決類似的生產問題、開發創新的用途。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲頭條 的精彩文章:

對話 17 位技術大咖:顛覆與突破,重新定義雲原生
SB Cloud 之後,阿里又新增:平頭哥半導體有限公司

TAG:雲頭條 |