IPI 介绍

IPI, inter-processor interrupt, 处理器间中断。其本质也是一种中断,处理器可通过 IPI 机制向系统总线上的另一个或一组处理器发送中断请求,用于软件自中断、中断转发或抢占式调度 (software self-interrupts, interrupt forwarding, or preemptive scheduling) 。
参与产生 IPI 的主要寄存器是 local APIC 中的中断控制寄存器 (ICR, interrupt command register)。

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 学习相关推荐

  1. AM335X的汇编语言与c语言,X86汇编语言学习手记 -- 汇编和C协同

    X86汇编语言学习手记(3) 2004年12月 在X86汇编语言学习手记(1)(2)中,可以看到栈(Stack)作为进程执行过程中数据的临时存储区域,通常包含如下几类数据: 局部变量 函数调用的返回地 ...

  2. linux平台学x86汇编语言学习集合帖

    linux平台学x86汇编语言学习集合帖 linux平台学x86汇编(一):https://blog.csdn.net/shallnet/article/details/45543237 linux平 ...

  3. X86汇编语言学习手记(1)

    X86汇编语言学习手记(1) 作者: Badcoffee Email: blog.oliver@gmail.com 2004年10月 原文出处: http://blog.csdn.net/yayong ...

  4. x86架构学习笔记实模式

    8086是Inter公司的第一款16微处理器,诞生于1978年,8086在市场上获得了巨大成功,所以后期芯片都兼容它. 8086有8个16位通用寄存器 AX,BX,CX,DX,SI,DI,BP,SP其 ...

  5. c汇编语言程序框架培训,[010][x86汇编语言]学习用户程序的编写(c08.asm)

    源程序来源 加载程序 c08_mbr.asm 用户源程序:增加注释 ; ;文件名:c08-2.asm ;文件说明:用户程序 ;创建日期:13:08 2018/5/23 ;--------------- ...

  6. X86汇编学习小结----cmp 完整版本

    生成汇编代码 比如,一个简单的函数: // hello.c void func(){} 如何得到相应的汇编代码呢? gcc -S hello.c hello.s clang -S hello.c he ...

  7. x86架构学习内存管理的单元

    在基于操作系统编写程序的时候基本不需要管理程序的运行地址,而且同一个程序,在系统中运行几个实例的时候,这几个实例的内存都是一样的,这是因为他们都运行在虚拟内存上,x86虚拟内存管理比较简单,这里从分页 ...

  8. 用DOS-BOX搭建x86汇编语言学习环境

    在Win xp/Win 7环境下,有MS DOS方式(同时按Win键和R键打开窗口,输入cmd然后回车即可打开DOS),可以运行DOS程序,但在Win8/WIN10中,DOS命令不支持了. 一个简便的 ...

  9. 搭建x86汇编语言学习环境

    设计汇编语言的教学方案,决定就从8086汇编开始. 学汇编,关注对系统底层的理解,指令太多,初学者伤不起.面对一个复杂的系统,教学中常需要设计一个简化的教学模型,抽取出其中的核心,以此得门而入. 高龄 ...

最新文章

  1. [转载]Flash P2P 文件共享基础教程
  2. Spring Data Solr教程:配置
  3. Symbol MC1000 扫描 冲突问题 把下面文件做成scanwedge.reg的注册表文件,放在Application重起
  4. S​D​I​与​A​S​I 接口详解介绍
  5. POJ2976:Dropping tests——题解
  6. Python列表中数据插入数据库
  7. 从IBM的计划中分析出中国重新相当然的错误选择吗
  8. 基于OptiSystem的光接收机的设计和仿真
  9. 在linux中用高斯09优化分子结构,高斯09的优化 - 量子化学 - Gaussian - 小木虫论坛-学术科研互动平台...
  10. 最优化理论与凸优化到底是干嘛的?
  11. leapftp,leapftp怎么上传文件
  12. Linux下安装调试MQTT Mosquitto
  13. 帝国cms灵动标签调用标题图片没有图片时让其显示默认图片的方法
  14. 一刀工具箱 - 成语查询工具
  15. Pinbox 一款极简主义风格的网络收藏夹
  16. usrp b210 参数记录
  17. 对接天猫接口之如何授权订阅消息?包含天猫端授权和服务商端授权taobao.tmc.user.permit
  18. 我的Redis集群搭建之路
  19. Autoleaders-可视化pyecharts
  20. flush privileges 什么意思?

热门文章

  1. TextRank中文,英文关键词提取
  2. Python_matplotlib散点图、条形图、直方图笔记
  3. Java面试集锦:面试官只问一个问题,30几人集体懵圈
  4. A*与JPS算法的背景和实现
  5. 关于web 服务打印
  6. seata 分布式解决方案:
  7. mysql添加数据语句怎么写
  8. 江苏事业单位计算机岗复习备考经验(2023年)
  9. aws服务器_AWS无服务器应用程序镜头—摘要
  10. AI学习_无监督学习(编解码器)_图像分割_Unet/U2net