chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

BPF為內(nèi)核編程提供了一個(gè)新的參考模型

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:Linux閱碼場 ? 2022-10-19 11:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

無論好壞,C語言已經(jīng)是內(nèi)核開發(fā)領(lǐng)域的通用語言了。Linux 內(nèi)核的核心邏輯完全是用 C 語言編寫的(加上一點(diǎn)匯編),它的驅(qū)動程序和 module 也是如此。雖然 C 語言因其強(qiáng)大而簡單的語義而受到贊譽(yù),但它是一種古老的語言,缺乏現(xiàn)代語言(如 Rust)中的許多特性。另一方面,BPF 子系統(tǒng)也提供了一個(gè)編程環(huán)境,工程師能夠編寫可以在內(nèi)核空間安全運(yùn)行的程序。在愛爾蘭都柏林舉行的 2022 年 Linux Plumbers Conference 上,Alexei Starovoitov 概述了 BPF 多年來的發(fā)展,為內(nèi)核編程提供了一個(gè)新的參考模型。

BPF的使命

Starovoitov 首先描述了他對 BPF 的 "mission statement, 使命宣言":"創(chuàng)新、并啟發(fā)大家創(chuàng)新"。內(nèi)核中的編程歷來是在兩種情況下進(jìn)行的:

core kernel 開發(fā),包括主要的核心子系統(tǒng),如內(nèi)存管理、調(diào)度器、read-copy-update,等等。

kernel-module 開發(fā),指的是構(gòu)建那些不被編譯到 main kernel image 里的內(nèi)容,由 module loader 在后續(xù)加載。例如,驅(qū)動程序被寫成一些內(nèi)核 module,也有其他功能是這么做的,如文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議等等。

這是內(nèi)核在很長一段時(shí)間內(nèi)的狀態(tài),直到 3.15 版的內(nèi)核中加入了最早版本的 extended BPF(eBPF)虛擬機(jī)。有了它之后,BPF program 可以用一個(gè)受到嚴(yán)格限制的 C 語言來編寫,并被編譯成 BPF 字節(jié)碼,這將允許用戶編寫的代碼可以經(jīng)過驗(yàn)證確保安全,然后再在內(nèi)核空間運(yùn)行。

從那時(shí)起,BPF 在代碼的規(guī)模、用戶及貢獻(xiàn)者社區(qū)的規(guī)模方面都穩(wěn)步增長。根據(jù) Starovoitov 的說法,BPF 郵件列表上每天都會收到 50-70 條信息,每月大約收到 2000 封郵件。平均每月里活躍貢獻(xiàn)的 BPF 貢獻(xiàn)者的數(shù)量也在同步增長,截至 2022 年 9 月,已達(dá)到約 140 人。目前來說,對 BPF 子系統(tǒng)的大部分貢獻(xiàn)都不是來自 Meta BPF 小組了。

BPF編程環(huán)境

雖然大多數(shù) BPF 程序是用 C 語言編寫的,并用 LLVM Clang 編譯器編譯,但 BPF program 只是二進(jìn)制 BPF 字節(jié)碼對象文件,并未規(guī)定要用某種特定的語言來寫。比如說,BPF 程序可以使用 Aya 來采用 Rust 編寫,甚至可以直接用 BPF 匯編語言編寫。也就是說,C是 BPF 程序的典型(canonical)編程語言;Starovoitov 的演講繼續(xù)概述了 BPF program 開發(fā)中 C 編程環(huán)境是如何演進(jìn)的。

這個(gè)新的編程環(huán)境混合使用了 C 語言擴(kuò)展以及運(yùn)行時(shí)環(huán)境的組合實(shí)現(xiàn)的,這個(gè)運(yùn)行時(shí)環(huán)境包含了 Clang、用戶空間的 BPF 加載器庫(libbpf)和內(nèi)核中的 BPF 子系統(tǒng)。要想創(chuàng)建一個(gè) BPF 程序,用戶只要用 C 語言寫一個(gè)程序,由 Clang 的 backend 實(shí)現(xiàn)來轉(zhuǎn)換成 BPF 指令。在運(yùn)行程序時(shí),libbpf 將 BPF 程序加載到內(nèi)存中,對程序進(jìn)行重定位以使其可以跨平臺以及不同的內(nèi)核版本從而具備良好的可移植性,然后調(diào)用 kernel 來加載程序。最后在內(nèi)核中,verifier 會采用靜態(tài)方式驗(yàn)證該程序是否可以安全運(yùn)行,然后啟用之。

然而,BPF 的編程環(huán)境并不是一上來就這么豐富的。在 BPF 的早期,程序被要求使用 Starovoitov 所說的 "restricted C"。BPF 程序中的所有函數(shù)都必須完全是 inline 的,loop 循環(huán)、靜態(tài)變量和全局變量以及內(nèi)存分配都是不允許的。也沒有類型信息(type information),所以 BPF 程序只能接收單一的、固定的 input context,用于 tracing 以及 network-filtering 相關(guān)功能。

