bpftrace是基於BPF和BCC構建的開源跟蹤程序。與BCC同樣,bpftrace附帶了許多性能工具和支持文檔。可是,它還提供了高級編程語言,使您能夠建立功能強大的單行代碼和簡短的工具。git
例如,使用bpftrace one-liner將vfs_read() 返回值(字節或錯誤值)彙總爲直方圖:github
# bpftrace -e 'kretprobe:vfs_read { @bytes = hist(retval); }'數據庫
Attaching 1 probe...
^C
@bytes:
(..., 0) 223 |@@@@@@@@@@@@@ |
[0] 110 |@@@@@@ |
[1] 581 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
[2, 4) 23 |@ |
[4, 8) 9 | |
[8, 16) 844 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[16, 32) 44 |@@ |
[32, 64) 67 |@@@@ |
[64, 128) 50 |@@@ |
[128, 256) 24 |@ |
[256, 512) 1 |
bpftrace是使用自定義單行代碼和簡短腳本的臨時工具的理想選擇,而BCC是複雜工具和守護程序的理想選擇。編程
bpftrace與其它可觀測性工具的對比後端
l perf編程語言
bpftrace提供了一種簡潔的高級語言,而perf腳本語言則是冗長的。ide
perf經過perf記錄和內存摘要模式(例如perf top)以二進制格式支持有效的事件轉儲。工具
bpftrace支持有效的內核內摘要,例如自定義直方圖,而perf的內置內核內摘要僅限於計數(perf stat)。oop
能夠經過運行BPF程序來擴展perf的功能,儘管不能使用bpftrace之類的高級語言來實現。性能
l Ftrace
bpftrace提供相似於C和awk的高級語言,而Ftrace具備其本身的特殊語法。Ftrace具備較少的依賴性,使其適合於小型Linux環境。Ftrace還具備檢測模式,例如到目前爲止的功能計數除了bpftrace使用的事件源以外,還進行了更多優化。(個人Ftrace funccount當前的啓動和中止時間比bpftrace更快,而且運行時開銷也較低。)
l Systemtap
bpftrace和SystemTap均提供高級語言。
bpftrace基於內置Linux技術,而SystemTap添加了本身的內核模塊,事實證實,這些模塊在RHEL之外的系統上都不可靠。正如bpftrace所作的那樣,SystemTap支持BPF後端的工做已經開始,這應該使其在其餘系統上更可靠。SystemTap當前在其庫(磁帶集)中具備更多輔助功能,可用於檢測不一樣的目標。
l Lttng
LTTng優化了事件轉儲,並提供了用於分析事件轉儲的工具。與bpftrace相比,這種性能分析方法與bpftrace不一樣,後者專門用於臨時實時分析。
l 應用程序自帶的特定工具
特定於應用程序和運行時的工具僅限於用戶級別的可見性。bpftrace還能夠檢測內核和硬件事件,從而肯定那些工具沒法解決的問題根源。這些工具的優勢是它們一般是針對目標應用程序或運行時量身定製的。MySQL數據庫分析器已經瞭解如何檢測查詢,而JVM分析器已經能夠檢測垃圾收集。在bpftrace中,您須要本身編寫此類功能的代碼。
bpftrace工具具備許多共同點:
他們解決了現實世界中的可觀察性問題。
它們被設計爲以root用戶身份在生產環境中運行。
每一個工具都有一個手冊頁(在man / man8下)。
每一個工具都有一個示例文件,包含輸出和討論(在tools / * _ examples.txt下)。
工具源代碼以塊註釋介紹開始。
這些工具越簡單越好。(更復雜的工具將交由BCC使用。)
CentOS7下,bpftrace安裝後的,可執行文件 *.bt文件路徑在: /usr/share/bpftrace/tools
cd /usr/share/bpftrace/tools
./opensnoop.bt 便可執行對應的bpftrace程序
TIPS: 大神的github上bpf performance tools配套還提供了不少 bpftrace工具,特意爲寫書編寫的,每一個工具都很強大。