教你如何使用 ChatGPT ,通過自然語言編寫 eBPF 程序和追蹤 Linux 系統(tǒng)
eBPF 是一項革命性的技術,起源于 Linux 內核,可以在操作系統(tǒng)的內核中運行沙盒程序。它被用來安全和有效地擴展內核的功能,而不需要改變內核的源代碼或加載內核模塊。今天,eBPF被廣泛用于各類場景:在現(xiàn)代數(shù)據(jù)中心和云原生環(huán)境中,可以提供高性能的網(wǎng)絡包處理和負載均衡;以非常低的資源開銷,做到對多種細粒度指標的可觀測性,幫助應用程序開發(fā)人員跟蹤應用程序,為性能故障排除提供洞察力;保障應用程序和容器運行時的安全執(zhí)行,等等。eBPF 已經(jīng)成為了一個越來越受歡迎的技術,它可以幫助我們更加高效地對內核和用戶態(tài)的幾乎所有應用進行追蹤和分析。

但是,eBPF 的開發(fā),或者追蹤內核產(chǎn)生的各類事件,需要一定的專業(yè)知識,對于一些不熟悉該技術的開發(fā)人員來說,可能會有一定的困難。這時,我們的 demo 工具 GPTtrace 所帶來的一些新的思路,也許就可以幫助你解決這個問題。它使用 ChatGPT ,通過自然語言編寫 eBPF 程序和追蹤 Linux 內核:https://github.com/eunomia-bpf/GPTtrace
如果你是一名開發(fā)人員,想要更加高效地進行追蹤和分析,那么類似的方案絕對值得嘗試:這種 ChatGPT 和 eBPF 技術的結合將在未來的軟件開發(fā)、調試、以及可觀測性場景中發(fā)揮更加重要的作用,同時它可能也會帶來一種全新的、交互式地學習范式。
我們做了哪些嘗試?
GPTtrace 使用 ChatGPT 技術,允許開發(fā)人員通過自然語言編寫 eBPF 程序和追蹤 Linux 內核,無需事先了解該技術的專業(yè)知識。它使得開發(fā)人員可以更快、更準確地定位和解決軟件中的問題。例如,根據(jù)進程名稱統(tǒng)計 Page Faults 次數(shù):

