bpftrace 是 Linux 的高階追蹤語言。 bpftrace 使用 LLVM 作為後端將腳本編譯為 eBPF 字節碼,並利用 libbpf 和 bcc 與 Linux BPF 子系統交互,以及現有的 Linux 追蹤功能:內核動態追蹤 (kprobes)、用戶級動態追蹤 (uprobes) ) 、追蹤點等。 bpftrace 由阿拉斯泰爾·羅伯遜創建。
如何安裝和構建
手冊/參考指南
教學
單行範例
影片
工具
貢獻
發展
支援
遷移指南
探頭類型
外掛
執照
以下單行程式碼展示了不同的功能:
# Files opened by thread name bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %sn", comm, str(args->filename)); }' # Syscall count by thread name bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }' # Read bytes by thread name: bpftrace -e 'tracepoint:syscalls:sys_exit_read /args->ret/ { @[comm] = sum(args->ret); }' # Read size distribution by thread name: bpftrace -e 'tracepoint:syscalls:sys_exit_read { @[comm] = hist(args->ret); }' # Show per-second syscall rates: bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @ = count(); } interval:s:1 { print(@); clear(@); }' # Trace disk size by PID and thread name bpftrace -e 'tracepoint:block:block_rq_issue { printf("%d %s %dn", pid, comm, args->bytes); }' # Count page faults by thread name bpftrace -e 'software:faults:1 { @[comm] = count(); }' # Count LLC cache misses by thread name and PID (uses PMCs): bpftrace -e 'hardware:cache-misses:1000000 { @[comm, pid] = count(); }' # Profile user-level stacks at 99 Hertz for PID 189: bpftrace -e 'profile:hz:99 /pid == 189/ { @[ustack] = count(); }' # Files opened in the root cgroup-v2 bpftrace -e 'tracepoint:syscalls:sys_enter_openat /cgroup == cgroupid("/sys/fs/cgroup/unified/mycg")/ { printf("%sn", str(args->filename)); }'
可以輕鬆建立更強大的腳本。請參閱工具以取得範例。
注意:這些影片中的某些內容可能已經過時,目前的參考指南是事實來源。
讓 bpftrace 更強大 - 2023
Bpftrace 食譜:解決 5 個實際問題 - 2023
使用 bpftrace 讓 Linux 追蹤變得更簡單 - 2022
提前編譯的 bpftrace 程式 - 2021
BPF 可觀測性入門 - 2021
bpftrace 內部結構 - 2020
將 bpftrace 與 Performance Co-Pilot 和 Grafana 結合使用 - 2020
bpftrace 追蹤語言簡介 - 2020
歡迎貢獻!請參閱下面的開發部分以獲取更多資訊。對於新的 bpftrace 工具,請將它們新增至新的使用者工具儲存庫。此儲存庫中存在的工具是由 bpftrace 維護者策劃的小集合。
錯誤報告和功能請求:問題追蹤器
開發 IRC:#bpftrace,位於 irc.oftc.net
好的第一個問題
編碼指南
開發指南
發展路線圖
模糊測試
尼克
發布流程
測試
如需其他協助/討論,請使用我們的討論頁面。
我們也定期向公眾開放辦公時間。
請參閱手冊以了解更多詳細資訊。
bpftrace 有幾個插件/定義,將語法整合到您的編輯器中。
Emacs
維姆
VS程式碼
版權所有 2019 阿拉斯泰爾羅伯遜
根據 Apache 許可證 2.0 版(“許可證”)獲得許可;除非遵守許可證,否則您不得使用此文件。您可以在以下位置取得許可證副本:
http://www.apache.org/licenses/LICENSE-2.0
除非適用法律要求或書面同意,否則根據許可證分發的軟體均以「原樣」分發,不帶任何明示或暗示的保證或條件。請參閱許可證,了解許可證下管理權限和限制的特定語言。