Rocket-Chip-Hardware_Performance_Monitor

本文深入解析RISC-V架构中的硬件性能监控机制,包括关键CSR寄存器的定义与功能,如mcycle、minstret及mhpmcounter系列。通过SiFive E31与rocket-chip实例,对比分析不同实现方式,展示如何配置与读取监控数据,适用于嵌入式系统与高性能计算领域的开发者。

这次我们介绍的功能是Hardware Performance Monitor。

首先我们先看一下指令集 《The RISC-V Instruction Set Manual Volume II: Privileged Architecture Privileged Architecture Version 1.10》 是如何定义的。
文档链接:
https://riscv.org/specifications/privileged-isa/
在这里插入图片描述在这里插入图片描述
由上面内容可以知道,RISC-V指令集规定了一些硬件性能监控的CSR寄存器,用于监控CPU的内部运行情况。

  1. mcycle:保存自过去任意时间以来CPU执行的周期数,是一个64-bit的CSR寄存器,当使用的是32-bit系统时,可以通过mcycle & mcycleh读取完整的64-bit数据。
  2. minstret:记录自过去任意时间以来CPU退出的指令数,是一个64-bit的CSR寄存器,当使用的是32-bit系统时,可以通过minstret & minstreth读取完整的64-bit数据。
  3. mhpmevent3–mhpmevent31:硬件性能监控的事件选择CSR寄存器,是一个32-bit的CSR寄存器。
  4. mhpmcounter3– mhpmcounter31:额外29个事件触发CSR计数器,当选择监控的事件发生时,此计数器会自动加一,指令集中规定是64-bit的CSR寄存器,当使用的是32-bit系统时,可以通过mhpmcounterX & mhpmcounterXh读取完整的64-bit数据。

接下来看的是,各CSR寄存器对应的地址。
在这里插入图片描述
蓝色框中的CSR寄存器就是Hardware Performance Monitor相关的CSR寄存器。“Number”对应的12-bit数值就是该CSR寄存器对应的地址。

下面我们看看SiFive 《SiFive E31 Core Complex Manual》 关于Hardware Performance Monitor的说明。
文档链接:
https://sifive.cdn.prismic.io/sifive/0cc4918b-751d-4e2a-9337-2ceedeec4459_sifive_coreip_E31_AHB_rtl_v19_08p2p0_release_manual.pdf
在这里插入图片描述
这里看到,SiFive的E31采用的mhpmcounterX只有40-bit,而非指令集中的64-bit。不过感觉40-bit也是够用的,采用64-bit的话,会比较浪费硬件资源,所以可以理解。
黄色框的内容是说明如何使用Hardware Performance Monitor的,要理解清楚还需要配合下面这个图。
在这里插入图片描述
这个图是指导如何选择监控的事件,例如文档上的选择0x4200,则同时监控Integer load instruction retired & conditional branch instruction retired这两件事,当CPU内部发生这两件事时,计数器会自动加一。

看完文档功能说明,我们接下来看的是scala代码。
首先看的文件是:/rocket-chip/src/main/scala/rocket/Instructions.scala
从里面找出各类CSR寄存器的地址。
在这里插入图片描述
从图中可以看到,CSR寄存器的地址和指令集中的一一对应。我只是贴出部分CSR寄存器,想看全部的,大家可以自行查看Instructions.scala。

下面看一下,rocket-chip是如何实现Hardware Performance Monitor的。
主要的代码是:
/rocket-chip/src/main/scala/rocket/Events.scala
/rocket-chip/src/main/scala/rocket/RocketCore.scala
/rocket-chip/src/main/scala/rocket/CSR.scala

我只说明部分代码的功能,并不会一一解释

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值