aya template program types

節錄:aya-template/cargo-generate.toml at 6580d77fa4229f727363a6dca6d0f7a6e6f77aec · aya-rs/aya-template · GitHub

choices = [
  "cgroup_skb", // 3
  "cgroup_sockopt", // 3
  "cgroup_sysctl", // 3
  "classifier", // 9
  "fentry", // 8
  "fexit", // 8
  "kprobe", // 4
  "kretprobe", // 4
  "lsm", // 5
  "perf_event", // 10
  "raw_tracepoint", // 7
  "sk_msg", // 6
  "sock_ops", // 6
  "socket_filter", // 2
  "tp_btf", // 7
  "tracepoint", // 7
  "uprobe", // 4
  "uretprobe", // 4
  "xdp", // 1
]

Types 解釋

  1. XDP (eXpress Data Path)
  • 用途:網路封包的快速處理和過濾
  • 擷取層:OSI 第 2 層(資料連結層)和第 3 層(網路層)
  • 使用場景:
    • DDoS 防禦與緩解
    • 封包過濾和轉發
    • 負載平衡 (L4)
    • 流量清洗
    • 高效能網路監控:效能最好,延遲最低
    • 在網路封包進入系統時就進行攔截和分析
    • 適合處理大量的網路流量
  1. socket_filter
  • 用途:針對特定 socket 的封包過濾。最早出現在 Kernel 的 BPF Program Type,不允許修改封包內容,僅作可觀測性用途(Observability)
  • 使用場景:
    • 流量過濾(readonly)
    • 流量統計(observability)

TCP Socket Programming 學習筆記 | 雷德麥的藏書閣

  1. cgroup 相關 (cgroup_skb, cgroup_sockopt, cgroup_sysctl)
  • 用途:容器和資源群組的網路控制
  • 擷取層:取決於具體程式,通常是第 3 層到第 4 層
  • 使用場景:
    • 容器網路隔離
    • 資源存取控制
    • 系統呼叫監控
  • 全名
    • cgroup_skb(Cgroup Socket Buffer)
      • 控制與 cgroup(控制群組)相關的封包處理,例如限制某個 cgroup 內的應用程式能否發送或接收特定封包
    • cgroup_sockopt(Cgroup Socket Options)
      • 允許 eBPF 變更 socket 屬性,例如修改 TCP 選項、影響連線設定等
    • cgroup_sysctl(Cgroup Sysctl)
      • 攔截並修改 sysctl 變數,影響系統調校設定,例如 net.ipv4.tcp_syncookies
  1. 追蹤相關 (kprobe, kretprobe, uprobe, uretprobe)
  • 用途:核心和使用者空間函式的追蹤
  • 不限於網路層面,可以追蹤系統任何層級的行為
  • 使用場景:
    • 效能分析
    • 故障排除
    • 系統行為監控
  • 全名
    • kprobe(kernel space probes 內核探針,攔截函式執行)
      • 目標函式的輸入參數、何時觸發
    • kretprobe (kernel return probes 內核回傳探針,攔截函式回傳值)
      • 是否出錯(例如 open() 失敗)
    • uprobe (user space probes)
      • 監控 malloc()open() 之類的函式
    • uretprobe (userspace return probes)
  1. LSM (Linux Security Module)
  • 用途:安全策略執行,透過 eBPF 增強 Linux 安全機制,如 SELinux、AppArmor,攔截並控制系統安全決策
  • 系統層級的安全控制
  • 使用場景:
    • 存取控制
    • 安全審計
    • 系統呼叫過濾
  1. sock_opssk_msg
  • 用途:TCP 協議棧操作和優化
  • 擷取層:OSI 第 4 層 (傳輸層)
  • 使用場景:
    • TCP 連接管理
    • 網路效能優化
    • 協議加速
  1. Tracepoint 相關 (tracepoint, raw_tracepoint, tp_btf)
  • 用途:核心事件追蹤
  • 系統層級的事件監控
  • 使用場景:
    • 系統效能分析
    • 事件追蹤
    • 故障診斷
  • 全名
    • tracepoint(內核追蹤點)
      • 監控 Linux 內部的 tracepoint 事件(比 kprobe 穩定),適合分析系統行為
      • 內核事件的參數與觸發條件、進程啟動、檔案存取等事件
    • raw_tracepoint(原始追蹤點)
      • tracepoint 更低階,適用於監控 Linux 內部事件(如系統呼叫)
    • tp_btf (BPF Type Format Tracepoint)
  1. fentry / fexit
  • 用途:比傳統 kprobe 更輕量,直接附加到核心函式出入口點,用來監控函式參數、回傳值與行為
  • 使用場景:
    • 核心函式的參數和回傳值
    • 函式執行時間與觸發頻率
    • 效能監控
    • 行為追蹤
  1. classifier
  • 用途:TC (Traffic Control) 分類器
  • 擷取層:OSI 第 2 層到第 4 層
  • 使用場景:
    • 流量分類
    • QoS 實作
    • 網路封包標記 (aka 可以修改封包)
  1. perf_event
  • 用途:效能事件監控,監測 CPU 和系統效能事件,如函式調用次數、記憶體存取頻率等
  • 使用場景:
    • CPU 使用率、記憶體存取資訊
    • 進程的計時資訊(profiling)
    • 效能計數器監控
    • 系統效能分析
    • 硬體事件追蹤

參考資料

延伸閱讀