我們是怎樣做到的?
我們目前的思路是通過預訓練 eBPF 程序,讓 ChatGPT 學會如何編寫各種 eBPF 程序或 bpftrace 的 DSL。大概分為這幾步:
預訓練 ebpf 程序,利用一些 ebpf 的開發(fā)資料,先和 ChatGPT 對話多次,讓 ChatGPT 通過對話上下文如何寫各種 eBPF 程序或者 bpftrace 的 DSL(其實我們在十二月份就做過一些類似的實踐,產(chǎn)出了一份教程文檔,但沒有把它變成一份工具:https://github.com/eunomia-bpf/bpf-developer-tutorial);
調用 ChatGPT api,并把返回的結果解析之后作為命令輸入 shell 執(zhí)行,或者將 eBPF 程序寫到文件里面編譯運行
如果編譯和加載報錯,把對應的報錯信息返回給 ChatGPT,讓它再生成一個新的 eBPF 程序或者命令
我們使用了 ChatGPT 的 Python API,花了一個下午簡單實現(xiàn)了這個小玩具,它可以使用中文或者英文等多種語言輸入任意自然語言的描述,例如 “追蹤進程打開的文件” "Show per-second syscall rates" 等等,正確率不是 100%,不過十次里面大概已經(jīng)可以有七八次可以正確進行追蹤了,遇到報錯還會自行進行修正和調整。

【文章福利】小編推薦自己的Linux內核技術交流群:【749907784】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ??


進一步的優(yōu)化?
這個玩具項目本身只是想展示一下可能性,很快應該會有更好的類似 ChatGPT 這樣的的 api,和更通用的訓練/執(zhí)行框架出來的,希望它能起到拋磚引玉的效果。目前看起來還有很多可以優(yōu)化的空間:
能聯(lián)網(wǎng)搜索之后,讓這個工具去獲取 bcc/bpftrace 倉庫里面的示例程序學習,效果應該還會好很多;
或者讓這個應用自己能聯(lián)網(wǎng)搜索 Stack Overflow 之類的結果,查詢如何編寫 eBPF 程序,類似新 Bing 的搜索方式;
提供更多高質量的文檔和教程,看起來輸出的準確度和教程、代碼示例的質量密切相關;
其實還可以多次調用其他工具執(zhí)行命令返回結果,比如說 ChatGPT 輸出命令,用 bpftrace 查詢一下當前內核版本和支持的 tracepoint,然后返回輸出(這也是一次對話),再給出程序,效果應該還要好不少
短期來看,我們希望嘗試基于這個工具構建一個交互式的、帶有提示的內核追蹤工具和學習 eBPF 程序的教程,幫助用戶在編寫 eBPF 程序時更快地了解語法和調試錯誤,并且可以根據(jù)用戶的反饋調整提示和建議的質量;以及提供一個結構化的學習 eBPF 程序的教程,從基礎的語法和 API 開始,結合通過用戶最終想編寫的 eBPF 程序的需求,逐步向用戶介紹常用的 eBPF 應用場景和編寫技巧。
某種意義上來說,它甚至可以不僅僅是一種語言模型,借助簡單的對話的交互模式,以及能操控各類工具、訪問網(wǎng)絡的手段,它也許可以起到一個巨大的、前無古人的知識庫的作用:連接各行各業(yè),根據(jù)自然語言輸入而非關鍵詞,給出綜合概括的、無法被搜索引擎簡單獲取到的思考和答案。
在當今信息爆炸的時代,我們可以輕易地獲得各種海量的信息,但這也帶來了另一個問題,就是信息的分散和碎片化,很難將這些信息整合起來,形成有價值的知識。而 ChatGPT 可以通過自然語言交互的方式,將各種信息和知識整合起來,乃至主動去獲取知識和接收反饋(就像我們在 GPTtrace 中做的一樣),形成一個巨大的知識庫,為人們提供綜合的思考和答案。
這種方式可以連接各行各業(yè),不受特定領域或行業(yè)的限制,根據(jù)自然語言輸入而非關鍵詞,給出更加準確、綜合的概括。此外,由于 ChatGPT 可以操控各類工具和訪問網(wǎng)絡,它可以更加深入地了解各種知識和信息,并為用戶提供更加全面和深入的解答。
這種革命性的變化可能已經(jīng)站在人類文明變革的前夜,我們獲取知識和思考的方式將被顛覆,類似的大模型的出現(xiàn)將成為這個變革的重要推手。
未來在何方?
其實這個模型本身的效果,并不算驚艷,甚至可以說還有非常多的成長空間。對于我這樣的非 AI 專業(yè)研究人員(AI工具和模型的消費者)來說,和傳統(tǒng)的訓練深度學習模型的方式比起來:
訓練模型不需要整理數(shù)據(jù)集和清洗數(shù)據(jù)集,僅僅需要幾篇高質量的文檔和教程,數(shù)量非常少,使用自然語言描述即可;極大地減少了非專業(yè)人士的準備工作;
只需要對話上下文即可直觀和方便地進行訓練,任何人都可以輕松理解(或者嘗試類比)AI 是怎么進行學習的;
可以適應非常多種不同領域的任務,只要任何任務能被轉換成一段文本或指令;
正如哈爾濱工業(yè)大學車萬翔先生在青源Workshop中提及的,ChatGPT 時代,NLPer 的危與機中所說的那樣:
ChatGPT時代,為了應對當前的挑戰(zhàn),自然語言領域的研究者可以借鑒信息檢索研究者的經(jīng)驗。首先,學術界可能不再進行系統(tǒng)級別的研究,主要集中在相對邊緣的研究方向上;其次,使用工業(yè)界巨頭提供的數(shù)據(jù)進行實驗,并不一定能得出可靠的結論,由于存在隱私問題,數(shù)據(jù)的真實性存疑;通過調用公司提供的 API 進行研究,一旦模型被調整,其結論有可能也會改變。
當使用 AI 解決特定問題的門檻變得足夠的低廉,反而是 AI 更進一步普及、更進一步解決更多細分場景下的問題的巨大機會。另一方面可能是支撐 AI 的基礎設施:當生成的內容(例如代碼,文本,算法,音頻視頻)的成本變得更廉價,也許可編程、低代碼的平臺也會變得相對原先巨大的單體應用來說,變得更加具有可擴展性和可復用性。例如,從一段描述或交互式地對話中直接生成一個 FaaS 的接口發(fā)布,直接生成一個網(wǎng)頁前端并部署,或使用 ChatGPT 生成的代碼直接作為可觀測的采集和數(shù)據(jù)處理程序,部署到大型的可觀測性平臺中。
我們現(xiàn)在也在探索一些 eBPF 和 Wasm 結合的編譯工具鏈和運行時,希望實現(xiàn)從內核態(tài)到用戶態(tài)的可編程擴展效果:https://github.com/eunomia-bpf/wasm-bpf

原文作者:人極客社區(qū)