盡管在這樣一個(gè)高度限制性的環(huán)境中編寫 BPF 程序也是很有用的,但很明顯, BPF 所支持的使用場景還可以得到很大的擴(kuò)展。其中一個(gè)擴(kuò)展就是允許在 BPF 程序中使用靜態(tài)函數(shù)。這樣做需要使用 libbpf 在程序加載時(shí)對內(nèi)核 BPF 程序進(jìn)行重定位。經(jīng)過多年的設(shè)計(jì)和嘗試,最終也增加了對有限循環(huán)的支持,此外也支持了 iterator。

Extending the programming environment past full C

雖然這些使得 BPF 更接近于完整的 C 語言了,但最終可以看到,BPF 程序需要的一些功能甚至在完整的 C 語言標(biāo)準(zhǔn)中都沒有。于是 BPF 社區(qū)開始擴(kuò)展 BPF 編程環(huán)境,從而包括一些傳統(tǒng) C 語言沒有的新特性。其中一個(gè)擴(kuò)展功能就是 "一次編譯-到處運(yùn)行"(CO-RE, Compile Once - Run Everywhere)。

CO-RE 使 BPF 程序可以在不同的內(nèi)核版本和平臺上都可以運(yùn)行。在 BPF 程序中,訪問內(nèi)核數(shù)據(jù)結(jié)構(gòu)是很常見的行為。然而,內(nèi)核沒有為 struct layer 確保 ABI 不變,因此,如果內(nèi)核結(jié)構(gòu)在未來的版本或不同的 config 下發(fā)生了變化,在固定偏移的地方對內(nèi)核結(jié)構(gòu)進(jìn)行讀取的 BPF 程序可能就會讀到錯(cuò)誤的值。CO-RE 通過利用運(yùn)行中的內(nèi)核中的 BPF 類型格式(BTF)數(shù)據(jù)來解決這個(gè)問題。在加載一個(gè)程序時(shí),libbpf 對所有的 struct 的訪問都會進(jìn)行重定位,以便根據(jù)當(dāng)前運(yùn)行的內(nèi)核的 BTF 信息讓被訪問的字段的偏移量匹配上。

Starovoitov 還描述了 BPF 編程環(huán)境的其他一些有趣的新增功能。其中一個(gè)是 kptrs,它允許將內(nèi)核內(nèi)存的指針存儲在 BPF map 中。另一個(gè)功能是允許程序在加載時(shí)訪問內(nèi)核 config 參數(shù)。內(nèi)核 module 只能使用編譯時(shí)設(shè)置的 config 值,但 BPF 程序在加載時(shí)可以根據(jù)當(dāng)前內(nèi)核的配置來決定自己的行為。還有一個(gè)特點(diǎn)是 "type tags",可以讓程序能對變量進(jìn)行 annotation,從而描述它們的使用方式。例如,kptrs 可以用 __kptr 和 __kptr_ref type tags 來進(jìn)行標(biāo)注,從而表明它們分別是 unreferenced 或者 referenced kptr。當(dāng)然指針也可以用 __user 或 __percpu 標(biāo)準(zhǔn),來告訴編譯器和 verifier 這個(gè)指針分別指向用戶內(nèi)存或 per-CPU 內(nèi)存。

Plans for the future

目前正在設(shè)計(jì)和實(shí)現(xiàn)更多的擴(kuò)展,包括 lock-correctness 正確性驗(yàn)證,以及支持 BPF 程序包含 assertion。lock 的驗(yàn)證乍一看似乎是一個(gè)很難解決的問題,而 Dave Marchevsky 和 Kumar Kartikeya Dwivedi 都已經(jīng)發(fā)出了 RFC patch set 來實(shí)現(xiàn)用于 lock 驗(yàn)證的新 map type。Marchevsky 的 patch set 提出了一個(gè)新的紅黑樹 map type,而 Dwivedi 的 patch set 提出了一個(gè) list map type。這兩個(gè) patch set 都實(shí)現(xiàn)了共同的效果,允許 BPF 程序執(zhí)行由 verifier 檢查和驗(yàn)證過的 locking 機(jī)制。

assertion 驗(yàn)證仍處于規(guī)劃階段,實(shí)現(xiàn)起來可能會很復(fù)雜。assertion 將作為給編譯器和 verifier 的信號,assertion 被用來指示程序中的一些不變的因素,這些不變因素的失敗將導(dǎo)致程序中止。Starovoitov 聲稱,弄清如何讓程序中止,這會是一個(gè) "有趣" 的問題,因?yàn)樗枰踩貙Χ褩_M(jìn)行 unwind,調(diào)用 kptr destructor,以及其他收尾工作。

