鐵人賽
今天開始聊聊perf,不免俗當然要介紹一下perf是甚麼?perf可以用在哪?perf要怎麼使用?都會在接下來的幾天慢慢介紹,另外也會介紹risc-v近期有新增的extension Sscofpmf,主要是處理過去counter overflow時無法處理的一些情形,當然前因後果會慢慢說明,就讓我們看下去吧~
首先介紹perf是甚麼,其實可以直接google,或許就可以找到想要的答案,而筆者這邊是將網路上的資訊彙整理解之後,弄成自己理解的方式去表達,或許可以讓不同的人理解相同的事物,介紹不見得專業也請包涵囉。
OK除去屁話之後直接正題吧~
Perf 全名是 Performance Event,應用程式可以利用 PMU (Performance Monitoring Unit), tracepoint 和核心內部的特殊計數器 (counter) 來進行統計,另外還能同時分析運行中的核心程式碼,從而更全面了解應用程式中的效能瓶頸,以上引用 Jserv 老師。
簡單來說 perf 就是一個測量的工具,讓你可以快速知道目前程式碼的瓶頸在哪邊,
而該要如何安裝呢,可以參考下方 reference 的文章,如果是 host 端也可以直接對terminal下,perf相關指令e.g. perf list,系統會說需要甚麼直接安裝即可,確認是否安裝成功可以下perf list看有沒有event跳出來就知啦~
perf 最常用的有兩種
-e
順利執行的話會出現以下資訊:
此時應該便能看到一些相關資訊,-e表示指定特定event做紀錄,如果只想針對kernel space或是user space可以在event後面下 event:[u|k]
* for example:
* perf record -e cache-misses:k ./test
更多不同選項可以參考上圖,有只跑在kernel space的:k,也有只跑在kuser space的:u,其他筆者沒這麼常用就不班門弄斧了。
上面先介紹如何使用,現在來說明一下stat 以及record的差別,使用stat可以讓你快速知道此程式所發生的狀況,如:想了解cache-miss或是page fault所發生的狀況皆可以用stat做一個快速地測量,而與record不同的是record是採sample的方式進行一個量測,每X次進行一次捕捉的動作,該數可以下 -c
自行決定,可以更細微的針對每個函數所發生的狀況作分析。
Linux 效能分析工具: Perf
linux 下的內核測試工具——perf使用簡介
系統級性能分析工具 — Perf
在 Linux 上使用 Perf 做效能分析(入門篇)
使用 perf_events 分析程式效能
今天簡單做了perf的介紹,說實話挺陽春的,但因為這不是筆者想聚焦的點,此外也有許多文章對這些介紹,已經有非常深入的探究,因此這邊就不大作文章了,這邊簡單說明了幾個常見用法。
明天我們開始針對risc-v架構上的perf做說明,會介紹到在risc-v架構上使用perf會有甚麼限制情況呢,以及該如何解決~明天見!