侧边栏壁纸
博主头像
蔚然小站博主等级

未来会有的,不要辜负了梦想

  • 累计撰写 39 篇文章
  • 累计创建 15 个标签
  • 累计收到 43 条评论

目 录CONTENT

文章目录

中断虚拟化:2.PIC虚拟化

皮蛋熊
2023-08-27 / 0 评论 / 0 点赞 / 79 阅读 / 2055 字
温馨提示:
本文最后更新于 2023-08-27,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

CPU轮询检查效率低,所以存在中断,正常CPU状态标志寄存器IF(interrupt flag)位为1,那么CPU会去检查是否有中断请求,并找到对应的中断服务程序并执行,完成后返回。

早期x86体系约定,0-31号中断留给处理器自己用,外设的中断从32号开始。

中断注入: 对于外部中断,CPU在每个指令周期结束后,会去检查INTR是否有中断请求。而在Guest模式的CPU,在VM-entry时候会检查VMCS的VM-entry interrupt-information字段。

Pasted image 20220720091927

VM-entry interrupt-information部分格式

Pasted image 20220720093858

中断注入是会引入中断延迟的,具体由下面两类情况。

  1. CPU处于Guest,处理中断就需要VM exit再VM entry。
  2. vCPU线程睡眠,比如Guest vCPU运行hlt指令时候,就会切换回Host模式,线程挂起。

针对情况一:当Guest CPU收到外部中断的时候会触发VM exit,由Host来处理这次中断,所以KVM可以向目标CPU发送一个IPI中断,触发目标CPU发生一次VM exit。 针对情况二:需要唤醒睡眠的vCPU线程,使其进入CPU就绪队列,准备接受调度。如果宿主系统是一个多处理器系统,那么还需要再向目标CPU发送一个”重新调度“的IPI中断,促使其尽快发生调度,加快被唤醒vCPU线程被调度,执行注入过程。

这里引入了一个kick,当有中断请求时,虚拟中断芯片将主动kick一下CPU,其手段就是IPI。

Pasted image 20220720110037

Pasted image 20220720110233

Pasted image 20220720110245

参考文献

  1. 《深度探索Linux系统虚拟化:原理与实现》 - 王柏生 & 谢广军
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区