PCIe中断之MSI和MSI-X的区别(详细)总结附图文快速掌握

2023-10-27

一、整体介绍

本文主要介绍MSI和MSI的基本概念和差异,通过图文的方式方便读者快速掌握,最后章节也简单介绍了INTx的基本概念。
MSI(Message Signaled Interrupts)是一种通过在内存中写入信息来产生中断的方式,其中内存地址由设备驱动程序和硬件设备协商确定。MSI与传统的中断线不同,它不需要单独的中断线,而是通过PCI总线进行通信。

MSI-X(Extended Message Signaled Interrupts)是在MSI的基础上扩展的一种中断方式,它允许设备使用多个独立的中断信号,从而提高了中断处理的效率。这对于那些需要高速响应的应用程序尤其有用,例如虚拟化或者高性能计算。

MSI/MSI-X机制的引入解决了传统Line-based Interrupt机制的种种限制,包括:
1、无需经过I/O APIC转发中断,直接通过PCI/PCIe Memory Write Transaction向CPU发送中断,效率更高
2、每个PCI Function可以支持分配多个中断向量,满足同一个设备有多个不同中断请求的需要当分配多个中断向量给同1个PCI Function时,提供按中断向量进行屏蔽的功能,更为灵活。

总的来说,PCIe总线引出MSI-X机制的主要目的是为了解决使用该机制不需要中断控制器分配给该设备的中断向量号连续所带来的问题,同时扩展PCIe设备使用中断向量的个数。然而,MSI-X需要更多的硬件资源,所以不是所有设备都能使用它。

二、MSI和MSI-X对比

主要区别如下表:

MSI MSI-X
中断向量数 32 2048
中断号约束 必须连续 可以随意分配
中断信息存放 capbility寄存器 MSI-X Table(bar空间)

2.1 中断向量连续

如果一个PCIe设备需要使用8个中断请求时,如果使用MSI机制时,Message Data的[2:0]字段可以为0b000~0b111,因此可以发送8种中断请求,但是这8种中断请求的Message Data字段必须连续。在许多中断控制器中,Message Data字段连续也意味着中断控制器需要为这个PCIe设备分配8个连续的中断向量号。

有时在一个中断控制器中,虽然具有8个以上的中断向量号,但是很难保证这些中断向量号是连续的。因此中断控制器将无法为这些PCIe设备分配足够的中断请求,此时该设备的“Multiple Message Enable”字段将小于“Multiple Message Capable”。

2.2 映射区域区别

产生MSI中断的内存映射区在PCIE设备的配置空间,而产生MSIX中断的内存映射区在PCIE设备的BAR空间;

2.3 MSI-X配置空间

请添加图片描述

2.3.1 MSI-X Capbility介绍

Message Control:用来打开/关闭MSI/MSI-X功能,表示PCIe设备是否能够使用该Entry提交中断请求, 类似MSI的mask位。
Message Address & Data: 用来指定MSI/MSI-X中断对应的Message Address和Message。
在这里插入图片描述

2.3.2 Capbility ID介绍

请添加图片描述

2.3.3 Message Control介绍

请添加图片描述

请添加图片描述

2.3.4 MSI-X Table介绍

请添加图片描述

1、Message Data介绍
请添加图片描述

Trigger Mode
中断触发方式控制寄存器:
2’b00: PCIe设备使用边沿触发方式申请中断
2’b10: PCIe设备使用低电平触发方式申请中断
2’b11: PCIe设备使用高电平触发方式申请中断

Vector
表示这个中断使用的中断向量,FSB Interrupt Message总线事务在提交中断请求的同时,也将中断向量提交给处理器,因此使用FSB Interrupt Meaasge总线事务时,处理器不需要使用中断响应周期通过读取中断控制器获取中断向量号。该方式的中断请求效率较高。

在x86处理器中,MSI机制使用的Message Data字段与MSI-X机制使用的Message Data字段相同。但是当一个PCIe设备支持多个MSI中断请求时,其Message Data字段必须是连续的,即其使用的vector字段是连续的,使用MSI-X机制有效的解决了该问题。

Delivery Mode
该字段标识着如何处理来自PCIe设备的中断请求

2、Message Address介绍
请添加图片描述

在x86处理器系统中,PCIe设备使用的Message Address字段仍保存PCI总线域的存储器地址,其格式为:

其中第31~20位存放FSB Interrupt存储器空间的基地址,其值为0xFEE。当PCIe设备对“0xFEEx_xxxx”这段“PCI域”的地址空间进行写操作时,MCH/ICH会首先进行“PCI总线域”到“存储器域”的地址转换,之后将这个写操作翻译为FSB总线的Interrupt Message总线事务,从而向CPU内核提交中断请求。

