最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

使用 Rust 在 eBPF 中捕獲性能回歸:簡(jiǎn)介

2023-07-08 10:51 作者:岱軍  | 我要投稿

開(kāi)發(fā)團(tuán)隊(duì)?wèi)?yīng)盡可能將性能回歸的檢測(cè)盡早進(jìn)行。以下是使用連續(xù)基準(zhǔn)測(cè)試工具 Bencher 的方法。

翻譯自 Catch Performance Regressions in eBPF with Rust: Intro 。

圖片

這是一個(gè)由五部分組成的系列文章的第一部分。在此閱讀第二部分。

擴(kuò)展伯克利數(shù)據(jù)包過(guò)濾器(eBPF)在不需要維護(hù)內(nèi)核模塊的麻煩情況下,用于擴(kuò)展Linux內(nèi)核的功能。從高層次來(lái)看,eBPF 是 Linux 內(nèi)核中運(yùn)行特殊類型字節(jié)碼的虛擬機(jī)。要?jiǎng)?chuàng)建一個(gè) eBPF 程序,需要將諸如 C、C++ 和 Rust 等語(yǔ)言的源代碼編譯為 eBPF 字節(jié)碼,然后將該字節(jié)碼加載到內(nèi)核中。然后,內(nèi)核使用 eBPF 驗(yàn)證器對(duì)字節(jié)碼進(jìn)行檢查。

eBPF 驗(yàn)證器評(píng)估 eBPF 字節(jié)碼;它基本上需要解決其中的停機(jī)問(wèn)題。這是非常重要的一步。驗(yàn)證確保 eBPF 程序不會(huì)使內(nèi)核崩潰。因此, eBPF 在其允許執(zhí)行的操作上有一些限制。所有程序都限制為一百萬(wàn)條指令;沒(méi)有無(wú)限循環(huán),也沒(méi)有在 eBPF 內(nèi)部等待用戶空間事件的方式。

一旦 eBPF 字節(jié)碼經(jīng)過(guò)驗(yàn)證,就可以將其加載到 eBPF 虛擬機(jī)中,在內(nèi)核中運(yùn)行。eBPF 程序可以在內(nèi)核中執(zhí)行多種不同的任務(wù):跟蹤系統(tǒng)調(diào)用,探測(cè)用戶空間,探測(cè)內(nèi)核函數(shù),對(duì) Linux 安全模塊(LSM)進(jìn)行工具化,以及過(guò)濾數(shù)據(jù)包,其中最初的用例是最后一個(gè)。當(dāng)時(shí)它只是伯克利數(shù)據(jù)包過(guò)濾器(BPF)。隨著時(shí)間的推移,隨著添加了新的用例,它變得被稱為擴(kuò)展BPF。現(xiàn)在,由于存在眾多可能的應(yīng)用程序,該縮寫(xiě)已被廢棄,取而代之的是 eBPF ,現(xiàn)在只是一堆字母,表示 eBPF 。

圖片

有幾種不同的語(yǔ)言和工具集可用于使用 eBPF 。一個(gè)基礎(chǔ)性的工具是 libbpf ,它是用 C 編寫(xiě)的,并在 Linux 內(nèi)核源代碼樹(shù)的 tools/lib/bpf 目錄下開(kāi)發(fā)。它是處理 eBPF 的標(biāo)準(zhǔn)工具。然而,?libbpf?相當(dāng)?shù)图?jí),因此添加了額外的工具來(lái)幫助更輕松地編寫(xiě) eBPF 程序及其相應(yīng)的用戶空間程序。

一個(gè)名為 bcc 的工具允許使用 C 編寫(xiě) eBPF 程序,并使用 Python 和 lua 編寫(xiě)用戶空間程序。還有 ebpf-go) ,它允許使用 C 編寫(xiě) eBPF 程序,并使用 Go 編寫(xiě)用戶空間程序。最后,還有 Rust 的 eBPF 生態(tài)系統(tǒng)。libbpf-rs 是?libbpf?的官方 Rust 封裝。然而,?libbpf-rs?仍然要求使用 C 編寫(xiě) eBPF 程序。為了在 Rust 中編寫(xiě) eBPF 程序,創(chuàng)建了一個(gè)名為 RedBPF 的工具。后來(lái),這被 Aya 取代。Aya 完全擺脫了對(duì)?libbpf?的依賴,采用純粹的本地 Rust 實(shí)現(xiàn)。

