介紹 核心腳本 — 一種用於開發 eBPF 程式、使用者載入器和核心擴充的實驗性程式語言 Linux 基於單一程式碼庫。該項目正在開發中。 多核心技術推廣分離核心/多核心架構的公司 Linux公司創辦人王聰在會上談到了KernelScript。 Linux 開源峰會基金會;專案代碼已在 GitHub 上以許可證發布。 阿帕奇2.0.
eBPF(擴展伯克利資料包過濾器)是一種允許小型程式直接在核心中運行的技術。 LinuxeBPF 無需修改系統程式碼或影響系統穩定性,即可協助完成各種任務,從效能監控到安全性和網路最佳化。例如,eBPF 可以即時監控系統呼叫、網路流量和其他事件,從而幫助您識別效能瓶頸並優化系統。哈伯).
KernelScript 的設計理念是讓 eBPF 開發比使用 C + libbpf 組合更輕鬆,同時又不限於像 bpftrace 那樣的追蹤功能。開發者將該語言描述為一種類型安全的 DSL,它整合了… eGMP使用者空間和核心空間開發:編譯器必須從單一原始檔案產生 eBPF 程式、使用者空間部分以及透過 kfunc 與核心模組整合的程式碼。
KernelScript 的既定功能:
從單一檔案編譯用於不同用途 — 具有 @xdp、@tc、@helper 和 @kfunc 等屬性的函數會自動指派給正確的部分:XDP/TC 程式、輔助函數、核心函數或常規使用者空間程式碼。
尾部呼叫自動化 — 開發者無需手動設定程式數組並調用 bpf_tail_call(),而是需要編寫對另一個函數的常規調用,並將底層 eBPF 程式碼的產生留給編譯器。
簡化了對 dynptr 和 eBPF 映射的操作 語言隱藏了使用 bpf_ringbuf_reserve_dynptr、bpf_dynptr_write 和類似 API 的一些手動操作。 eBPF 對應可以用作可供不同程式存取的全域變數。
軟體生命週期控制 — eBPF 程式以類型化值表示,據作者稱,這可以防止在編譯時出現錯誤,例如在 load() 成功之前嘗試執行 attach()。
kfunc 支持 — KernelScript 允許您使用 @kfunc 屬性宣告在核心空間執行並可從 eBPF 程式呼叫的函數;承諾為它們自動產生核心模組和 BTF 註冊。
支援主要 eBPF 程式類型 — README 展示了 XDP、TC、探測程式和 perf_event 的範例,包括使用硬體效能計數器。
作者特別強調,KernelScript 並不能取代內核。 Linux 或新的 eBPF 運行時。它更像是一個編譯器和高階語言,應該能夠產生熟悉的底層元件:eBPF 程式碼、用戶空間載入器、Makefile,以及必要時的核心模組。
目前,該項目應被視為早期實驗項目。程式庫中明確指出,KernelScript 仍處於開發階段。 測試語法和 API 可能會發生變化,且無法保持向後相容性,因此目前不建議在生產環境中使用。
來源: linux.org.ru
