筆記:BPF Performance Tools Chapter 1. Introduction


關鍵詞:bpf、ebpf、bcc、bpftrace、kprobe、uprobe、tracepoint、usdt等等。

 

本章主要介紹基本概念以及相關資源之間關系

  • BPF和eBPF的演變以及用途
  • 基本概念Tracing/Snooping/Samping/Profiling/Observability以及之間區別
  • 一張圖表示bcc/bpftrace/libbcc/libbpf/bpf之間關系
  • 一張圖介紹bpf能做哪些性能優化
  • 靜態跟蹤和動態跟蹤
  • 簡單示例bcc和bpftrace用途

1. Tracing/Snooping、Sampling/Profiling區別

Tracing/Snooping是基於事件的跟蹤,Samping/Profiling是基於時間的采樣。

Tracing/Snooping可能導致跟蹤引入負荷劇增;Samping/Profiling引入的測試負荷相對穩定,但是有可能丟失部分信息。

2. bcc、bpftrace、libbcc、libbpf、bpf之間的關系

可以將整個架構分成三層:前端bcc和bpftrace、中間層libbcc和libbpf、內核BPF。

其他類似bcc/bpftrace的工具還有:適合嵌入式設備的ply、基於Python的工具。

相關資源列表:

bcc:https://github.com/iovisor/bcc

bpftrace:https://github.com/iovisor/bpftrace

ply:https://github.com/iovisor/ply

3. Linux系統和應用bpf性能工具集

對照本圖,針對不同模塊可以使用相應的工具進行觀察、跟蹤,協助定位解決性能問題。

4. 靜態跟蹤和動態跟蹤

動態:kprobes和uprobes

動態跟蹤可以在程序運行時插入跟蹤,在不使用的時候開銷極低。

靜態:tracepoints和usdt

相對於動態跟蹤,靜態跟蹤更加穩定。但是不夠靈活,數量也受限。

BPF跟蹤支持內核靜態的tracepoints和用戶空間的USDT(User-level Statically Defined Tracing)。

5. 初識bcc和bpftrace

bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %s\n", comm,  str(args->filename)); }'
bpftrace -l 'tracepoint:syscalls:sys_enter_open*'
bpftrace -e 'tracepoint:syscalls:sys_enter_open* { @[probe] = count(); }'
opensnoop.bt
opensnoop
opensnoop -x

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM