什麼是 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