深入解析Linux虚拟化KVM-Qemu分析之中断虚拟化

本文详细阐述了ARMGICv2中断虚拟化的实现框架,包括VGIC的架构、虚拟中断的产生流程,以及物理设备、虚拟外设和vCPU间中断的处理方式。重点介绍了非VHE环境下,如何通过KVM和QEMU在Linux内核中进行中断虚拟化,涉及中断的产生、路由到vCPU的过程以及软件实现流程。
摘要由CSDN通过智能技术生成

说明:

  1. KVM版本:5.9.1
  2. QEMU版本:5.0.0
  3. 工具:Source Insight 3.5, Visio

1. 概述

本文会将ARM GICv2中断虚拟化的总体框架和流程讲清楚,这个曾经困扰我好几天的问题在被捋清的那一刻,让我有点每有会意,欣然忘食的感觉。

在讲述中断虚拟化之前,我们应该对中断的作用与处理流程有个大致的了解:

  • 中断是处理器用于异步处理外围设备请求的一种机制;
  • 外设通过硬件管脚连接在中断控制器上,并通过电信号向中断控制器发送请求;
  • 中断控制器将外设的中断请求路由到CPU上;
  • CPU(以ARM为例)进行模式切换(切换到IRQ/FIQ),保存Context后,根据外设的中断号去查找系统中已经注册好的Handler进行处理,处理完成后再将Context进行恢复,接着之前打断的执行流继续move on;
  • 中断的作用不局限于外设的处理,系统的调度,SMP核间交互等,都离不开中断;

中断虚拟化,将从中断信号产生到路由到vCPU的角度来展开,包含以下三种情况:

  1. 物理设备产生中断信号,路由到vCPU;
  2. 虚拟外设产生中断信号,路由到vCPU;
  3. Guest OS中CPU之间产生中断信号(IPI中断);

本文将围绕ARM-GICv2来描述,因此也不会涉及到MSI以及ITS等特性,带着问题出发吧。

 

 资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈

2. VGIC

  • 在讲中断虚拟化之前,有必要先讲一下ARMv8中Hypervisor的架构,因为涉及到不同的Exception Level的切换;
  • 在我阅读源代码时,根据代码去匹配某篇Paper中的理论时,出现了一些理解偏差,曾一度困扰了我好几天;

  • Non-VHE
  • Linux ARM架构的Hypervisor在引入时,采用的是左图中的系统架构,以便能充分利用Linux现有的机制,比如scheduler等;
  • KVM/ARM的实现采用了split模式,分成Highvisor和Lowvisor,这样可以充分利用ARM处理器不同模式的好处,比如,Highvisor可以利用Linux Kernel的现有机制,而Lowvisor又可以利用Hyp Mode的特权。此外,带来的好处还包含了不需要大量修改Linux内核的代码,这个在刚引入的时候是更容
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值