RISC-V在云端、數據中心、汽車與網絡技術中的頻繁創新和亮相,已經讓這一成長中的ISA一只腳邁入了高性能計算場景。然而缺少強大的性能監測工具讓RISC-V的應用優化成了問題,尤其是在RISC-V如今不少軟件源于從非原生移植的情況下,運算性能不能發揮出百分百的實力成了令人頭疼的問題。
與此同時,英特爾和ARM都擁有自己專用的性能監控方案,讓開發者可以發揮出其硬件的全部效力,但RISC-V仍然依靠定制或廠商特定的方案,而缺少通用性能監控軟件工具的完整支持。
Perf對RISC-V的支持
系統級的性能優化往往是靠性能剖析和代碼優化來實現的,前者是為了尋找性能瓶頸,后者則是為了改善軟件性能,因此這類性能分析/監控工具成了處理器開發時必不可少的軟件。盡管RISC-V的ISA規范已經定義了硬件性能監控(HPM),但總體支持程度上仍未完善。
就以Linux上的性能分析工具Perf為例,該工具可以借助PMU(性能監控單元)、tracepoint和內核計數器來分析程序中的硬件事件,比如處理器時鐘周期、指令計數器等,也可以分析一些軟件事件,比如Page Fault等。
Perf分為兩種模式,一種是perf stat,一種是perf record。如今上游Linux的perf雖然已經對RISC-V有了支持,但僅對perf stat有一些基本的支持。比如mcycle這一CSR用于處理器運行的時鐘周期計數,而minstret這一CSR則用于退休指令計數。
RISC-V privileged規范中,RISC-V定義了幾種特權模式,分別是U-mode(用戶模式)、S-mode(管理員模式)和M-mode(機器模式)。但目前只有在機器模式下才能對這些寄存器進行讀寫,管理員模式下缺乏可寫入的寄存器。
計數器卻又是每時每刻運行中的,所以現在可以做到周期和指令計數,卻無法啟用、禁用和暫停計數器,無法使用任何可編程計數器和事件采樣。不僅如此,RISC-V的perf不僅無法處理計數器溢出,也不支持溢出中斷。雖然市面上很多RISC-V處理器已經考慮到了這一點,采用定制的形式來完成部分任務,比如Esperanto就為自己的ET-SoC-1千核RISC-V處理器加入了商業級的芯片除錯與性能監控能力,但RISC-V規范本身缺少這些支持,這也就不利于當下RISC-V的開源生態。
完整的Perf支持缺少了什么?
于是我們現在發現管理員模式下無法寫入計數器,也無法改變mcountinhibit來直接開啟或停止計數器,也無法改變mhpmcountern來開啟或禁用直接讀取。接著就是沒有中斷指示器,我們不知道哪一個計數器出現了數值溢出,也沒有事件篩選功能。那么針對這些問題的解決方案是什么,哪些措施才能實現完整的Perf支持呢?來自西部數據的Atish Patra在近期的RISC-V峰會上提出了他以及開發社區所青睞的答案——SBI PMU擴展和sscofpmf ISA擴展。
SBI PMU擴展將作為一個接口,讓管理員模式下的軟件發現硬件計數器的細節,針對特定的perf事件來配置硬件計數器,在請求下開始或停止計數器。除此之外,SBI PMU擴展還引入了固件性能計數器來監控固件事件,比如未對齊的存取指令數、RFENCE和IPI數等等。如今在RISC-V的SBI 1.0版本中我們也可以看到,PMU擴展已經成了該規范的一部分。
接著是sscofpmf擴展,ss代表的是特權架構和管理員級的擴展,cofpmf代表的是溢出計數和特權模式篩選。該擴展新增了一個32位的scountovf只讀寄存器,該寄存器存儲的是29個mhpmcounter的第63位(OF),如此一來就能準確快速地判斷究竟是哪個事件的計數器溢出了。這一擴展已經凍結,目前處于審查狀態,預計不久的將來就會批準,來自Linux內核的支持工作也在推進中。
小結
RISC-V作為一個尚處于發展初期的架構,在某些方面確實還有不及其前輩x86和ARM的地方,我們這次從性能監控上就能看出一些端倪,但RISC-V自身的特性也為它帶來了不小的優勢。
首先,RISC-V是站在巨人的肩膀上發展的,它可以有效地規避以上那些架構走錯的老路。其次,開源開放讓RISC-V有了龐大的社區支持,像以上這些解決方案,其實已經被多次提及,來自社區的力量勢必可以讓RISC-V走得更遠。
審核編輯:何安淇
-
監測
+關注
關注
2文章
3541瀏覽量
44453 -
RISC-V
+關注
關注
44文章
2232瀏覽量
46039
原文標題:優化的關鍵,RISC-V中的性能監控
文章出處:【微信號:elecfans,微信公眾號:電子發燒友網】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論