我們將使用 Rust 進(jìn)行工作,這是一種專注于性能、可靠性和生產(chǎn)力的現(xiàn)代編程語(yǔ)言。這使得它成為進(jìn)行系統(tǒng)編程的優(yōu)秀語(yǔ)言,這也導(dǎo)致它最近作為 Linux 內(nèi)核中的第一種新語(yǔ)言與 C 并存。在接下來(lái)的系列文章中,我們將使用 Aya 工具集來(lái)同時(shí)編寫(xiě) eBPF 和用戶空間程序。

在編寫(xiě) eBPF 程序時(shí),性能至關(guān)重要。由于 eBPF 程序在內(nèi)核中運(yùn)行,如果它們運(yùn)行緩慢,可能會(huì)拖慢整個(gè)系統(tǒng)。單次調(diào)用 eBPF 程序可能會(huì)給調(diào)用添加高達(dá) 100 毫秒的延遲。這種性能回歸水平在開(kāi)發(fā)中是可以檢測(cè)到的。然而,除非開(kāi)發(fā)人員已經(jīng)密切關(guān)注,否則很少發(fā)生這種情況。大多數(shù)開(kāi)發(fā)團(tuán)隊(duì)沒(méi)有建立檢測(cè) CI 中性能回歸的基礎(chǔ)設(shè)施,就像對(duì)功能回歸一樣。這使得性能錯(cuò)誤只能在生產(chǎn)環(huán)境中檢測(cè)到,此時(shí)它們已經(jīng)影響到用戶,并且修復(fù)它們的代價(jià)最高。

性能錯(cuò)誤是錯(cuò)誤,開(kāi)發(fā)團(tuán)隊(duì)?wèi)?yīng)盡可能將性能回歸的檢測(cè)盡早移至開(kāi)發(fā)周期的左側(cè)。依靠開(kāi)發(fā)人員在每次更改時(shí)手動(dòng)運(yùn)行基準(zhǔn)測(cè)試是不可行的。與運(yùn)行單元測(cè)試以防止功能回歸的原因相同,應(yīng)該在 CI 中運(yùn)行基準(zhǔn)測(cè)試以防止性能回歸。這將需要一個(gè)連續(xù)的基準(zhǔn)測(cè)試工具,例如 Bencher 來(lái)跟蹤基準(zhǔn)測(cè)試并捕獲性能回歸。

在這個(gè)系列的博客文章中,我們將涵蓋以下內(nèi)容:

  • 在Rust中編寫(xiě)基本的eBPF程序

  • 在Rust中演進(jìn)eBPF程序

  • 在Rust中進(jìn)行基準(zhǔn)測(cè)試eBPF程序

  • 在Rust中進(jìn)行連續(xù)基準(zhǔn)測(cè)試eBPF程序


該項(xiàng)目的所有源代碼都是開(kāi)源的,可以在 GitHub 上獲取。


本文使用 文章同步助手 同步

使用 Rust 在 eBPF 中捕獲性能回歸:簡(jiǎn)介的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
金塔县| 甘肃省| 池州市| 邓州市| 石景山区| 邹城市| 南充市| 印江| 襄樊市| 嘉峪关市| 临漳县| 浠水县| 石柱| 河北区| 鄂尔多斯市| 安多县| 兴化市| 陇西县| 孟津县| 巩义市| 渑池县| 鄂托克前旗| 山西省| 广平县| 随州市| 柘城县| 涿鹿县| 利津县| 崇左市| 横峰县| 上蔡县| 阿合奇县| 定结县| 教育| 甘孜县| 铜陵市| 西丰县| 玛曲县| 宁晋县| 乌鲁木齐县| 禄丰县|