RISC-V SiFive U64内核——HPM硬件性能监视器

news2024/9/25 13:24:10

学习、沉淀、分享,才能有所获~

文章目录

    • HPM简介
    • 性能监控计数器重置行为
    • 固定功能性能监控计数器
    • 事件可编程性能监控计数器
    • 事件选择器寄存器
    • 事件选择器编码
    • 计数使能寄存器

对于性能分析,通常我们会使用Perf工具。而perf中的硬件事件,则需要硬件的支持——性能监视单元PMU。RISC-V u64内核支持PMU,使得我们可以通过perf来统计程序运行所产生的cycle、cache hit、cache miss等事件的次数,从而进一步分析、优化性能。

在SiFive U64内核中,把PMU称作HPM,实际是一个东西。另外,u64内核的hpm增加了一个新的特性——hpm计数溢出中断。

下面详细介绍SiFive U64的HPM。

HPM简介

HPM:Hardware Performance Monitor。 U6 处理器内核支持基本的硬件性能监控 (HPM) 设施。 性能监视工具分为两类计数器:固定功能计数器和事件可编程计数器。 这些类包括一组固定计数器及其计数器使能寄存器,以及一组事件可编程计数器及其事件选择器寄存器。 寄存器可用于控制计数器的行为。 性能监控可用于多种用途,从优化到调试。

性能监控计数器重置行为

instret 和循环计数器在系统复位时被初始化为零。 硬件性能监视器事件计数器不会在系统重置时初始化,因此具有任意值。 用户可以将所需值写入计数器控制和状态寄存器 (CSR),以在给定的已知值开始计数。

固定功能性能监控计数器

一个固定功能的性能监视器计数器是硬件连接的,只计算一种特定的事件类型。 也就是说,它们不能根据它们计数的事件类型进行重新配置。 唯一的可以对固定功能性能监控计数器进行的修改是启用或禁用计数,并写入计数器值本身。

U6 处理器内核包含两个固定功能的性能监控计数器

Fixed-Function Cycle Counter (mcycle)

固定功能性能监控计数器 mcycle 保存自过去某个任意时间以来 hart 执行的时钟周期数的计数。 mcycle 计数器是可读写的,64 位宽。 读取 mcycle 返回 mcycle CSR 的所有 64 位。

Fixed-Function Instructions-Retired Counter (minstret)

固定功能性能监控计数器 minstret 保存 hart 自过去某个任意时间以来退役的指令数。 minstret 计数器是可读写的并且是 64 位宽的。 读取 minstret 返回 minstret CSR 的所有 64 位。

事件可编程性能监控计数器

一组可编程事件计数器与固定功能计数器相辅相成。 U6 HPM 包括两个额外的事件计数器,mhpmcounter3mhpmcounter4。 这些可编程事件计数器是可读写的,宽度为 64 位。 硬件计数器本身在 U6 内核系列上实现为 40 位计数器。 可以写入这些硬件计数器以初始化计数器值。

事件选择器寄存器

为了控制要计数的事件类型,事件选择器 CSR mhpmevent3 和 mhpmevent4 用于对相应的事件计数器进行编程。 这些事件选择器 CSR 是 64 位 WARL 寄存器。

事件选择器分为三个字段; 低 8 位选择一个事件类别,中间的一组位形成该类别中事件的掩码,高 8 位用于计数器溢出和事件过滤。

img

如果对应于任何设置掩码位的事件发生,则计数器递增。 例如,如果 mhpmevent3 设置为 0x4200,则 mhpmcounter3 将在任一加载指令时递增或者条件分支指令退出。 事件选择器 0 意味着“什么都不考虑”。

Counter Overflow and Event Filters

mhmpevent 寄存器的高 8 位用于控制计数器溢出中断,以及基于模式的事件过滤。 位布局如下图所示:

img

Performance Counter Overflow Operation

当内核处于特权模式 x 时,五个 xINH 位中的每一个都禁止事件计数。 这些字段中的所有零导致所有模式下的事件计数。

当相应的 hpmcounterX 溢出时,OF 位由硬件设置,并保持设置状态,直到被软件写入。 由于 hpmcounter 值是无符号的,溢出被定义为从全一递增到全零。 请注意,溢出后不会丢失信息,因为计数器环绕并继续计数,同时粘性 OF 位保持设置。

如果 hpmcounter 溢出而关联的 OF 位为零,则会生成计数溢出中断请求。 如果 hpmcounter 溢出而关联的 OF 位为 1,则不会生成中断。 因此,OF 位还用作相关 hpmcounter 的计数溢出中断禁用。

写入 mhpmcounterX 或 mhpmeventX 寄存器不会导致计数溢出。 仅当事件导致计数器递增时才会发生溢出。

计数器溢出中断是一个标准的本地中断,对应于 mipmie 寄存器中的第 13。 mip LCOFIP 位是这个中断和 mie 的中断挂起位 LCOFIE 位是该中断的中断使能位。 LCOFI 表示本地计数溢出中断。 如果存在 S 模式,则 sip 和 sie 包括用于管理程序中断控制和状态的相应位。

