系列文章 : [gem5] 從零開始的 gem5 學習筆記
有時候我們希望錄製效能數據,但是希望只錄進我們感興趣的部分 ( region of interest, ROI ),這時候我們需要某些手法,來讓我們可以排除其他部分。
M5Ops 是一群特殊的 instruction,當模擬器執行了這一個特殊指令之後,會將控制權轉交給 gem5 模擬器,並且依照 instruction 來執行不同的任務。
例如
原理簡述 :
M5Op
bit<31:25> 代表 M5FUNC
M5FUNC 去執行不同的功能https://github.com/TommyWu-fdgkhdkgh/simple-riscv-vp/blob/main/firmware/m5ops.c#L1-L7
→在這一行,firmware 會去執行 m5ops。
https://github.com/gem5/gem5/blob/v25.0.0.0/src/sim/pseudo_inst.cc#L178
→之後 gem5 會去執行 m5exit
m5exit(ThreadContext *tc, Tick delay)
這個 function 有一個 64bits 的參數 delay,這個參數會由執行這個 instruction 的 a0 ( 32 bits ), a1 ( 32 bits ) registers 來決定。
因為我不想要 delay,所以才在 firmware 裡面的實作,把 a0 跟 a1 歸零。
https://github.com/TommyWu-fdgkhdkgh/simple-riscv-vp/blob/main/firmware/dhrystone/dhrystone_main.c#L171
在 dhrystone 運行之前,先把要輸出到 m5out/stats.txt 的數據清成 0。
https://github.com/gem5/gem5/blob/v25.0.0.0/src/sim/pseudo_inst.cc#L314
之後會去執行這個 function,因為希望參數 delay, period 這兩個 64 bits 的參數為 0。
於是需要將 a0 ~ a3 這四個 registers ( 共 128 bits ) 都清成 0。
https://github.com/TommyWu-fdgkhdkgh/simple-riscv-vp/blob/main/firmware/dhrystone/dhrystone_main.c#L237
這個指令可以把累積數據輸出到 stats.txt。
使用 M5ops : dumpresetstats
這個指令的意思是把 stats.txt 輸出後,再把累積數據清成 0。
使用 M5Ops,我們可以在運行 ROI ( region of interest, 在這裡是 dhrystone ) 之前,把累積的數據用 resetstats 清空,然後在執行完 dhrystone 後馬上用 dumpstats 把數據輸出,讓我們可以只錄製 ROI 的效能數據,排除開機跟關機的數據。