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

各種常用電路模塊設(shè)計(jì)原則:電源完整性
電源完整性分析及其應(yīng)用
S32G399ardb3版本中缺少WIC文件IVT標(biāo)頭,怎么解決?
如何使用離線工具od SPSDK生成完整圖像?
聽(tīng)懂什么是信號(hào)完整性

評(píng)論