Appearance
什麼是 eBPF
前言
之後應該會寫蠻多像這樣,看一些不錯的影片或是文章,然後做摘要。
這是 youtube 頻道Is it Observable 的影片,主題是what is eBPF,一個在 observerbility 非常非常重要的技術,而且他能做的,不僅僅只有 observerbility...
大綱會分以下幾個部分
- 什麼是 eBPF
- eBPF 能做什麼
- 什麼是 eBPF map
- 如何寫 eBPF 程式
- 以 eBPF 實踐的產品
什麼是 eBPF
eBPF 全稱叫 Extended Berkeley Packet Filter,看名稱就知道他是 BPF 的擴充,BPF 原本是用來對 packet(封包)做 analyze 跟 filter,不過 eBPF 能做的不僅於此。
eBPF 他存在Kernel之間,可以選擇性的註冊並監聽進程的Syscall事件,獲取上面的資訊,從而去做一些事情。
Isovalent 的 CTO Thomas Graf,在一次CNCF 的演講中,做了一個很生動的比喻,eBPF 就像是 browser 中的 javascript,監聽著使用者交互的DOM event,然後去操作頁面。eBPF 也在做類似的事情,監聽著發給 Kernel 的system call

eBPF 能做什麼
Linux Kernel因為非常要求穩定跟安全性,所以他的迭代非常非常緩慢,eBPF 可以在不影響 Kernel 的穩定跟安全性之下,幫系統擴充功能。這相當於幫 Kernel 弄了一個可以實驗創新的 sandbox,想像空間無限大
粗略分下列幾點來討論
- network
- 可以用來分析 network、packet、route 等等
- security
- 根據不同的 roles,來回報或是阻擋他的網路請求
profiling- 這應該是最屌的部分,你可以在線上,不用重新部署,不用在後端埋代碼,然後可以去調適 API 的
請求資訊,在函式內的執行狀況。
- 這應該是最屌的部分,你可以在線上,不用重新部署,不用在後端埋代碼,然後可以去調適 API 的
observerbility- 可以監控系統的 CPU、硬碟、記憶體等等
metrics的資訊,還可以追蹤請求調用鏈,tracing的狀況
- 可以監控系統的 CPU、硬碟、記憶體等等
什麼是 eBPF map
eBPF map 是一個存在 Kernel 的 hashmap,他會存一些system call的資訊,也可以對他做CRUD
如何寫 eBPF 程式
可以用以下工具去協助開發或編譯
LLVM compiler(hard way)- BCC (BPF Compiler Collection)
- eBPF 大大,
Brendan Gregg用 python 寫的工具集 - 他在某次演講有 demo 過一些工具,Linux Performance Tools Part1,Linux Performance Tools Part2
- eBPF 大大,
- bpftrace
- high-level tracing language for Linux Kernel
- eBPF-go
- Go library that provides utilities for loading, compiling, and debugging eBPF programs
- bumblebee
- Get eBPF programs running from the cloud to the kernel in
1 line of bash, hmm?
- Get eBPF programs running from the cloud to the kernel in