[英]Using perf to monitor raw event counters
我正在嘗試在具有多個(物理)處理器的(英特爾至強)機器上測量某些硬件事件。 具體來說,我想知道為讀取“非核心”數據發出了多少請求。
我在英特爾文檔中找到了 OFFCORE_REQUESTS硬件事件,它給出了事件描述符 0xB0,對於數據需求,附加掩碼 0x01。
然后告訴 perf 記錄事件 0xB1 (即0xB0 | 0x01
)並將其稱為:
perf record -e r0B1 ./mytestapp someargs
或者這是不正確的? 因為性能perf report
沒有顯示這樣輸入的事件的輸出。
除了沒有說明它是哪個事件的教程條目(盡管這個對我有用)或它是如何編碼的之外,該領域的 perf 文檔相當稀少...
任何幫助是極大的贊賞。
好的,所以我想我想通了。
對於我使用的 Intel 機器,格式如下: <umask><eventselector>
其中兩者都是十六進制值。 可以刪除 umask 的前導零,但不能刪除事件選擇器。
因此,對於掩碼為0x01
的事件0xB0
,我可以調用:
perf record -e r1B0 ./mytestapp someargs
我無法在 perf 內核代碼中找到它的確切解析(這里有內核黑客嗎?),但我找到了這些來源:
man perf-list
更新:正如評論中指出的(謝謝!),可以使用 libpfm 轉換器來獲取正確的事件描述符。 用戶“osgx”發現的評論中鏈接的網站(Bojan Nikolic:如何監控 CPU 性能事件的全部范圍)對其進行了更詳細的解釋。
看來你也可以使用:
perf record -e cpu/event=0xB1,umask=0x1/u ./mytestapp someargs
我不知道這個語法記錄在哪里。
您也可以使用其他參數(edge、inv、cmask)。
有幾個庫可以幫助處理原始 PMU 事件。
perf 自己的 wiki https://perf.wiki.kernel.org/index.php/Tutorial#Events推薦perf list --help
手冊頁以獲取有關原始事件編碼的信息。 現代 perf 版本將列出原始事件作為perf list
輸出的一部分(“...如果鏈接到 libpfm4 庫,則提供對事件的一些簡短描述。”)。 perf list --details
還將打印事件的原始 ID 和掩碼。
Bojan Nikolic 有“如何監控所有 CPU 性能事件”博客文章,內容涉及libpfm4 (perfmon2)庫使用showevtinfo
和check_events
工具為 perf 編碼原始事件,這些工具隨同一個庫提供。
還有 perf python 包裝器ocperf
它接受英特爾的事件名稱。 它由 Andi Kleen(英特爾開源技術中心)編寫,作為pmu-tools 實用程序集的一部分( 2013 年的 LWN 帖子,英特爾在https://download.01.org/perfmon/ 上發布的事件列表)。 有一個 ocperf (2011) http://halobates.de/modern-pmus-yokohama.pdf的演示:
ocperf
•Perf wrapper to support Intel specific events
•Allows symbolic events and some additional events
ocperf record -a −e offcore_response.any_data.remote_dram_0 sleep 10
PAPI 庫也有工具來探索帶有一些描述的原始事件 - papi_native_avail
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.