hpmcounter 生成计数溢出中断请求会设置 mip 寄存器中的 LCOFIP 位并设置相关的 OF 位。 如果存在 S 模式,则 mideleg 寄存器控制将此中断委托给 S 模式,这会设置 sip 寄存器中的 LCOFIP 位。 在处理计数溢出中断后,LCOFIP 位由软件清零。

发往相同特权模式的多个同时中断按以下优先级递减顺序处理:MEI、MSI、MTI、SEI、SSI、STI、LCOFI。

请注意,没有单独的溢出状态和溢出中断使能位。 实际上,通过清除 OF 位来启用溢出中断生成是与将计数器初始化为起始值一起完成的。 一旦计数器溢出,它和 OF 位必须在产生另一个溢出中断之前重新初始化。

软件可以区分尚未被溢出中断处理程序服务的新溢出计数器和已经被服务的溢出计数器(或者通过维护反映哪些计数器处于活动状态和到期的位掩码配置为不在溢出时生成中断的计数器) 最终溢出。

Scountovf 寄存器

scountovf CSR 是一个 32 位只读寄存器,包含 29mhpmevent CSR 中 OF 位的影子副本。 scountovf 中的位 X 对应于 mhpmeventX 中的 OF 位。 该寄存器使主管级溢出中断处理程序软件能够快速确定哪些计数器已经溢出,而无需对 M 模式进行环境调用。 CSR 地址为 0xDA0。

对 scountovf 位 X 的读取访问受制于调解 S 模式软件对 hpmcounterX 访问的相同 mcounteren CSR。 在 S 模式下,当设置 mcounteren 位 X 时,scountovf 位 X 是可读的,否则读为零。

Disabling Counters in Debug Mode

设置后,dcsr.stopcount 位会在调试模式下停止计数器。 这对于 mcycle 和 minstret 计数器尤其重要,因为在调试模式下,核心在紧密循环中执行 ROM 指令。 Freedom Studio Performance Monitor View 自动设置dcsr.stopcount 位。

事件选择器编码

表 20 描述了可用的事件选择器编码。 根据 mhpmeventX[7:0] 中编码的事件类字段,将事件分类为类。 可以通过为给定事件类别设置相应的事件掩码位来对一个或多个事件进行编程。 事件选择器编码为 0 表示“无意义”。 任何选定事件发生时,多个事件都会导致计数器递增。

img

对任何事件类可写的事件掩码位对所有类都是可写的。 设置与表 20 中定义的事件不对应的事件掩码位对当前实现没有影响。 但是,未来的实现可能会在该编码空间中定义新事件,因此不建议将不受支持的值编程到 mhpmevent 寄存器中。

Combining Events

直接计算每个事件是常见的用法。 此外,可以使用这些事件的组合来计算新的、独特的事件。 例如,要确定来自数据存储器子系统的每次加载的平均周期数,可以对一个计数器进行编程以计算“数据高速缓存/DTIM 繁忙”,并对另一个计数器进行编程以计算“已退出的整数加载指令”。 然后,简单地将“数据高速缓存/DTIM 繁忙”周期计数除以“整数加载指令退休”指令计数,结果就是每条指令加载周期的平均周期时间。

了解组合的事件类型很重要; 具体来说,事件类型计算发生次数,事件类型计算周期。

计数使能寄存器

32 位计数器使能寄存器 mcounterenscounteren 控制硬件性能监控计数器在下一个最低特权模式下的可用性。

这些寄存器中的设置仅控制可访问性。 读取或写入这些启用寄存器的行为不会影响底层计数器,这些计数器在不可访问时会继续递增。

mcounteren 寄存器中的任何位清零时,在 S 模式下执行时尝试读取周期、时间、指令退出或 hpmcounterX 寄存器将导致非法指令异常。 当这些位中的一个被设置时,在下一个实现的特权模式 S 模式下允许访问相应的寄存器。

在 U 模式下执行时,scounteren 寄存器中的相同位位置类似地控制对这些寄存器的访问。 如果允许 S-mode 访问计数器寄存器并且在 scounteren 中设置了相应的位,则也允许 U-mode 访问该寄存器。

mcounterenscounteren 是 WARL 寄存器。 任何位都可能包含硬连线值零,表示在低特权模式下执行时,读取相应计数器将导致非法指令异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里、腾讯、字节跳动大厂Java岗面试秘籍!(含答案解析)

本文主要是汇集整理了最新的阿里、腾讯、字节跳动大厂面试真题及答案解析,以及面试中被频繁问到的内容,主要作为参考大纲,供大家互相学习。 一、阿里篇(27题) 1.1.1 如何实现一个高效的单向链表逆序输出?…

当我用ChatGPT中学习CNN卷积神经网络时...

本文节选自本人博客:https://www.blog.zeeland.cn/archives/chatgpt-asoihgoihrx Introduction ChatGPT大火,在这一段时间并没有觉得ChatGPT特别厉害,最多就是一个基于生成式对话的NLP模型罢了,直到我看到了AI扮演Linux虚拟机&am…

