什麼是 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(封包)analyzefilter,不過 eBPF 能做的不僅於此。

eBPF 他存在Kernel之間,可以選擇性的註冊並監聽進程Syscall事件,獲取上面的資訊,從而去做一些事情。

Isovalent 的 CTO Thomas Graf,在一次CNCF 的演講中,做了一個很生動的比喻,eBPF 就像是 browser 中的 javascript,監聽著使用者交互的DOM event,然後去操作頁面。eBPF 也在做類似的事情,監聽著發給 Kernelsystem call

eBPF

eBPF 能做什麼

Linux Kernel因為非常要求穩定安全性,所以他的迭代非常非常緩慢,eBPF 可以在不影響 Kernel 的穩定跟安全性之下,幫系統擴充功能。這相當於幫 Kernel 弄了一個可以實驗創新sandbox,想像空間無限大

粗略分下列幾點來討論

  • network
    • 可以用來分析 network、packet、route 等等
  • security
    • 根據不同的 roles,來回報或是阻擋他的網路請求
  • profiling
    • 這應該是最屌的部分,你可以在線上,不用重新部署,不用在後端埋代碼,然後可以去調適 API 的請求資訊,在函式內的執行狀況
  • observerbility
    • 可以監控系統的 CPU、硬碟、記憶體等等metrics的資訊,還可以追蹤請求調用鏈tracing 的狀況

什麼是 eBPF map

eBPF map 是一個存在 Kernelhashmap,他會存一些system call的資訊,也可以對他做CRUD

如何寫 eBPF 程式

可以用以下工具去協助開發或編譯

  • LLVM compiler (hard way)
  • BCC (BPF Compiler Collection)
  • 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?

以 eBPF 實踐的產品

  • Hubble
    • Cilium 公司做的,Cilium 在 eBPF 領域是領頭羊
  • Falco
    • 也是很熱門的 solution
  • Pixie
  • Pyroscope
    • Grafana lab profiling 的產品
  • Parca
    • golang 寫的的 profiling solution
  • Tetragon
    • security observability and runtime enforcement tool
    • Cilium的產品