我試圖找出與 perf stat 命令一起使用的事件,以計算 AMD Zen 2 處理器上的 L3 快取訪問。根據 PPR(http://developer.amd.com/wordpress/media/2017/11/54945_PPR_Family_17h_Models_00h-0Fh.pdf),第 2.1.13.4.1 節,第 168 頁,事件是 x01,umask 是 x80 “[L3 快取訪問] (L3RequestG1)”。據我了解,在 perf stat 命令中使用的事件因此是 r8001。但無論我運行什么負載,以下命令始終將計數回傳為零:
perf stat -a -e r8001 -- 睡眠 10
“系統范圍”的性能計數器統計資訊:
0 r8001
10.001105322 秒時間過去了
我是在誤解 PPR 還是 [L3 快取訪問] (L3RequestG1) 有其他含義?
此外,是否有一種方法可以指定 L3 快取的切片來監視性能中的事件,因為大多數具有高內核數的較新架構都有多個 L3 切片。
uj5u.com熱心網友回復:
L3 快取事件只能在 L3 PMU 上計數,正如您要測量的事件的物理助記符 ( L3PMCx01) 和邏輯助記符 ( Core::X86::Pmc::L3::L3RequestG1) 中明確指定的那樣。L3 PMU 的正式名稱為 L3PMC。這類似于英特爾處理器上的 cbox PMU。
perf 中原始事件的默認 PMU 是cpu,這是 perf_events 子系統賦予核心 PMU 的名稱。使用沒有顯式 PMU 的原始事件代碼指定的事件,例如 r8001,等效于 cpu/r8001/。核心事件 0x001 表示該事件,Core::X86::Pmc::Core::FpSchedEmpty并且未為該事件定義 umask 0x80(請參閱第 2.1.15.4.1 節)。所以你在計算一個未定義的事件。在這種情況下,如果事件碰巧已實作但未記錄,則事件計數可能不為零,具體取決于它是否在被分析的程式執行期間發生。否則,事件計數將為零。perf_events 不會阻止您計算未定義的事件。
從上游內核版本 v5.4-rc1 開始,在 perf_events 中支持 L3PMC 名稱amd_l3。要確定您是否正在使用支持此 PMU 的內核,請使用命令檢查它是否已列舉ls /sys/devices/*/format。如果不支持,則無法通過 perf 測量該內核上的 L3 事件。
如果amd_l3支持,您必須明確指定 PMU 作為 inamd_l3/r8001/或amd_l3/event=0x01,umask=0x80/讓事件在正確的 PMU 上計數。或者您可以只使用 perf 事件名稱l3_request_g1.caching_l3_cache_accesses。
你知道這個事件L3RequestG1代表什么嗎?該檔案僅將其描述為“快取:L3 快取訪問”,這不是很有意義。在我看來,它計算的交易型別是事件涵蓋的交易型別的一個子集L3LookupState。第 2.1.15.2 節中的表 19 表示應分別使用 rFF04 ( L3LookupState) 和 r0106 ( L3CombClstrState)計算 L3 訪問和未命中。不要盲目地期望這些事件中的任何一個實際上可以計算您想要測量的任何內容。
您鏈接的 PPR 不適用于任何 Zen2 處理器,它適用于某些 Zen 和 Zen 處理器(特別是型號 00h-0Fh)。您需要了解處理器型號和系列才能找到正確的 PPR。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/375319.html
上一篇:Bash參考換行符導致heredoc消耗第一個換行符
下一篇:在JPA物體上定義復合主鍵
