C906 RISCV HPM(PMU)使用方法
生活随笔
收集整理的這篇文章主要介紹了
C906 RISCV HPM(PMU)使用方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
初始化HPM(Hardware performance Monitor),系統初始化時調用。
.option norvc .global hpm_get_icache_miss_rate hpm_get_icache_miss_rate:li x5, 0xffffffffcsrw mcountinhibit, x5csrw mcycle, x0csrw minstret, x0csrw mhpmcounter3, x0csrw mhpmcounter4, x0csrw mhpmcounter5, x0csrw mhpmcounter6, x0csrw mhpmcounter7, x0csrw mhpmcounter8, x0csrw mhpmcounter9, x0csrw mhpmcounter10, x0csrw mhpmcounter11, x0csrw mhpmcounter12, x0csrw mhpmcounter13, x0csrw mhpmcounter14, x0csrw mhpmcounter15, x0csrw mhpmcounter16, x0csrw mhpmcounter17, x0csrw mhpmcounter18, x0csrw mhpmcounter19, x0csrw mhpmcounter20, x0csrw mhpmcounter21, x0csrw mhpmcounter22, x0csrw mhpmcounter23, x0csrw mhpmcounter24, x0csrw mhpmcounter25, x0csrw mhpmcounter26, x0csrw mhpmcounter27, x0csrw mhpmcounter28, x0csrw mhpmcounter29, x0csrw mhpmcounter30, x0csrw mhpmcounter31, x0li x5, 1csrw mhpmevent3, x5li x5, 2csrw mhpmevent4, x5li x5, 3csrw mhpmevent5, x5li x5, 4csrw mhpmevent6, x5li x5, 5csrw mhpmevent7, x5li x5, 6csrw mhpmevent8, x5li x5, 7csrw mhpmevent9, x5li x5, 0xbcsrw mhpmevent13, x5li x5, 0xccsrw mhpmevent14, x5li x5, 0xdcsrw mhpmevent15, x5li x5, 0xecsrw mhpmevent16, x5li x5, 0xfcsrw mhpmevent17, x5li x5, 0xffffffffcsrw mcounteren, x5li x5, 0xffffffffcsrw scounteren, x5csrw mcountinhibit, x0ret在需要檢測cache miss的位置,調用讀取event寄存器:
DBG("counter3: %lx,counter4: %lx, dcr: 0x%lx, dcrm: 0x%lx dcw: 0x%lx, dcwm: 0x%lx, sto:0x%lx\n", csr_read(mhpmcounter3), csr_read(mhpmcounter4),csr_read(mhpmcounter14),csr_read(mhpmcounter15), csr_read(mhpmcounter16), csr_read(mhpmcounter17),csr_read(mhpmcounter13));測試,在timer中斷中查詢當前的事件寄存器狀態:
riscv_timer_interrupt line 43, counter3: 18c970e9d8,counter4: 28 riscv_timer_interrupt line 43, counter3: 18c9bb2df2,counter4: 28 riscv_timer_interrupt line 43, counter3: 18ca05720f,counter4: 28 riscv_timer_interrupt line 43, counter3: 18ca4fb62c,counter4: 28 riscv_timer_interrupt line 43, counter3: 18ca99fa49,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cae43e67,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cb2e8277,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cb78c68a,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cbc30a99,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cc0d4eb6,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cc5792cf,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cca1d6ec,counter4: 28 riscv_timer_interrupt line 43, counter3: 18ccec1afc,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cd365f0f,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cd80a31e,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cdcae73b,counter4: 28 riscv_timer_interrupt line 43, counter3: 18ce152b4a,counter4: 28 riscv_timer_interrupt line 43, counter3: 18ce5f6f5d,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cea9b36d,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cef3f78a,counter4: 28 riscv_timer_interrupt line 43, counter3: 18cf3e3b99,counter4: 28通過訪問counter3和counter4寄存器,在RTOS上成功獲取到了ICache的miss率(counter3/counter4),但是貌似沒有辦法得到cache miss時候對用的訪問地址。?也就是有沒有辦法能夠獲得失中時刻的訪問地址。它更是一個程序段行為的統計展示。 為了優化程序可以分程序段分別統計cache miss率,針對miss率高的程序段進行分析。
關于HPM的使用,總結如下:
1、不同事件計數器單位不同,可以從事件描述中看出。例如:time這一計數器所表示的是系統計時器的當前值,或者counter_i表征L1 ICache miss counter時,它的單位就是L1 ICache訪問缺失的次數;
2、如上所述,如果counter3設置為CACHE(ICACHE/DCACHE讀/DCACHE寫)的缺失次數,讀該寄存器的返回值得到的時訪問CACHE缺失的次數,只需再設置某一寄存器counter_i為CACHE訪問次數,用counter3的值除以counter_i的值即可得到CACHE缺失率。
結束!
總結
以上是生活随笔為你收集整理的C906 RISCV HPM(PMU)使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Latex 双栏中使用单栏标题
- 下一篇: SEO优化怎么样