事件選擇器寄存器為了控制要計數的事件類型,事件選擇器 CSR mhpmevent3 和 mhpmevent4
用于對相應的事件計數器進行編程。這些事件選擇器 CSR 是 64 位 WARL 寄存器。
事件選擇器分為三個字段;低 8 位選擇一個事件類別,中間的一組位形成該類別中事件的掩碼,高 8 位用于計數器溢出和事件過濾。
如果對應于任何設置掩碼位的事件發生,則計數器遞增。例如,如果 mhpmevent3 設置為 0x4200,則 mhpmcounter3將在任一加載指令時遞增或者條件分支指令退出。事件選擇器 0 意味著“什么都不考慮”。
Counter Overflow and Event Filters
mhmpevent 寄存器的高 8 位用于控制計數器溢出中斷,以及基于模式的事件過濾。位布局如下圖所示:
Performance Counter Overflow Operation
當內核處于特權模式 x 時,五個 xINH 位中的每一個都禁止事件計數。這些字段中的所有零導致所有模式下的事件計數。
當相應的 hpmcounterX 溢出時,OF 位由硬件設置,并保持設置狀態,直到被軟件寫入。由于 hpmcounter值是無符號的,溢出被定義為從全一遞增到全零。請注意,溢出后不會丟失信息,因為計數器環繞并繼續計數,同時粘性 OF 位保持設置。
如果 hpmcounter 溢出而關聯的 OF 位為零,則會生成計數溢出中斷請求。如果 hpmcounter 溢出而關聯的 OF 位為1,則不會生成中斷。因此,OF 位還用作相關 hpmcounter 的計數溢出中斷禁用。
寫入 mhpmcounterX 或 mhpmeventX 寄存器不會導致計數溢出。僅當事件導致計數器遞增時才會發生溢出。
計數器溢出中斷是一個標準的本地中斷,對應于 mip 和 mie 寄存器中的第 13 位。mip LCOFIP 位是這個中斷和 mie的中斷掛起位LCOFIE 位是該中斷的中斷使能位。LCOFI 表示本地計數溢出中斷。如果存在 S 模式,則 sip和 sie包括用于管理程序中斷控制和狀態的相應位。
hpmcounter 生成計數溢出中斷請求會設置 mip 寄存器中的 LCOFIP 位并設置相關的 OF 位。如果存在 S 模式,則 mideleg寄存器控制將此中斷委托給 S 模式,這會設置 sip 寄存器中的 LCOFIP 位。在處理計數溢出中斷后,LCOFIP 位由軟件清零。
發往相同特權模式的多個同時中斷按以下優先級遞減順序處理:MEI、MSI、MTI、SEI、SSI、STI、LCOFI。
請注意,沒有單獨的溢出狀態和溢出中斷使能位。實際上,通過清除 OF 位來啟用溢出中斷生成是與將計數器初始化為起始值一起完成的。一旦計數器溢出,它和OF 位必須在產生另一個溢出中斷之前重新初始化。
軟件可以區分尚未被溢出中斷處理程序服務的新溢出計數器和已經被服務的溢出計數器(或者通過維護反映哪些計數器處于活動狀態和到期的位掩碼配置為不在溢出時生成中斷的計數器)
最終溢出。
Scountovf 寄存器
scountovf CSR 是一個 32 位只讀寄存器,包含 29 個 mhpmevent CSR 中 OF 位的影子副本。scountovf 中的位X 對應于 mhpmeventX 中的 OF 位。該寄存器使主管級溢出中斷處理程序軟件能夠快速確定哪些計數器已經溢出,而無需對 M 模式進行環境調用。 CSR地址為 0xDA0。
對 scountovf 位 X 的讀取訪問受制于調解 S 模式軟件對 hpmcounterX 訪問的相同 mcounteren CSR。在 S模式下,當設置 mcounteren 位 X 時,scountovf 位 X 是可讀的,否則讀為零。
Disabling Counters in Debug Mode
設置后,dcsr.stopcount 位會在調試模式下停止計數器。這對于 mcycle 和 minstret計數器尤其重要,因為在調試模式下,核心在緊密循環中執行 ROM 指令。Freedom Studio Performance Monitor View自動設置dcsr.stopcount 位。
-
寄存器
+關注
關注
31文章
5361瀏覽量
120873 -
內核
+關注
關注
3文章
1379瀏覽量
40353 -
Linux
+關注
關注
87文章
11333瀏覽量
210052 -
選擇器
+關注
關注
0文章
109瀏覽量
14570
發布評論請先 登錄
相關推薦
評論