今天來看 RISC-V 系列的最後一篇文件,Supporting PMUs on RISC-V platforms
!
在這裡可以看到一個年輕的指令集架構(ISA),在成長的過程中,可能會經歷到的變化!
PMU (Performance Monitoring Unit) 是一個大多數處理器都具備的特殊 on-chip 硬體,
可以用來觀察微架構事件 (Microarchitectural event),像是 cycle 數、cache hit/miss 數... 等等;
而這個硬體也是 perf 等效能剖析工具,所使用的基礎設施。
========================
在 RISC-V 平台上支援 PMUs
========================
Alan Kao <alankao@andestech.com>, Mar 2018
簡介
----
在這篇文件撰寫之時,RISC-V 特權指令集架構 1.10 版本所描述的 perf 事件相關的項目包含下列幾項:
(RISC-V 文件會有更多細節)
* [m|s]counteren
* mcycle[h], cycle[h]
* minstret[h], instret[h]
* mhpeventx, mhpcounterx[h]
僅僅只有上述的項目的話,要移植 perf 會需要很多的手續,
由於 RISC-V 目前缺乏以下大多數架構通用的效能監測特色:
* 啟動/關閉 計數器
計數器無時無刻都在做動。
* 計數器數值溢位造成的中斷
規格並為定義這樣的事件。
* 中斷指示器
不可能讓每個計數器有自己的中斷 port,所以必須要有一個中斷指示器來告訴軟體,是哪一個計數器數值溢位了。
* 寫入數值到計數器中
將來會有 SBI 來支援這項功能,因為核心本身並沒有能力修改計數器。[1]
又或是,有些廠家會有擴充的硬體實作來支援 M-S-U 特權架構的平台來直接對計數器做寫入的操作。
這份文件目標是提供開發者一份快速上手的守則,讓開發者可以在核心中實作 PMU 相關的功能;
接下來的幾個章節會簡單的介紹 perf 機制以及待完成的事項。
[1][2] 有先前的討論供參考。
另外,附錄 A 有相關的核心資料結構,認識這些資料結構會對理解本文有幫助。
[m|s]counteren
:
mcycle[h]、minstret[h]、mhpmeventn、mhpmcountern[h]
mhpmcounter3-mhpmcounter31
,(0: no event, 1: cycle, 2: intstruction)。HPM (Hardware Performance Monitor)
,而在特權指令集架構 1.10 版本中,只有上述的描述以及暫存器可使用,文中提到 RISC-V 1.10 版本所缺乏的功能,大多數的架構其實是都支援的,如下:
The cycle, instret, and hpmcountern CSRs are read-only shadows of mcycle, minstret, and mhpmcountern, respectively. The time CSR is a read-only shadow of the memory-mapped mtime register
。其實這篇文件就是我們鐵人賽團長的著作,在當初 RISC-V Manual 並沒有完整支援 HPM 時,所提出的快速上手守則,而最近相關的 RISC-V 擴充指令集已經趨於完備,"Sscofpmf" extension,(由團長及團員提點所知道的XD),會在接下來的幾篇鐵人文中,研究並記錄這個發展的過程,那麼今天就先到這裡吧!
感謝大家,明天見!