Destination ID
该字段保存目标CPU的ID号。

RH(Redirection Hint Indication)
该字段指示是否进行中断转发,当RH为0时,表示FSB Interrupt Message中断报文直接发向与Destination ID字段相同的CPU,为1时,将使能中断转发功能。

DM(Destination Mode)
该字段表示在传递优先权最低的中断请求时,Destination ID字段被翻译为Logical或者Physical APIC ID。

3、Vector Control
这个字段位于DWORD3,只使用了第0bit,作为vector的mask bit,若被置位,那么这个function将不能使用这个表项来发送MSI-X中断。然而,需要注意的是:如果其他表项也使用了相同的中断向量号,他们仍然能被用来发送中断消息。

2.3.5 MSI-X Pending Table(PBA)介绍

MSI-X中断机制还使用了独立的Pending Table表,该表用来存放与每一个中断向量对应的Pending位。这个Pending位的定义与MSI Capability寄存器的Pending位类似。MSI-X Table和Pending Table存放在PCIe设备的BAR空间中。MSI-X机制必须支持这个Pending Table,而MSI机制的Pending Bits字段是可选的。
请添加图片描述

三、MSI 处理过程

3.1 Message处理

根据PCIe规范的定义,MSI/MSI-X中断请求发生时,PCIe设备会实际产生1个Memory Write Transaction。它对应的数据封包为Memory Write类型的Trasaction Layer Packet(TLP),其格式如下图所示(对MSI-X也同样适用)。其中目标Memory Address称为“Message Address”,要写入该内存地址的数据称为“Message Data”。这两个字段都来自MSI/MSI-X Capability Structure中的设定,系统软件在Enable并初始化MSI/MSI-X的过程中必须要预先设置好它们。

请添加图片描述

3.2 详细过程

1、PCIe 设备在发送 MSI / MSI⁃X 中断请求之前, 系统软件需要合理设置 PCIe 设备 MSI / MSI⁃ X Capability 寄存器, 使 Message Address 寄存器的值为 0xFEExx00y, 同时合理地设置 Message Data 寄存器 Vector 字段。其中 xx 表示 APIC ID, 而 y 为 RH + DM。
2、PCIe 设备提交 MSI / MSI⁃X 中断请求时, 需要向 0xFEExx00y 地址写 Message Data 寄存器 中包含的数据, 并以存储器写 TLP 的形式发送到 RC。
3、如果 ICH 收到这个存储器写 TLP 时, 将通过 DMI 接口将这个 TLP 提交到 MCH。 MCH 收到这个 TLP 后, 发现这个 TLP 的目的地址在 FSB Interrupts 存储器空间中, 则将 PCIe 总线的存储器写请求转换为 Interrupt Message 总 线事务, 并在 FSB 总线上广播。
4、FSB 总线上的 CPU, 根据 APIC ID 信息, 选择是否接收这个 Interrupt Message 总线事务, 并进入中断状态, 之后该 CPU将直接从这个总线事务中获得中断向量号, 执行相应的中断服务例程, 而不需要从APIC中断控制器获得中断向量。

请添加图片描述

四、MSI⁃X 中断处理请求过程

PCIe 设备发出 MSI⁃X 中断请求的方法与发出MSI中断请求的方法类似, 都是向Message Address所在的地址写Message Data字段包含的数据。 只是MSI⁃X中断机制为了支持更多的 中断请求, 在 MSI⁃X Capablity结构中存放了一个指向一组Message Address和Message Data字段的指针, 从而一个PCIe设备可以支持的MSI⁃X中断请求数目大于 32 个, 而且并不要求 中断向量号连续。 MSI⁃X 机制使用的这组Message Address和Message Data字段存放在 PCIe 设备的BAR空间中, 而不是在 PCIe 设备的配置空间中, 从而可以由用户决定使用 MSI⁃X中断请求的数目。
x86处理器使用FSB的Interrupt Message总线事务处理 PCIe 设备的MSI / MSI⁃X中断请求。

五、INTx中断介绍

PCI总线使用INTA#、INTB#、INTC#和INTD#信号向处理器发出中断请求。这些中断请求信号为低电平有效,并与处理器的中断控制器连接。在PCI体系结构中,这些中断信号属于边带信号(Sideband Signals),PCI总线规范并没有明确规定在一个处理器系统中如何使用这些信号,因为这些信号对于PCI总线是可选信号。所谓边带信号是指这些信号在PCI总线中是可选信号,而且只能在一个处理器系统的内部使用,并不能离开这个处理器环境。

