2017-09-07 172 views
1

我試圖在我的設備上使用perf以及AMD cpu,但我無法真正找到任何有關如何從AMD獲得的信息,例如cache-misses。我讀到您需要編寫-e rNNN,其中NNN是事件的十六進制代碼,但我沒有設法找到任何表或其他代碼來查看這些代碼。你能幫我解決這個問題嗎?因爲在互聯網上似乎沒有任何信息!實際上,在perf手冊中有一些鏈接,但它們無效:(AMD perf events

回答

1

檢查perf list輸出,在現代Linux內核版本中,它可能會報告一些架構特定的硬件事件。通過perf list(特別是對於較舊的內核),但並非所有的都映射到某個真實的硬件事件。cache-missescycles是這樣的通用perfww事件,並不總是映射(映射位於amd的http://elixir.free-electrons.com/linux/latest/source/arch/x86/events/amd/core.c附近的perf源代碼 - 與cache-misses映射到[PERF_COUNT_HW_CACHE_MISSES] = 0x077e,

也嘗試從perf列表中的不同事件與perf stat -e event1,cycles,instructions,cpu-clock其中事件1是你想檢查的事件,並且有一些工作事件。

要編碼原始事件,它可以更容易地使用處理器文檔,perf源(精確的十六進制編碼)和some external tools。對於英特爾,ocperf.py來自http://github.com/andikleen/pmu-tools網站;並且在perfmon2/libpfm4中有通用的原始生成器,在「如何通過Bojan Nikolic與showevtinfo util監視CPU性能事件的全部範圍」進行了描述(這也是獲得常見問題的rXXXX代碼的建議方法:http://web.eece.maine.edu/~vweaver/projects/perf_events/faq.html#q2e Q2e。如何確定合適的「原始」活動值):

爲了充分利用這些計數器,一個目前已經向他們指定的perf工具作爲原料的十六進制代碼(-e rXXXX其中XXXX是代碼)。這引出了兩個明顯的問題:

  • 需要使用什麼編碼?
  • 這些信息是什麼意思?

我將這些在以後的文章第二,但目前這裏是如何找出原始代碼使用方法:

  1. 獲取最新版本的perfmon2/libpfm(H/t這個developerworks文章):

    git clone git://perfmon2.git.sourceforge.net/gitroot/perfmon2/libpfm4; cd libpfm4; 使

  2. 運行showevtinfo程序(examples子目錄),以獲得所有可用事件的列表,以及所支持的面具和修飾符(請參閱下面的輸出爲全輸出的例子)

  3. 找出你想要使用哪些事件以及掩碼和修飾符。掩碼的前綴爲Umask,並以十六進制數字形式給出,並且在方括號中也包含符號名稱。修飾符的前綴爲Modif,它們的名字也放在方括號中。

  4. 使用check_events程序(也以實例子目錄)到eventumaskmodifiers轉換成原始代碼。您可以通過運行以下命令來執行此操作: check_events <event name>:<umask>[(:modifers)*] 即,您提供的事件名稱,umask和多個修飾符全部由冒號字符分隔。通過0x531003

  5. 這十六進制碼可被用作參數的GNU/Linux perf工具,例如以perf stat:然後該程序將打印出來,除其他事項外,一個原始事件規範,例如:

    代碼供應-e r531003選件