Starovoitov 在演講的最后分享了他對 BPF 未來的觀點(diǎn):會取代內(nèi)核模塊成為擴(kuò)展內(nèi)核的有效方式。早期版本的 BPF 程序看起來更像是帶有固定的 BPF helper function 和固定的 map type 的用戶空間程序,而如今新的 BPF 已經(jīng)可以讓用戶在更多個(gè)性化使用場景下對內(nèi)核進(jìn)行擴(kuò)展。事實(shí)上,這樣的使用場景已經(jīng)在 upstream 社區(qū)被提出來了。在 Starovoitov 之后在 LPC 發(fā)言的 Benjamin Tissoires,一直在開發(fā)一個(gè) patch set,希望用 BPF 程序來 fix 人類輸入設(shè)備(HID)的 quirk。到目前為止,還沒有一個(gè)內(nèi)核 module 被 BPF 程序完全取代掉,不過,很期待看到內(nèi)核的其他一些功能可以在 BPF 程序中實(shí)現(xiàn)。

一位聽眾要求了解 Starovoitov 所提到的 lock-correctness 驗(yàn)證的更多細(xì)節(jié)。Starovoitov 說,這個(gè)工作還在進(jìn)行當(dāng)中,但他樂觀地認(rèn)為可以找到一種方法來進(jìn)行 static lock checking,從而驗(yàn)證數(shù)據(jù)保護(hù)是正確的,并保證不會發(fā)生死鎖。Dave Miller 回應(yīng)說,如果鎖可以由 verifier 進(jìn)行靜態(tài)檢查,那么可能可以研究一下 locking 邏輯是否可以由 verifier 自動生成。Starovoitov 回答說,這就是他們希望實(shí)現(xiàn)的目標(biāo),目前的設(shè)計(jì)中將 lock 和受保護(hù)的數(shù)據(jù)在同一次 allocation 中放在一起。對于不能跟 lock 放在一起的數(shù)據(jù),可以用 BTF type tag 來指定它需要明確進(jìn)行鎖保護(hù)。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7634

    瀏覽量

    143906
  • 編程
    +關(guān)注

    關(guān)注

    89

    文章

    3704

    瀏覽量

    96257
  • 驅(qū)動程序
    +關(guān)注

    關(guān)注

    19

    文章

    868

    瀏覽量

    49720
  • BPF
    BPF
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    4533