5.1 PCI INTx中断流程

一个简单的PCI总线INTx中断实现流程,如下图所示(单核CPU)。
1、首先,PCI设备通过INTx边带信号产生中断请求,经过中断控制器(Interrupt Controller,PIC)后,转换为INTR信号,并直接发送至CPU;
2、CPU收到INTR信号置位后,意识到了中断请求的发生,但是此时并不知道是什么中断请求。于是通过一个特殊的指令来查询中断请求信息,该过程一般被称为中断应答(Interrupt Acknowledge);
3、该特殊指令被发送至PIC后,PIC会返回一个8bits的中断向量(Interrupt Vector)值给CPU。该中断向量值与其发送的INTR请求是对应的;
4、CPU收到来自PIC的中断向量值后,会去其Memory中的中断向量表(Interrupt Table)中查找对应的中断服务程序(Interrupt Service Routines,ISR)在Memory的位置;
5、然后CPU读取ISR程序,进而处理该中断。

请添加图片描述

六、其他相关链接

1、软中断过程总结

2、中断机制详细总结

3、Linux下中断机制之tasklet执行过程总结

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PCIe中断之MSI和MSI-X的区别(详细)总结附图文快速掌握 的相关文章

  • 普冉32位单片机 PY32C642,M0+内核,1.7 V ~ 5.5 V宽工作电压

    PY32C642 单片机采用高性能的 32 位 ARM Cortex M0 内核 宽电压工作范围 嵌入 24Kbytes Flash 和 3 Kbytes SRAM 存储器 最高工作频率 24 MHz 包含多种不同封装类型产品 工作温度范围
  • 如何防护零日攻击

    零日攻击是什么 零日攻击 也称为零时差攻击 通常是指利用还没有被补丁的安全漏洞进行的攻击 这些漏洞在被发现后 由于各种原因 软件供应商未能及时发布补丁 使得黑客有机会利用这些漏洞进行攻击 零日攻击通常由技术高超的黑客发起 他们在对目标系统或
  • 八路视频光端机技术导论:多通道视频传输的高效解决方案

    随着光通信技术的快速发展 八路视频光端机 已成为多通道视频传输的有效解决方案 本文将探讨该技术的原理 优势及应用前景 为光通信行业的技术人员和研究学者提供参考 技术原理 八路视频光端机基于 波分复用 WDM 技术 通过一个光纤同时传输多路视
  • 分辨公网IP和内网IP的方法

    公网IP一般就是对外的访问地址 内网IP就是对内的访问地址 两者的使用范围是不一样的 那如果区分客户网络的IP地址是公网IP地址还是内网IP地址呢 公网IP的地址范围是很广泛的 我们可以先了解下内网IP 因为内网IP的地址段相对是局限的 一
  • 世微 AP2402降压恒流驱动IC LED刹车灯方案 全亮 半亮 瀑闪

    AP2402 是一款 PWM 工作模式 高效 率 外围简单 内置功率管 适用于 5 100V 输入的高精度降压 LED 恒流驱动芯片 输 出功率可达 15W 电流 1 5A AP2402 可实现三段功能切换 通过 MODE1 2 3 切换三
  • 世微AP9196 DC-DC 升压恒流电源管理芯 电解水驱动电源应用线路

    AP9196 是一系列外围电路简洁的宽调光比升压调光恒流驱动器 适用于 3 40V 输入电压范围的 LED照明领域 AP9196 采用我司专利算法 可以实现高精度的恒流效果 输出电流恒流精度 3 电压工作范围为5 40V 可以轻松满足锂电池
  • 一个网工(网络工程师)七年的职业血泪史....

    前言 一个工作了七年的老网工 上家公司待了五年 现在这家公司也快三年了 分享一些我自己学习网络安全路上的一些经历 也算是帮大家少走些弯路 一 如何学习网络安全 1 不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全 一般
  • 网络基础面试题(二)

    11 什么是网桥 防火墙的端口防护是指什么 网桥是一种网络设备 用于连接两个或多个局域网 LAN 并转发数据包 它能够根据MAC地址来识别和转发数据 提高网络的传输效率和安全性 防火墙的端口防护是指对防火墙上的各个端口进行保护和限制 只允许
  • Freertos低功耗管理

    空闲任务中的低功耗Tickless处理 在整个系统运行得过程中 其中大部分时间都是在执行空闲任务的 空闲任务之所以执行 因为在系统中的其他任务处于阻塞或者被挂起时才会执行 因此可以将空闲任务的执行时间转换成低功耗模式 在其他任务解除阻塞而准
  • 网络空间安全女生就业,怎么学?

    我实验室的学长们基本都是以红队和复现为主 如果学校好点可能还有更多的选择 如果想在这个方向深入下去 推荐流程是先打两年CTF 把大概的技术方向摸一摸 大一的话 如果学校还不错 那就优先建议打好基础 包括C语言 Python一类 建议把CTF
  • 太阳诱电树立超高端产品概念,与电子产业同步发展

    无论是传统的手机 家电 安防 汽车 医疗 交通 建筑的智能化转型 还是从物联网 工业4 0 智能硬件 互联网 一场基于大数据 互联网 应用软件等技术的硬件复兴热潮正在席卷全球 没有新东西出来 每家都一样 这一长期以来的争议一直困扰着CEAT
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 「网络安全渗透」如果你还不懂CSRF?这一篇让你彻底掌握

    1 什么是 CSRF 面试的时候的著名问题 谈一谈你对 CSRF 与 SSRF 区别的看法 这个问题 如果我们用非常通俗的语言讲的话 CSRF 更像是钓鱼的举动 是用户攻击用户的 而对于 SSRF 来说 是由服务器发出请求 用户 日 服务器
  • 【网安神器篇】——WPScan漏洞扫描工具

    目录 一 Wordpress简介 二 WPScan介绍 三 安装 四 获取token 1 注册账号 2 拿到token 五 使用教程 1 常用选项 2 组合命令 1 模糊扫描 2 指定扫描用户 3 插件漏洞扫描 4 主题漏洞扫描 5 Tim
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 揭秘网络世界的幕后密码——Wireshark网络协议分析软件

    在我们日常生活中 计算机和互联网已经成为不可或缺的一部分 然而 很少有人真正了解网络背后复杂的工作原理和通信协议 幸运的是 有一款强大而实用的软件 Wireshark 可以帮助我们深入了解网络世界的幕后密码 Wireshark是一款免费的网
  • 网络安全基础知识面试题库

    1 基于路由器的攻击手段 1 1 源IP地址欺骗式攻击 入侵者从外部传输一个伪装成来自内部主机的数据包 数据包的IP是 内网的合法IP 对策 丢弃所有来自路由器外端口 却使用内部源地址的数据包 1 2 源路由攻击 入侵者让数据包循着一个不可
  • 2023下半年软考「单独划线」合格标准公布

    中国计算机技术职业资格网发布了 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告 2023下半年软考单独划线地区合格标准各科目均为42分 01 官方通告 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告
  • Intel NVMe 驱动器扇区大小不是 4096 的 xfs 文件系统导致性能下降

    我正在 Linux Ubuntu 14 04 上使用 NVMe 卡 我发现 当使用默认扇区大小 512 的 xfs 文件系统进行格式化时 Intel NVMe 卡的性能会出现一些下降 或任何其他小于 4096 的扇区大小 在实验中 我使用默
  • 使用 mmap 访问 PCI-e 内存空间

    我在 Freescale MPC8308 处理器 基于 PowerPC 架构 上使用 PCI e 端口 在尝试使用它时遇到一些问题 端点 PCI e 设备的内存空间等于 256 MB 我可以使用 pciutils 包轻松读取和写入端点设备的