[附源码]计算机毕业设计基于web的建设科技项目申报管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【Redis】Redisson 分布式锁主从一致性问题

一、主从一致性问题的产生 Redis 主从集群使用如下: 在主节点进行数据的写操作;在节点进行数据的读操作;主节点向从节点同步数据。 主从一致性问题: 当主节点还没来得及将锁信息同步到从节点时,此时主节点宕机了。然…

【产品分析】高德手机地图产品:未来搜索将从地图开始

未来的搜索从地图开始。今后的所有商务活动都将通过地图展开,使之成为兵家必争之地。要将移动流量变现为真金白银,地图将发挥至关重要的作用。 目前整个中国电子地图市场目前处于应用成熟期。在多年的快速发展和数次大型收购后,各互联网巨头已…

[附源码]计算机毕业设计家庭教育appSpringboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

腾讯在线文档根据单选的内容修改背景颜色

目录 [介绍] [条件格式] [添加条件格式] [选择单元格范围] [条件选择] [格式预览] [管理条件格式] [介绍] 类似我这种场景(见下图),单选选择不同的状态,有时为了一目了然的看清状态,需要给单元格加上不同的背景颜色,但手动使用格式刷比较麻烦,琢磨了下根据单元格选项动态…

【云原生】Nacos 监控手册

Nacos 0.8.0版本完善了监控系统,支持通过暴露metrics数据接入第三方监控系统监控Nacos运行状态,目前支持prometheus、elastic search和influxdb,下面结合prometheus和grafana如何监控Nacos,官网grafana监控页面。 搭建Nacos集群暴…

HTML入门零基础教程(六)

嗨,大家好,我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助,请支持一波。 希望未来可以一起学习交流。 目录 一、图像的路径 1.路径(前期铺垫知识) 2.VSCode打开目录文件夹: 3.路…

java计算机毕业设计ssm医院病床管理系统ft4fz(附源码、数据库)

java计算机毕业设计ssm医院病床管理系统ft4fz(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

Kafka集群搭建

集群应用场景 (1)消息传递 Kafka可以很好地替代传统邮件代理。消息代理的使用有多种原因(将处理与数据生产者分离,缓冲未处理的消息等)。与大多数邮件系统相比,Kafka具有更好的吞吐量,内置的分…

Java项目:SSM会议室预约系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目包含管理员与用户两种角色; 管理员角色包含以下功能: 管理员登陆,会议室管理,预约审核管理,用户注册等功能。 用…

半路出家的菜鸡程序员,北漂五年,给刚入行朋友的一些忠告,发自肺腑

从高中(s1)到大学(s7)打了7年的LOL,电一大师、网一王者,一度准备打职业。多的不再赘述,要知道,那些除了纪念和情怀,对我都不再有意义。 难以启齿,LOL算是陪伴…

【OpenCV学习】第8课:形态学操作-开丶闭丶形态学梯度丶顶帽丶黑帽

仅自学做笔记用,后续有错误会更改 理论 开:先腐蚀 后膨胀(效果:可以去掉小对象)闭:先膨胀 后腐蚀(效果: 可以填洞,去污渍)形态学梯度(基本梯度)&#xff1a…

委托(delegate)

委托(delegate) 委托概述 将方法调用者和目标方法动态关联起来,委托是一个类,所以它和类是同级的,可以通过委托来掉用方法,不要误以为委托和方法同级的,方法只是类的成员。委托定义了方法的类…

Flutter - DecoratedBox(装饰容器)及内部控件使用详解

DecoratedBox. 可以在其子组件绘制前(或后)绘制一些装饰(Decoration),如背景、边框、渐变等 比如 这样 这样 这样 // DecoratedBox 的源码 const DecoratedBox({super.key,required this.decoration, // Decorationthis.position Decor…

产品新说 | 重磅,刚刚正式发布

在当代术加持和需求迭代的背景下,运维人员更需要透过现象看本质,也就是通过复杂的表象数据去挖掘其背后的信息价值。而运维数据经过各种技术手段的治理后,通常的呈现方式是数据空间的形式,比如表格、纯文字等。为了更形象地表达数…

层次遍历二叉树

层次遍历二叉树 文章目录层次遍历二叉树♥ 做法♥算法构思♥ 数据结构设计♥ 层次遍历过程♥ 算法实现应用:用层次遍历求路径之逆♥ 问题♥ 解题思路:♥ 算法框架:♥ 算法实现♥ 做法 ▪ 逐层进行访问 ▪ 对某一层的节点访问完后,再按照其访问次序对各个节点的左、…

[附源码]Python计算机毕业设计SSM基于的在线怀旧电影歌曲听歌系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

MATLAB算法实战应用案例精讲-【神经网络】扩散模型(Diffusion Models)

前言 广播模型、扩散模型和传染模型可以用于分析信息、技术、行为、信念和传染病在人群中的传播。这些模型在通信科学、市场营销学和流行病学的研究中发挥着核心作用。 在计算机视觉中,生成模型是一类能够生成合成图像的模型。例如,一个被训练来生成人脸的模型,每次都会生…