原文標(biāo)題:LWN:讓BPF成為一個(gè)更安全的內(nèi)核編程環(huán)境!

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    汽車HIL測試系統(tǒng),歐美標(biāo)充電模型Simulink模型,開發(fā),有償

    提供個(gè)歐美標(biāo)充電模型,交付物白盒Simulink模型
    發(fā)表于 09-04 16:23

    3Dfindit 提供的數(shù)字立方體模型研究項(xiàng)目的可視化提供支持

    作為學(xué)習(xí)項(xiàng)目的部分,羅伊特林根教育大學(xué)的學(xué)生們在比辛根集中營紀(jì)念地的博物館中使用 3Dfindit 動畫立方體模型進(jìn)行了學(xué)習(xí)。作為歷史教學(xué)研討會的部分,學(xué)生們研究巴登-符騰堡州
    發(fā)表于 08-01 14:36

    FA模型訪問Stage模型DataShareExtensionAbility說明

    DataShareExtensionAbility提供數(shù)據(jù)庫的讀寫服務(wù)。 服務(wù)端由FA模型升級到Stage模型后,會導(dǎo)致FA模型的客戶端在API 9(含)之后的版本上無法訪問服務(wù)端。
    發(fā)表于 06-04 07:53

    如何將個(gè)FA模型開發(fā)的聲明式范式應(yīng)用切換到Stage模型

    模型切換概述 本文介紹如何將個(gè)FA模型開發(fā)的聲明式范式應(yīng)用切換到Stage模型,您需要完成如下動作: 工程切換:新建
    發(fā)表于 06-04 06:22

    KaihongOS操作系統(tǒng)FA模型與Stage模型介紹

    ,是目前主推且會長期演進(jìn)的模型。Stage模型提供AbilityStage、WindowStage等類作為應(yīng)用組件和Window窗口的“舞臺”,因此稱這種應(yīng)用
    發(fā)表于 04-24 07:27

    RK3588開發(fā)板上部署DeepSeek-R1大模型的完整指南

    與OK3588-C開發(fā)板的深度融合,標(biāo)志著國產(chǎn)AI大模型從云端向邊緣端的延伸。這種“先進(jìn)算法+定制化芯片”的協(xié)同模式,不僅解決邊緣側(cè)實(shí)時(shí)性、隱私保護(hù)等關(guān)鍵需求,更構(gòu)建起從技術(shù)研發(fā)到產(chǎn)業(yè)賦能的完整價(jià)值鏈條,
    發(fā)表于 02-27 16:45

    【「基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化」閱讀體驗(yàn)】+第章初體驗(yàn)

    機(jī)制。 《基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化》第章以清晰的邏輯框架,幫助讀者建立對大模型與RAG的全局認(rèn)知。通過剖析技術(shù)原理、優(yōu)勢與挑戰(zhàn),作者后續(xù)章節(jié)的實(shí)踐內(nèi)容奠定
    發(fā)表于 02-07 10:42

    中微推出7款計(jì)量方案,客戶提供站式服務(wù)

    中微推出7款計(jì)量方案,客戶提供站式服務(wù)測量芯片主要是中微RISC內(nèi)核的高精度測量芯片,內(nèi)置大容量的Flash,具有多級可編程放大器和差分
    的頭像 發(fā)表于 01-14 15:03 ?717次閱讀
    中微推出7款計(jì)量方案,<b class='flag-5'>為</b>客戶<b class='flag-5'>提供</b><b class='flag-5'>一</b>站式服務(wù)

    中微推出5款計(jì)量方案,客戶提供站式服務(wù)

    中微推出5款計(jì)量方案,客戶提供站式服務(wù)前言測量芯片主要是中微MCS-51內(nèi)核的高精度測量芯片,內(nèi)置大容量的Flash,具有多級可編程放大
    的頭像 發(fā)表于 01-10 18:58 ?576次閱讀
    中微推出5款計(jì)量方案,<b class='flag-5'>為</b>客戶<b class='flag-5'>提供</b><b class='flag-5'>一</b>站式服務(wù)

    【「具身智能機(jī)器人系統(tǒng)」閱讀體驗(yàn)】2.具身智能機(jī)器人大模型

    。 多模態(tài)融合的創(chuàng)新與突破 機(jī)器人控制技術(shù)的另一個(gè)重要突破在于多模態(tài)大模型的應(yīng)用。相比于僅通過文字進(jìn)行人機(jī)交互的傳統(tǒng)方法,現(xiàn)代機(jī)器人能夠融合視覺、聲音、定位等多模態(tài)輸入信息,任務(wù)執(zhí)行提供
    發(fā)表于 12-29 23:04

    AI模型部署邊緣設(shè)備的奇妙之旅:目標(biāo)檢測模型

    智視覺模塊上部署 PaddleDetection 模型如果說有自己制作數(shù)據(jù)的話,需要將數(shù)據(jù)上傳,然后在修改全局配置項(xiàng),修改數(shù)據(jù)集地址以及對應(yīng)的類別數(shù)。 按照廠家提供的配置直接進(jìn)行訓(xùn)練轉(zhuǎn)換。 訓(xùn)練完成后,會自動生成
    發(fā)表于 12-19 14:33

    卡諾模型為人工智能領(lǐng)域提供種全新的視角

    在探索人工智能如何更深層次滿足用戶需求、提升用戶體驗(yàn)的旅程中,卡諾模型(Kano Model)提供個(gè)極具價(jià)值的理論框架。這
    的頭像 發(fā)表于 12-11 10:17 ?827次閱讀

    RISC-V新CPU端側(cè)大模型落地應(yīng)用提供新范式

    縱觀歷史,但凡能夠大幅提升生產(chǎn)力的技術(shù)必將大規(guī)模應(yīng)用并深刻改變社會發(fā)展進(jìn)程。以大模型代表的新AI第次使智能體具備主動學(xué)習(xí)和泛化能力,為生產(chǎn)力的發(fā)展帶來質(zhì)的飛躍,未來數(shù)字世界和物理
    的頭像 發(fā)表于 11-20 01:08 ?1183次閱讀
    RISC-V新CPU<b class='flag-5'>為</b>端側(cè)大<b class='flag-5'>模型</b>落地應(yīng)用<b class='flag-5'>提供</b>新范式

    從零開始訓(xùn)練個(gè)大語言模型需要投資多少錢?

    ,前言 ? 在AI領(lǐng)域,訓(xùn)練個(gè)大型語言模型(LLM)是個(gè)耗時(shí)且復(fù)雜的過程。幾乎每個(gè)做大型語
    的頭像 發(fā)表于 11-08 14:15 ?1163次閱讀
    從零開始訓(xùn)練<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>大語言<b class='flag-5'>模型</b>需要投資多少錢?

    THS3001構(gòu)建個(gè)簡單的SPICE模型

    電子發(fā)燒友網(wǎng)站提供THS3001構(gòu)建個(gè)簡單的SPICE模型.pdf》資料免費(fèi)下載
    發(fā)表于 10-29 10:11 ?1次下載
    <b class='flag-5'>為</b>THS3001構(gòu)建<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>簡單的SPICE<b class='flag-5'>模型</b>