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