事件選擇器編碼表 20 描述了可用的事件選擇器編碼。根據 mhpmeventX[7:0]中編碼的事件類字段,將事件分類為類。可以通過為給定事件類別設置相應的事件掩碼位來對一個或多個事件進行編程。事件選擇器編碼為 0表示“無意義”。任何選定事件發生時,多個事件都會導致計數器遞增。
對任何事件類可寫的事件掩碼位對所有類都是可寫的。設置與表 20中定義的事件不對應的事件掩碼位對當前實現沒有影響。但是,未來的實現可能會在該編碼空間中定義新事件,因此不建議將不受支持的值編程到 mhpmevent寄存器中。
Combining Events
直接計算每個事件是常見的用法。此外,可以使用這些事件的組合來計算新的、獨特的事件。例如,要確定來自數據存儲器子系統的每次加載的平均周期數,可以對一個計數器進行編程以計算“數據高速緩存/DTIM繁忙”,并對另一個計數器進行編程以計算“已退出的整數加載指令”。然后,簡單地將“數據高速緩存/DTIM繁忙”周期計數除以“整數加載指令退休”指令計數,結果就是每條指令加載周期的平均周期時間。
了解組合的事件類型很重要;具體來說,事件類型計算發生次數,事件類型計算周期。
計數使能寄存器32位計數器使能寄存器 mcounteren 和 scounteren 控制硬件性能監控計數器在下一個最低特權模式下的可用性。
這些寄存器中的設置僅控制可訪問性。讀取或寫入這些啟用寄存器的行為不會影響底層計數器,這些計數器在不可訪問時會繼續遞增。
當 mcounteren 寄存器中的任何位清零時,在 S 模式下執行時嘗試讀取周期、時間、指令退出或 hpmcounterX寄存器將導致非法指令異常。當這些位中的一個被設置時,在下一個實現的特權模式 S 模式下允許訪問相應的寄存器。
在 U 模式下執行時,scounteren 寄存器中的相同位位置類似地控制對這些寄存器的訪問。如果允許 S-mode 訪問計數器寄存器并且在scounteren 中設置了相應的位,則也允許 U-mode 訪問該寄存器。
mcounteren 和 scounteren 是 WARL寄存器。任何位都可能包含硬連線值零,表示在低特權模式下執行時,讀取相應計數器將導致非法指令異常。
-
內核
+關注
關注
3文章
1372瀏覽量
40282 -
Linux
+關注
關注
87文章
11295瀏覽量
209348 -
編碼
+關注
關注
6文章
942瀏覽量
54814 -
選擇器
+關注
關注
0文章
107瀏覽量
14535
發布評論請先 登錄
相關推薦
評論