ebpf 單行程序學習

ebpf 單行程序學習


背景

公司方神借給我一本: 
《BPF之巔:洞悉linux系統和應用性能》紙質書
拿回家晚上在沙發上看了幾天。 
感覺書很厚看的不是很系統。
僅能憑自己的感覺總結一下這些天的讀書感悟。 
本來計劃是2023年的春節 7 天長假系統的學習ebpf
但是因爲學習Linux內核參數耽擱了。
工作後又各種忙和慌亂一直沒有時間學習。
已經快跟上我立減肥flag倒的程度了。。。

一些基本理解

cbpf和ebpf的基本概念都不在闡述。 
我理解ebpf之後其實核心的工具主要是bcc以及bpftrace
bcc是高手們自己利用python或者是go語言編寫的工具集,用於實現特定的功能。
bpftrace 可以用於實現單行程序,更加符合unix do one thing do it well的哲學。

本次向簡單理一下bpftrace的單行程序的理解。 
便於後續的學習和使用。

bpftrace單行程序很類似於 awk 的語法。 通過attach 到不同的探針,跟蹤點,來獲取內核的核心信息

bpftrace的語法格式

注意:這些內容參照Brendan Greeg書中的附錄部分。
bpftrace -e 'probe /filter/ {action;}'
通過這個命令就可以實現對特定探針的信息收集等工作。 

注意使用之前需要先安裝 bpftrace 可以在線安裝: yum install bpftrace -y 即可。 
注意 -e 表明是跟蹤這個探針
     -l 列出探針,不跟蹤
     -c 執行命令

bpftrace的部分舉例

1. 跟蹤新進程。包括進程參數
bpftrace  -e 'tracepoint:syscalls:sys_enter_execve { join(args->argv);}'

2. 統計系統調用的數量
timeout 3 bpftrace -e 'tracepoint:raw_syscalls:sys_enter {@[pid,comm] = count();}'
注意這個命令可以統計最近三秒內的系統調用數量。如果不加時間可以使用 ctrl + c 的方式終止跟蹤執行打印

3. bpftrace -e 'software:page-faults:1 {@[pid,comm] = count();}'
注意 如果不知道有哪一些probe 可以使用可以通過這個命令來獲取
bpftrace -l 'software:*'
注意 原作者的附錄裏面page-fault 是錯誤的,需要改爲複數形式。

4. 統計vfs調用
bpftrace -e 'kprobe:vfs_* {@[probe] = count();}'
注意這個是內核及的 kprobe kernel-probe

5. 統計io尺寸。可以驗證數據庫的塊大小相關
bpftrace -e 't:block:block_rq_issue {@bytes = hist(args->bytes);}'
注意 t 是 tracepoint的縮寫。 

6. 按照pid和進程名統計
bpftrace -e 't:syscalls:sys_enter_connect {@[pid,comm] = count();}'

7. 直方圖統計udp發送的字節數
timeout 3 bpftrace -e 'k:udp_sendmsg {@send_pytes = hist(arg2);}'

困了 今天到這。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章