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

ARM系列 -- 虚拟化(四)

今天来看看虚拟中断。

在一个非虚拟化的系统中,操作系统可以直接访问GIC的寄存器,并且处理GIC的物理中断接口(physical interrupt interface)。

但是在一个虚拟化的系统中,不是这样。Guest OS并不知道它运行在虚拟系统中,其接收的中断来自GIC的虚拟中断接口(virtual interrupt interface),但是OS本身并不知道;实际上是hypervisor接管了GIC的寄存器访问和物理中断接口,且hypervisor要负责产生虚拟中断给Guest OS。

还有另外一种方式产生虚拟中断,就是通过配置HCR_EL2,由内部CPU核产生。在HCR_EL2里面有三个bit用来产生虚拟中断:

  • VI:设置该bit产生一个vIRQ
  • VF:设置该bit产生一个vFIQ
  • VSE:设置该bit产生一个vSerror

设置这些bit位就相当于中断控制器向vCPU发送中断信号。生成的虚拟中断受PSTATE掩蔽的影响,就像常规中断一样。这种机制使用起来很简单,但缺点是hypervisor需要模拟中断控制器的操作。换言之,软件中的trap和emulate操作的开销比较大,影响性能。

通过GIC就能避免上面的问题。GIC的物理CPU接口和虚拟CPU接口是等同的,区别只是一个发送物理中断信号,另一个发送虚拟中断信号。

来看一个例子:

  • 外部中断到达GIC;
  • GIC产生一个物理IRQ给CPU;
  • CPU转换到EL2,hypervisor通过物理CPU接口读取中断;
  • Hypervisor写GIC的List寄存器产生虚拟中断;
  • GIC通过vIRQ发送中断给CPU;
  • CPU从EL2返回到EL1或者EL0;
  • Guest OS读取中断,CPU执行中断处理程序。

在GICv4中,增加了对虚拟机直接注入虚拟中断的支持。支持GICv4的IP是GIC-700.目前的虚拟中断直接注入支持产生LPI,也就是说系统中要有ITS组件。

  • Hypervisor会事先通过ITS命令配置ITS,重新映射虚拟core和物理core,虚拟中断和物理中断。
  • 当ITS接到消息中断后,先要查表得到虚拟的INTID和虚拟PE,然后发给相应的redistributor。
  • Redistributor会去检查内部的寄存器,查看vPE是否在自己这边注册过。
  • 如果注册过,发虚拟中断给vPE;
  • 如果没有,发中断给hypervisor。

GIC-700也支持软件通过将vPE和SGI-INTID写入GITS_SGIR寄存器的方式来直接注入SGI。对于PPI和SPI的直接注入,目前尚不支持。

作者:老秦谈芯

http://www.lryc.cn/news/307374.html

相关文章:

  • QT GUI编程常用控件学习
  • 【Python从入门到进阶】49、当当网Scrapy项目实战(二)
  • flutter build ipa 打包比 xcode archive 打出的ipa包大
  • B端系统:巧妙地容错和防错设置,减少用户操作错误
  • BIO实战、NIO编程与直接内存、零拷贝深入辨析
  • PDF文件转换为图片
  • 【Java程序设计】【C00317】基于Springboot的智慧社区居家养老健康管理系统(有论文)
  • Vue3前端实现一个本地消息队列(MQ), 让消息延迟消费或者做缓存
  • 普中51单片机学习(8*8LED点阵)
  • Python 实现Excel自动化办公(上)
  • DayDreamInGIS 之 ArcGIS Pro二次开发 图层属性中换行符等特殊字符替换
  • RK3568平台 RTC时间框架
  • 番外篇 | YOLOv5+DeepSort实现行人目标跟踪检测
  • 认识Sass
  • YOLOv9-Openvino和ONNXRuntime推理【CPU】
  • AIGC 架构:RAG (retrieval augumented generation) 应用可以使用 PostgreSQL 作为向量数据库组件吗?
  • leetcode:134.加油站
  • uniapp的微信小程序授权头像昵称(最新版)
  • Spring Boot到底是如何进行自动配置的?
  • 【王道数据结构】【chapter7查找】【P285t5】
  • 个人玩航拍,如何申请无人机空域?
  • ChatGPT带火的HBM是什么?
  • 10 款数据恢复软件功能和有效性对比(2024 年更新)
  • Python 与 pdfplumber:高效自动读取 PDF 的解决方案
  • Flutter 启动流程解析
  • 全量知识系统问题及SmartChat给出的答复 之4
  • Java架构师之路七、大数据:Hadoop、Spark、Hive、HBase、Kafka等
  • 图论基础(一)
  • 使用 React 和 MUI 创建多选 Checkbox 树组件
  • vue3里面使用el-image-vie出现图片预览导致页面卡顿停止加载问题