[x86] IPI 学习

[x86] IPI 学习IPI 是 inter processorint 用于处理器间的通信 涉及软件自中断 中断转发和抢占式调度

IPI 介绍

ICR 常用于以下方面:

  • 处理器发送中断给另一个处理器;
  • 处理器将接收到的中断转发给其他处理器处理;
  • 产生一个中断给自己;
  • 产生特殊的 IPI 给其他处理器。 比如计算机启动过程中第一个启动的处理器 (BSP) 发送 start-up IPI (SIPI) 唤醒其他处理器。

根据英特尔的SDM,ICR 的结构如下图所示:
在这里插入图片描述
ICR 一共64位,除了发送状态字段 (Delivery Status) 为只读, 其余各位均可读写。软件通过修改各个位上的值,实现向系统中其他处理器发送中断的目的。
在 ICR 的各个字段中,
Vector 表示中断号,接收 IPI 的处理器根据中断号,从中断描述符表 IDT 中找到对应的中断处理程序并执行。
Delivery Mode 指定发送的 IPI 类型。
Destination Mode 指定接收中断的形式是物理模式还是逻辑模式。
Delivery Status 表示 IPI 的状态,表示 local APIC 已经完成发送 (Idle) , 或未完成发送 (Send Pending)。
Level 表示发送中断的电平设置。
Trigger Mode 表示中断为边沿触发还是电平触发。
Destination Shorthand 表示发送的中断目的地类型:No Shorthand,由 Destination Field 指定;Self,发送给自己;All Including Self,包括自己在内的所有处理器;All Excluding Self,除自己在内的其他所有处理器。
Destination Field 表示发送的中断目的地。若 Destination Mode 为 physical,则此处表示目标处理器物理地址,即 APIC ID;若 Destination Mode 为 logical,则此处表示目标处理器使用 DFR 和 LDR 设置的逻辑地址。

每当 ICR 的低32位被写入,local APIC 就会根据 ICR 的值生成一条 IPI 信息,并发送到总线上。system bus (Pentium 4 and Intel Xeon processors) or the APIC bus (P6 family and Pentium processors)。

IPIv

IPIv (IPI virtualization) 是 Intel CPU 虚拟化技术 (VT-x) 引入的一个新特性,通过在硬件层面上提供支持,增强处理器间中断的虚拟化性能。具体可参考Intel 向 linux 社区提交的 IPIv 补丁。

在硬件层面支持 IPI 虚拟化之前,guest 中的 vcpu 给目标 vcpu 发送 IPI 时,除了 self IPI 外都需要先触发 VM-exit,在 hyperviser 中完成中断的模拟,然后再触发 VM-entry 进入虚拟机,在目标 vcpu 上执行 IPI 处理程序。guest 和 hyperviser 之间的切换会带来一定的开销,影响 guest 的执行性能。IPIv 引入之后,guest 中的 IPI 均不会触发 VM-exit。

今天的文章 [x86] IPI 学习分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-25 07:11
下一篇 2024-12-25 07:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/96389.html