RISC-V的中断委托机制和场景

中断/异常委托机制的说明

默认情况下,所有特权级的中断和异常都会被发送给机器模式(Machine Mode, 以下简称M态),然后运行在M态的软件再根据中断/异常的目标特权级,转发给较低特权级去处理,转发手段通常是中断/异常注入(例如设置sip来注入S态中断)。但是这样的效率很低,所以RISC-V引入了委托机制,在硬件层面设置mideleg/medeleg,绕过M态,直接把低特权级的中断/异常路由给目标特权级处理。以下通过具体的场景来说明。

未启用中断委托机制时的场景(默认情况)

如图1,典型场景下M/S/U三态分别对应运行OpenSBI,Linux Kernel和用户态应用。

图1 - 未启用中断委托时的默认场景

默认未启用 中断委托时,mideleg相当于被短路,中断源发出的各种中断穿越该寄存器后,先到达中断开关(en),如果对应中断是开启的,就会沿着CPU的M态中断处理通道到达mtvec寄存器,这里是软件中断向量表的入口,从此处开始转入OpenSBI软件对中断的处理,如果发现中断其实是发给S态Linux的,还要再通过中断注入的方式继续转发。

注:中断开关en分为两级,全局开关是mstatus中的mie位,另外寄存器mie中的一些bit是针对每个中断号的特定开关,两级都启用才能让中断通过。

启用中断委托机制时的场景

为了缩短处理路径,可以设置mideleg,选择性的把针对S态的部分中断直接委托给S态处理,不经过M态,如图2所示。

图2 - 启用中断委托机制时的场景

在图2基础上,举一个更具体的例子。中断源是PLIC,发出两个特权级的ext外部中断,标记为mext(11号)和sext(9号)。

  1. 对于sext的处理路径:mideleg的第9位预先设置1,指示sext将被委托到S态处理,因而在硬件层面sext会经由S-IRQ通道逐步传递,最终到达Linux中的中断处理函数。注意S态通道的en中断开关是由Linux控制的,由Linux决定什么时候打开"水龙头"。
  2. 对于mext的处理路径:mext不会被路由委托,仍然试图沿着M-IRQ中断处理通道前进(红色虚线箭头),但是OpenSBI会在引导Linux Kernel之前,关闭M态的那个en开关,在那之后,mext的处理路径在硬件层面就被截断了。这样的效果是,Linux启动后就接管了所有的中断处理,OpenSBI不再参与,整体上的性能较好。

OpenSBI和Linux Kernel在引导过程中的任务

中断委托机制的启用由OpenSBI和LinuxKernel接替完成:

  1. OpenSBI在M态被引导,它会按需打开en中断开关,以完成必要的设备初始化。此时,只存在M态处理中断的路径,即图1所示的路径。
  2. OpenSBI在自身引导的最后阶段,即切换到S态启动Linux的前夕,一方面设置mideleg委托给S态中断,另一方面关闭了M态中断的开关en,不再有M态中断流处理。
  3. Linux Kernel启动时,由于OpenSBI的预先准备工作,它将能够全权处理中断。即所有中断都走S态路径,也就是图2所示的路径。

关于异常的委托

异常委托与中断委托类似,主要区别是三点:

  1. 异常委托基于medeleg寄存器。
  2. 异常委托的硬件处理路径上没有en开关,也就是无法像对待中断那样开关异常。
  3. OpenSBI把S态的ecall异常、缺页异常等都委托给S处理,但是它本身还能够处理M态的ecall,即SBI-Call,以此来为Linux提供一些调用服务。

要点

特别需要注意的是:中断的委托机制是前置于中断开关的,委托形成了多条IRQ的分流,每条分流各自有自己的中断开关。因此,中断开关不会影响委托机制。

相关推荐
Blossom.1183 小时前
基于混合检索架构的RAG系统优化实践:从Baseline到生产级部署
人工智能·python·算法·chatgpt·ai作画·架构·自动化
菜鸟不学编程3 小时前
架构之光:从一份开源代码中,我窥见鸿蒙大型工程的未来!
华为·架构·harmonyos
_大峰_3 小时前
【论文精读】从单系统架构到微服务架构:软件现代化的转型综述
微服务·架构·系统架构
HyperAI超神经3 小时前
【vLLM 学习】Reproduciblity
人工智能·深度学习·学习·cpu·gpu·编程语言·vllm
秋饼4 小时前
【深度剖析MySQL五大核心模块:从架构到实践】
数据库·mysql·架构
Light604 小时前
MyBatis-Plus 全解:从高效 CRUD 到云原生数据层架构的艺术
spring boot·云原生·架构·mybatis·orm·代码生成·数据持久层
lbb 小魔仙4 小时前
【Java】Spring Cloud 微服务架构入门:五大核心组件与分布式系统搭建
java·spring cloud·架构
未来之窗软件服务4 小时前
幽冥大陆(八十)Win7环境下ARM架构开发—东方仙盟练气期
arm开发·架构·仙盟创梦ide·东方仙盟
eddy-原4 小时前
云原生分布式系统综合实战:微服务网关、日志监控与对象存储架构
微服务·云原生·架构