当前位置: 首页 > news >正文

「RISC-V Arch」SBI 规范解读(下)

第六章 定时器扩展(EID #0x54494D45"TIME")


这个定时器扩展取代了遗留定时器扩展(EID #0x00),并遵循 v0.2 中定义的调用规约。

6.1 函数:设置定时器(FID #0)

struct sbiret sbi_set_timer(uint64_t stime_value)

描述和遗留扩展描述同。 

6.2 函数列表

表6 定时器函数列表

第七章 IPI 扩展(EID #0x735049)


取代了遗留的 IPI,不再赘述。

第八章 RFENCE 扩展(EID #0x52464E43)


取代了遗留的 RFENCE,不再赘述。

第九章 hart 状态管理扩展(EID #0x48534D)


hart 状态管理扩展 HSM 介绍了一系列的 hart 状态和一组函数给 S 模式软件来请求 hart 状态的改变。下表描述了一些可能的 HSM 状态以及每个状态的唯一 ID。

表7 HSM hart 状态

 任何时间,一个 hart 应该只能处于上述状态中的一种,SBI 实现的 hart 状态应该遵循图3中的状态机转换。

图3 SBI HSM 状态机

 一个平台可以有多个 hart,这些 hart 可以被分为分层拓扑组(比如 core,cluster,nodes 等),每个分组都具有独立的低功耗状态。分层拓扑组中的这些平台相关的低功耗状态可以表示 suspend 状态,一个 SBI 实现可以使用下面方法来利用更高层拓扑组的 suspend 状态:

  • 平台协调

      这种方法中,当一个 hart 空闲时,S 模式电源管理软件会请求这个 hart 和 更高一层组进入最深度 suspend 状态。一个 SBI 实现应该为高层组选择一个 suspend 状态:a. 不比指定 suspend 状态更深 b.唤醒延时不能比指定的 suspend 延时高                        

  • OS 发起

      这种方法中,S 模式中的电源管理软件会在最后一个 hart 空闲时,直接请求高拓扑组进入 suspend 状态。当一个 hart 空闲,S 模式电源管理软件总是为自己选择一个 suspend 状态,只有自己是组内最后一个 suspend 的 hart 时,会请求高层拓扑组进入 suspend 状态。一个 SBI 实现应该:a.永远给高层拓扑组选择一个和指定 suspend 状态相同的状态 b.总是倾向于选择最近请求高层拓扑组的 suspend 状态。


9.1 函数: HART 开始(FID #0)

struct sbiret sbi_hart_start(unsigned long hartid,                             unsigned long start_addr, unsigned long opaque)

请求 SBI 实现来在 S 模式下、指定地址、指定寄存器数值、开始执行目标 hart,描述如下:

表8 HSM Hart 开始寄存器状态

 这个调用是异步的,更具体的,这个函数会在目标 hart 开始执行前返回,SBI 实现能够保证返回码的准确性。如果 SBI 实现是一个执行在 M 模式下的平台运行时固件,那么它必须在将控制权交给 S 模式前,配置 PMP 以及其他 M 模式下的状态。

hartid 参数指定了待启动的目标 hart;

start_addr 参数指定了运行时的物理地址,目标 hart 能够在 S 模式下在该地址开始运行;

opaque 参数是一个 XLEN-bit 长度的数值,当 hart 开始执行时会设置到 S 模式的 a1 寄存器中;

sbiret.error 中可能的错误码如表9,

表9 HSM Hart Start 错误码

 9.2~9.5 略

第十章 系统复位扩展(EID #0x53525354 “SRST”)


系统复位扩展给 S 模式软件提供了一种系统级的重启或关闭的函数。这里的系统指的是 S 模式视角,SBI 实现可以是机器模式固件或者 hypervisor。

10.1 函数:系统复位(FID #0)

struct sbiret sbi_system_reset(uint32_t reset_type, uint32_t reset_reason)

根据复位类型和原因来给系统复位,这个调用是同步,一旦成功将不再返回。

reset_type 参数是一个 32 位宽的数值,可选的数值如下:

表10 SRST 系统复位类型

 reset_reason 是一个可选的参数,代表了复位的原因。这个参数也是 32 位宽,可选的值如下:

表11 SRST 系统复位原因

 当 S 模式软件在本地运行时,SBI 实现是机器模式固件。在这种情况下了,关机就相当于整个系统的关机,即冷启动。另外,热重启相当于处理器核心和系统部分重启,不是整个系统。比如,一个拥有 BMC 的服务器系统,热重启并不会给 BMC 下电,但是冷重启会。

当 S 模式软件运行在虚拟机中时,SBI 实现是 hypervisor。关机、冷重启、热重启其实效果上和本地时相同,但是不会导致任何的物理电源变化。

sbiret.error 可能的返回错误码如表 12:

表12 SRST 系统复位错误码

 第十一章 性能监视器单元扩展(EID #0x505D55"PMU")


RISC-V 硬件性能计数器,如mcycle、minstret 和 mhpmcounterX CSR,可在 S 模式下使用cycle、instret和hpmccounterX CSR以只读方式访问。SBI 性能监控单元( PMU )扩展是一个为S 模式提供的接口,在机器模式(或hyper模式)协助下,配置和使用 RISC-V 硬件性能计数器。这些硬件性能计数器只能通过 mcountinhibit 和 mhpmeventX CSR 寄存器在机器模式下启动、停止或配置。因此,如果 RISC-V 平台未实现 mcountinhibit CSR,机器模式中的 SBI 实现可能会选择不允许SBI PMU扩展。

RISC-V 系统通常支持使用有限数量的硬件性能计数器(最多 64 位宽)监控各种硬件事件。此外,SBI 实现还可以提供固件性能计数器,这些计数器可以监视固件事件,例如未对齐的加载/存储指令的数量、RFENCE 的数量、IPI 的数量等,固件计数器总是 64 位宽。

SBI PMU 扩展提供:

  1. 为 S 模式提供接口,以访问(发现/配置) hart /固件的计数器
  2. 提供硬件/固件的新能计数器和事件接口,接口与 Linux perf 兼容
  3. 微架构原始事件编码的完全访问

为了定义 SBI PMU 的扩展调用,我们定义了一些重要的实体:counter_idx,event_idx 以及 event_data。counter_idx 是为每个硬件/固件分配的计数器逻辑号,event_idx 代表硬件/固件事件,event_data 是 64 位宽的代表硬件/固件事件的额外配置/参数。

event_idx 是一个 20 位宽的值,编码如下:

   event_idx[19:16] = type    event_idx[15:0] = code

11.1 事件:硬件普通事件(类型 #0)

 event_idx.type 为 0x0 表示所有的硬件普通事件,通过event_idx.code 来识别是什么事件

表13 PMU 硬件事件

 To Be Contined~

11.2 事件:硬件 cache 事件(类型 #1)

11.3 事件:硬件原始事件(类型 #2)

11.4 事件:固件事件(类型 #15)

11.5 函数:获取计数器值(FID #0)

11.6 函数:获取计数器详细信息(FID #1)
11.7 函数:发现并配置匹配计数器(FID #2)

11.8 函数:开启计数器(FID #3)

11.9 函数:停止计数器(FID #4)

11.10 函数:读取固件计数器(FID #5)

11.11 函数列表

第十二章 实验中的 SBI 扩展空间(EIDs #0x08000000-#0x08FFFFFF)


第十三章 供应商特定的扩展空间(EIDs #0x09000000-#0x09FFFFFF)


第十四章 固件提供商特定的扩展空间(EIDs #0x0A000000-#0x0AFFFFFF)


皮格马利翁效应心理学指出,赞美、赞同能够产生奇迹,越具体,效果越好~

“收藏夹吃灰”是学“器”练“术”非常聪明的方法,帮助我们避免日常低效的勤奋~

相关文章:

「RISC-V Arch」SBI 规范解读(下)

第六章 定时器扩展(EID #0x54494D45"TIME") 这个定时器扩展取代了遗留定时器扩展(EID #0x00),并遵循 v0.2 中定义的调用规约。 6.1 函数:设置定时器(FID #0) struct sbi…...

Android framework socketpair

简述 在Linux中,socketpair函数可以用于创建一对相互连接的、通信域为AF_UNIX的套接字,其中一个套接字可用于读取,另一个套接字可用于写入。可以使用这对套接字在同一进程内进行进程间通信(IPC)。 以下是使用socketp…...

腾讯在海外游戏和短视频广告领域的新增长机会

来源:猛兽财经 作者:猛兽财经 腾讯(00700)的收入在过去几个季度一直在下降,部分原因是由于新冠疫情导致的经济放缓以及中国监管机构对大型科技公司的监管收紧导致游戏行业萎缩造成的。 然而,猛兽财经认为,这些不利因素…...

查找该学号学生的成绩。

从键盘输入某班学生某门课的成绩(每班人数最多不超过40人),当输入为负值时,表示输入结束,试编程从键盘任意输入一个学号,查找该学号学生的成绩。**输入格式要求:"%ld"(学号) "%l…...

为Webpack5项目引入Buffer Polyfill

前言 最近在公司的一个项目中使用到了Webpack5, 然而在使用某个npm包的时候,出现了Buffer is not defined 这个问题,原因很明显了,因为浏览器运行时没有Buffer这个API,所以需要为浏览器引入Buffer Polyfill. Webpack5…...

【人工智能 AI 】您可以使用机器人流程自动化 (RPA) 实现自动化的 10 个业务流程:Robotic Process Automation (RPA)

摘:人类劳动正在被机器(例如在工业中)或计算机程序(适用于所有行业)所取代。 目录 10 processes you can robotise in your company您可以在公司中实现自动化的 10 个流程 Human employees or robotic workers?人类员工还是机器人工人? Robots take over headhunting…...

VMware ESXi 8.0b - 领先的裸机 Hypervisor (Dell HPE Custom Image update)

本站发布 Dell 和 HPE 定制版 ESXi 8.0b 镜像 请访问原文链接:https://sysin.org/blog/vmware-esxi-8/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org 产品简介 VMware ESXi:专门构建的裸机 Hyper…...

Java:SpringBoot 整合Spring-Retry实现错误重试

SpringBoot 整合Spring-Retry可以实现错误重试 目录引入依赖开启spring-retry使用重试注解Retryable 注解Backoff 注解测试参考引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactI…...

MyBatis学习笔记(二) —— 搭建MyBatis项目

2、搭建MyBatis 2.1、开发环境 IDE&#xff1a;idea 2019.2 构建工具&#xff1a;maven 3.5.4 MySQL版本&#xff1a;MySQL 8 MyBatis版本&#xff1a;MyBatis 3.5.7 MySQL不同版本的注意事项 1、驱动类 driver-class-name MySQL 5版本使用jdbc5驱动&#xff0c;驱动类使用…...

linux服务器上Docker中安装jenkins

前言 Jenkins是开源CI&CD软件领导者&#xff0c; 提供超过1000个插件来支持构建、部署、自动化&#xff0c; 满足任何项目的需要。 本文主要提供通过docker安装jenkins镜像&#xff0c;并配置nginx反向代理页面配置和使用。通过jenkins完成项目的自动部署。 我在安装之前…...

自考都有哪些科目?怎么搭配报考?

第一次自考科目搭配 先报理论课&#xff0c;熟悉学习和考试套路 参考搭配模式&#xff1a; 一、全报考公共课 公共课难度较低&#xff0c;通过率高&#xff0c;复习起来比较轻松。对于不确定考什么专业&#xff0c;后期想换专业的同学&#xff0c;考过公共课&#xff0c…...

HIVE --- 高级查询

目录 CTE和嵌套查询 嵌套查询 关联查询&#xff08;join&#xff09; MapJoin MapJoin操作在Map端完成 开启MapJoin操作 MAPJOIN不支持的操作 union 数据交换&#xff08;import/export&#xff09; 数据排序 order by sort by distribute by cluster by CTE和嵌…...

【手撕源码】vue2.x双向数据绑定原理

&#x1f431; 个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff1a;vue3从入门…...

Allegro如何显示层叠Options和Find操作界面

Allegro如何显示层叠Options和Find操作界面 Allegro常规有三大操作界面,层叠,Options和Find,如下图 软件第一次启动的时候,三大界面是关闭的,下面介绍如何把它们打开,具体操作步骤如下 点击菜单上的View点击Windows...

【数据结构】双向链表

目录 数据结构之双向链表&#xff1a;&#xff1a; List.h List.c 1.创建返回链表的头结点 2.双向链表初始化 3.双向链表打印 4.双向链表销毁 5.双向链表尾插 6.双向链表尾删 7.双向链表头插 8.双向链表头删 9.双向链表查找 10.双向链表在pos前插入 11.双向链表删除pos位置 12…...

Editor工具开发基础三:自定义组件菜单拓展 CustomEditor

一.创建脚本路径 创建脚本路径不再限制 一般写在自定义组件类的下边二.特性CustomEditor 定义主设计图面由自定义代码实现数组的编辑器。两个构造函数1.public CustomEditor(Type inspectedType);2.public CustomEditor(Type inspectedType, bool editorForChildClasses);参数意…...

拒绝摆烂!神仙网站Python自学,一路从入门闯到最后,边学边玩

前言给大家推荐3个边玩边学python的网站在刚接触编程&#xff0c;培养对其持续的兴趣是最最重要的事情辣&#xff01;&#xff01;&#xff01;因为前期需要大量的基础代码知识积累&#xff0c;这个过程对于不少人来说还是挺枯燥的&#xff0c;很有可能学到一半就放弃了&#x…...

Linux基础命令-locate快速查找文件

文章​​​​​​​目录 locate 命令介绍 语法格式 基本参数 参考实例 1&#xff09;查找1.txt相关的文件 2&#xff09;查找包含pass和txt都有的文件 3&#xff09;只匹配文件名&#xff0c;有路径的情况下不进行匹配 4&#xff09;匹配不区分大小写的文件 5&#…...

揭穿数据分析的六大谎言

目前许多企业在决策时仍沿用以往的个人经验&#xff0c;没有用数据说话&#xff0c;这在实际决策运行时会出现很多问题。在数据分析行业发展成熟的国家&#xff0c;90%的市场决策和经营决策都是通过数据分析研究确定的。用数据说话&#xff0c;重视定量分析&#xff0c;也逐渐成…...

LinkSLA智能运维技术派-Redis的监控

Redis是一个开源&#xff0c;内存存储的数据服务器&#xff0c;可用作数据库、高速缓存和消息队列代理等场景。 首先我们对内存进行监控&#xff0c;主要指标如下&#xff1a; - used_memory:使用内存 - used_memory_rss:从操作系统分配的内存 - mem_fragmentation_ratio:内…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...