bringup Bianbu OS后,在terminal运行测试性能的test发现在user模式下可读的cycle寄存器的值不变:
发现寄存器:mcountinhibit低位控制cycle、ins、time,通过系统调用发现mcountinhibit寄存器的低位为0xd,即cycle和ins寄存器在user下不会增加。目前通过在系统调用返回时重新配置mcountinhibit低位为0x8使能cycle和ins,还有其他方法可以在不修改opensbi代码的前提下,可以在linux user模式下读取cycle和ins吗
可能是因为对接到 linux perf 框架后,counter 的启动/停止(mcountinhibit
寄存器)交由 perf 框架控制了。
可以尝试下把内核的 CONFIG_RISCV_PMU
和 CONFIG_RISCV_PMU_SBI
关掉,这样 mcountinhibit
应该会维持初始值 0xFFFFFFF8。(但需注意这样 perf 工具就无法使用硬件 counter 计数了)