随机推荐

  • hive截取字符串substr和substring的用法

    第一种用法 substr string A int start 和 substring string A int start 用法一样 功效 返回字符串A从下标start位置到结尾的字符串 第二种用法 substr string A int
  • “最强”博士论文答辩阵容:6位院士,副院长任答辩秘书!

    点击 凹凸域 马上关注 更多内容 请置顶或星标 十二月份前后 是不少研究生毕业答辩的时间段 在社交媒体上 关于论文答辩的热度也逐渐上升 与此同时 也有网友注意到一些答辩委员会的阵容非常强大 比如 就有微博用户表示 其导师请了足以给博士生论文
  • layui table的实现以及详细解释

    老规矩先看效果 这里用的主要是layui 的弹框和table数据表格 第一 引入的文件 百度网盘地址 https pan baidu com s 1neZbcX8IieMgiBdcVPhO1g 提取码 rqdc 改成本地路径 这里也可以用l
  • 从 Vision 到 Language 再到 Action,万字漫谈三年跨域信息融合研究

    本文作者为阿德莱德大学助理教授吴琦 他在为雷锋网 AI 科技评论投递的独家稿件中回顾了他从跨领域图像识别到 Vision to Language 相关的研究思路 如今正将研究领域延伸到与 Action 相关的工作 雷锋网 AI 科技评论对文
  • 6.63 猜数字之生成随机数

    1 生成 m n 的随机数 m n 的元素个数为 n m 1 若利用模进行 n m 1 运算 其结果为 0 n m 此时左右两边同加 m 其结果为 m n void TestRand 生成 m n 的随机数 rand n m 1 m sra
  • Django图书商城系统实战开发 - 实现个人中心管理

    Django图书商城系统实战开发 实现个人中心管理 介绍 在本项目中 我们已经实现了登录注册 商品详情查看 购物车购买 个人订单管理 评价功能 接下来 我们将完成个人中心管理的模块 包括个人密码修改 个人地址管理和注销功能 本文将详细介绍如
  • I2C总结(单主机和多主机)

    I2C在使用过程中单个主机是不论是硬件I2C还是硬件I2C都不太难 理解好时序很容易实现 还有就是很多人认为硬件I2C有很多缺点 其实这是谬论吧 硬件I2C在稳定性上胜过软件I2C 而且不占用MCU时间 可以实现I2C中断 如果系统有硬件I
  • Java开发快速上手!3分钟就能完成的Redis主从复制搭建,完整PDF

    前言 高并发 几乎是每个程序员都想拥有的经验 原因很简单 随着流量变大 会遇到各种各样的技术问题 比如接口响应超时 CPU load升高 GC频繁 死锁 大数据量存储等等 这些问题能推动我们在技术深度上不断精进 我们知道 高并发代表着大流量
  • 【Flutter 3-1】Flutter手把手教程UI布局和Widget——底部导航栏BottomNavigationBar使用

    作者 弗拉德 来源 弗拉德 公众号 fulade me BottomNavigationBar BottomNavigationBar 和 BottomNavigationBarItem 配合来共同展示Flutter里面的底部状态栏 底部状
  • 敏捷开发之Scrum扫盲篇

    转载至 http www cnblogs com taven archive 2010 10 17 1853386 html 现在敏捷开发是越来越火了 人人都在谈敏捷 人人都在学习Scrum和XP 为了不落后他人 于是我也开始学习Scrum
  • kerberos 术语和认证流程介绍

    重要术语 1 KDC 全称 key distributed center 作用 整个安全认证过程的票据生成管理服务 其中包含两个服务 AS和TGS 2 AS 全称 authentication service 作用 为client生成TGT
  • 操作系统的文件结构

    文件的 逻辑结构 主要有 1 连续结构 2 多重结构 3 转置结构 4 顺序结构 文件的 物理存储 主要有 1 顺序结构 2 链接结构 3 索引结构 文件的 目录结构 主要有 1 一级目录结构 2 二级目录结构 3 树形结构 4 无环图
  • Springboot定时任务

    下文为 Scheduled的使用方法 1 简介 Scheduled支持三种部署方式 fixedRate fixedRateString 上一次执行开始后 n秒后再次执 fixedDelay fixedDelayString 上一次执行完毕后
  • 舵机的三条线分别代表什么

    橙色信号线 红色正极 棕褐色负极
  • @RequestParam和@PathVariable的用法与区别

    SpringBoot PathVariable URL变量 Web应用中的URL通常不是一成不变的 例如微博两个不同用户的个人主页对应两个不同的URL http weibo com user1和http weibo com user2 我们
  • 工厂(factory)模式

    转自 http www cnblogs com hegezhou hot archive 2010 11 30 1892227 html 一 开篇 一个多月没有写文章了 一方面是由于家庭的原因 还有一方面是因为工作上的原因 所以在这里给大家
  • 使用hutool库,对excel进行一些导出、导入操作

    所用到的各种类 依赖的话百度一下吧 最后再给上全部代码 import cn hutool core collection CollUtil import cn hutool core io IoUtil import cn hutool p
  • Struts 2 标签

    原文 https www mkyong com struts2 struts 2 shidden hidden value example 在struts2中可以使用
  • 调gensim库,word2vec模型的保存和加载

    一 模型的保存 模型保存可以有很多种格式 根据格式的不同可以分为2种 一种是保存为 model的文件 一种是非 model文件的保存 我常用的保存格式是 model和 vector直接上代码和结果 1 保存为model文件 数据的读入 fi
  • PCIe中断之MSI和MSI-X的区别(详细)总结附图文快速掌握

    目录 一 整体介绍 二 MSI和MSI X对比 2 1 中断向量连续 2 2 映射区域区别 2 3 MSI X配置空间 2 3 1 MSI X Capbility介绍 2 3 2 Capbility ID介绍 2 3 3 Message C