RISC-V 异常处理在 KVM 中的实现 环球热头条
时间:2023-06-16 17:52:08来源:泰晓科技

Corrector: TinyCorrect v0.1 - [tounix spaces toc comments tables images urls epw]


(资料图片仅供参考)

Author: XiakaiPan 13212017962@163.com

Date: 2022/10/21

Revisor: walimis, Falcon

Project: RISC-V Linux 内核剖析

Proposal: RISC-V 虚拟化技术调研与分析

Sponsor: PLCT Lab, ISCAS

本周继续连载 Risc-v Kvm Excp Impl 系列文章,记得收藏分享+关注,写文章领补贴:gitee.com/tinylab/riscv-linux

该活动统一采用泰晓社区自研 Linux Lab 开源实验环境,也可选用免装即插即跑 Linux Lab Disk (https://tinylab.org/linux-lab-disk),某宝检索“泰晓 Linux”可找到。Linux Lab v1.1 Inside —— 内核开发从未像今天这般简单!

RISC-V 异常处理在 KVM 中的实现

前言

Trap 处理是 RISC-V 虚拟化实现中的重要部分,包括异常和中断两个部分。当前 KVM 是 RISC-V 虚拟化扩展在软件层面较为可靠的实现,本文将结合 RISC-V 特权指令集手册的规定,分析 KVM 中有关异常处理的实现,中断部分由于涉及较多驱动层面的内容,故将在之后的文章中结合 MMIO,timer 等做具体探讨。

软件版本

KVM 异常处理

异常处理入口

在 KVM 对 RISC-V H 扩展的实现中,与异常处理相关的函数调用关系如下图所示。目前的实现中,KVM 能够处理三类异常。即虚拟机内的 page fault、虚拟指令异常和系统调用,三种不同的异常处理分别对应了不同的实现。

异常分类及其定义

kvm_arch_vcpu_ioctl_run 函数用于实现 vCPU 的运行。其调用 kvm_riscv_vcpu_enter_exit 函数进入 vCPU 的运行,此时 Guest 进入运行状态,CPU 处于 VS 或者 VU 模式。当 Guest 发生无法处理的异常时,Guest 退出,CPU 进入 HS 模式,随后 KVM 调用 kvm_riscv_vcpu_exit 来实现对异常的处理。

kvm_riscv_vcpu_exit 函数内部包含三个部分,分别对应三种异常的处理,代码如下:

如上所示,KVM 的实现中包含了三类异常:

虚拟指令异常;

Guest page fault;

SBI 系统调用。

特权指令集手册 中规定了每种异常对应的编码(即 scause 的可能的值),在进行异常处理时,可依据据 scause 的具体值确定其处理方式,如下表所示。

cause code

在 KVM 中,其对应宏的定义如下:

虚拟指令异常

其中,EXC_VIRTUAL_INST_FAULT 即 virtual instruction exception 对应如下情况:

在 VS-Mode 或 VU-Mode 下访问特定 CSR 的特定位;

在 VS-Mode 或 VU-Mode 下执行无权限的指令如 HFENCE, HLV, HSV 等。

KVM 中 virtual instruction 异常的处理如下:

其中用于处理具体指令的函数其原型或定义如下:

处理非法压缩指令时,用于从 Guest 获取合法指令的 kvm_riscv_vcpu_unpriv_read 函数:

对合法的压缩指令以及非 SYSTEM 类型的非压缩指令,不进行额外处理,直接调用 truly_illegal_insn 函数处理,保存当前 trap 的具体信息,将 Guest PC 设置为 Guest 中对应的异常向量, 然后返回到到 Guest 中对异常进行处理:

其调用关系如下图所示:

SBI 系统调用

系统调用的处理通过调用 kvm_riscv_vcpu_sbi_ecall 函数实现,如下方代码块所示:

SBI(Supervisor Binary Interface) 是直接运行在 Machine Mode 下的,为上层 OS 提供统一接口的程序,具有最高权限。而 Guest 访问 SBI 系统调用,是在 KVM 中模拟实现,不是实际访问 Machine Mode 中的 SBI firmware。KVM 通过直接访问和设置寄存器(cp->a7, cp->a0, cp->a0 等)的值来实现对 SBI 系统调用的处理。

总结

本文结合 KVM 中有关异常处理的实现,讨论了在添加 H 扩展之后的虚拟指令异常、guest page fault 以及来自 guest 的系统调用的处理。

参考资料

RISC-V 特权指令集手册

RISC-V Linux

首发地址:https://tinylab.org/riscv-kvm-excp-impl

技术服务:https://tinylab.org/ruma.tech

标签:

生活指南
  • 全球快看点丨何谓“超级增程”?告别里程焦虑,深蓝S7为你解密

    6月15日,以 "超级增程实力担当 "为主题的深蓝S7超级增程动态体验活动

  • 奖励一套房!慰问金10万!杭州跳桥救人小哥最新回应,网友:好人有好报!

    最新消息:彭清林:政府给予的荣誉和奖励他收下了,企业的爱心希望反哺

  • 瑞德智能:公司有图像识别产品技术研究并有一定技术沉淀和应用

    证券时报e公司讯,瑞德智能在互动平台表示,公司有图像识别产品技术研

  • 爆冷!陆光祖,张艺曼遭遇印尼羽毛球公开赛一日游

    印尼羽毛球公开赛的比赛如火如荼进行中,比赛真是精彩纷呈,国羽选手们

  • 威尔泰(002058):该股换手率大于8%(06-16) 当前观察

    摘要:2023年06月16日威尔泰(002058)换手率大于8%,主力资金净流出53

  • 固定收益类指的是什么产品?固定收益类是不是保本产品?

    固定收益类指的是什么产品?固定收益,就是指投资者按预先规定的比率

  • 招商银行的专享额度是什么?招商信用卡不能分期怎么解决? 焦点热讯

    招商银行的专享额度是什么?招商银行的专享额度是指招商银行的某款贷

  • 中华人民共和国建筑法第六十三条是什么内容?地下工程防水工程的质量标准是什么?

    地下工程防水工程的质量验收规范是《建筑法》,即地下工程防水工程

  • 二手房面签后多久过户 ?二手房过户流程是什么?|短讯

    在二手房交易过程中,若买房需要向银行申请贷款,则一定会通过二手

  • 大摆锤的工作原理是什么?大摆锤座位的结构是什么?|全球头条

    大摆锤的工作原理是什么?大摆锤的工作原理分析如下;大摆锤的主传动

  • 车贷没还清能不能二次贷款?车贷提前还款的操作方式是什么? 每日热讯

    车贷没还清能不能二次贷款?有车贷未还清的车可以再贷款。只要车辆

  • 联想z475可以装win10系统吗?联想g475装什么系统比较好? 环球快看

    联想z475可以装win10系统吗?联想z475使用的是Amd的移动版处理器,原

  • 怎样判断股票是否具备短线机会?短线买股票最佳时间是几点?

    怎样判断股票是否具备短线机会?1、个股攻击力度要求:涨幅、量如果

  • 人类探索太空咋回事 到底应不应该探索太空? 当前速讯

    人类探索太空咋回事上周,神舟十三号的3位航天员结束了超过6个月的

  • 水瓶座知道结婚的好处也知道结婚之后的不好?

    金牛座:担心过得不好金牛座是没有结婚前迫不及待的要结婚,结婚了

  • 世界百事通!日本鼓励开设“自行车巴士” 使自行车可以不经拆卸或折叠被带入车厢

    快科技6月8日消息,设想一下,如果允许乘客携带自行车搭乘公共交通

  • 民生
    • 最佳的翻盖手机是哪款?

    • 全球焦点!苹果换墙纸如何快速取消景深?苹果换墙纸选取不了照片怎么办?

    • 走近暗黑游乐园的秘密 《猎魂觉醒》团本场景曝光 世界最资讯

    • @全国考生:你有一份来自贵州的旅游通知书-世界播资讯