1、perf 簡介
?Perf 是內置于 Linux 內核源碼樹中的性能剖析(profiling)工具。它基于事件采樣的原理,以性能事件為基礎,支持針對處理器相關性能指標與操作系統相關性能指標的性能剖析。
1.1、perf 框架
主要有兩部分組成
Perf Tools:用戶態的 Perf Tools 為用戶提供了一系列豐富的工具集用于收集、分析性能數據。
Perf Event Subsystem:Perf Event 子系統是內核眾多子系統中的一員,其主要功能是和 Perf Tool 共同完成數據采集的工作。另外,Linux Hard Lockup Detector 也是通過 Perf Event 子系統來實現的。
?本文將重點圍繞 Perf Event 子系統展開介紹Coolbpf 在perf 事件中的增強。
1.2、perf 事件分類
perf的事件包括:
硬件事件:branch-instrctions / branch-miss / bus-cycles / cache-miss / cache-reference / cycles / instructions
硬件cache事件:d1-cached-miss
軟件事件:cpu-clocks / tasks-clock ....
tracepoint事件:sched_stat_runtime / syscalls...
probe事件:可用戶定義
1.3、當前perf 工具集中的不足
?當前perf工具以命令行為主,缺乏完善的第三方應用開發sdk,導致perf功能雖然強大,但是功能相對比較封閉,無法適應特定場景的問題。比如說常見的CPU system 占用率高的問題,我們通常使用perf record 來記錄系統熱點,再通過 FlameGraph 工具轉換成火焰圖進行分析。該方法存在以下不足:
sys占用率高很有可能只是偶發性問題,通過監控發現了以后再來執行命令,現象很有可能已經消失,持續性追蹤會導致樣本數太大,無法凸顯出熱點函數;
sys占用率高只是部分cpu現象,具體cpu編號并不確定,導致定向抓取事件操作步驟會變得非常繁瑣;
perf 命令只能輸出中間文件,要生成常用的火焰圖數據還需要手工轉換;
2、Coolbpf 針對perf 增強
Coolbpf 是一個便捷高效的一站式eBPF開發編譯平臺,當perf遇見Coolbpf后,會碰撞出什么樣的火花呢?Coolbpf 為perf提供了應用開發的SDK,讓開發者可以借助eBPF快速開發 perf 應用。
2.1、Coolbpf perf 組織架構
?大致流程和常規的Coolbpf 應用開發過程基本一致。主要分為
libbpf 應用、
perf 事件處理、
用戶態處理、 ?接下來我們以 testPerf.py為例,講解perf 典型應用開發。
(文件:https://gitee.com/anolis/coolbpf/blob/master/lcc/pylcc/guide/testPerf.py)
2.2、bpf 應用部分
? bpf 應用和其它的kprobe/tp代碼實現并無明顯差別:
#include "lbc.h" SEC("perf_event") int bpf_prog(struct bpf_perf_event_data *ctx) { bpf_printk("hello perf "); return 0; } char _license[] SEC("license") = "GPL";
2.3、perf event
?Coolbpf 對perf_attr 做了python 化處理,故使用在配置 perf attr的時候,只需要參考 perf 官方文檔中關于attr 配置說明進行配置即可。下面的例子是追蹤 perf PAGE_FAULTS事件的方法。
pfConfig = { "sample_freq": 50, "freq": 1, "type": PerfType.SOFTWARE, "config": PerfSwIds.PAGE_FAULTS, } self.attachPerfEvent("bpf_prog", pfConfig)
?此時系統中的 perf PAGE_FAULTS 事件就可以跟2.2 節的libbpf 代碼關聯起來。
2.4、用戶態處理
?本示例是將捕捉到的事件輸出到 /sys/kernel/debug/tracing/trace_pipe。用戶可以根據自己的情況去執行event 回調或者分析maps 信息。
3、實戰應用
?根據1.3 節的應用場景,需要追蹤一個偶發性sys 沖高問題。在常規perf 使用存在困難的情況下,可以基于Coolbpf快速開發一個追蹤sys高問題的應用程序,代碼總共不超過180行,具體實現可以參考:perfSys.py(https://gitee.com/anolis/surftrace/blob/master/tools/pylcc/pytool/perfSys.py)
?應用實現流程圖如下:
?可以直接追蹤到對應的sys高調用棧
通過上述方法,可以將原本需要花費多日守候才有可能捕捉到現場的疑難問題,縮短到完全無人值守,問題復現瞬間即可鎖定目標的小case。
4、總結
?Coolbpf 融合了libbpf靈活、高效、安全的優勢,結合perf強大的數據收集能力,并自身擁有快速部署、資源高效利用、結果直觀可視化輸出能力。如今兩兩聯合,應用前景非常廣泛,如性能剖析、應用觀測、系統調優等。
-
處理器
+關注
關注
68文章
19390瀏覽量
230607 -
Linux
+關注
關注
87文章
11332瀏覽量
210024 -
操作系統
+關注
關注
37文章
6863瀏覽量
123544
原文標題:4、總結
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論