【PCIe 总线及设备入门学习专栏 4.5 -- PCIe Message and PCIe MSI】
文章目录
- PCIe Message 与 MSI
- PCIe Message 和 MSI 的作用与关系
- MSI 的配置与寄存器
- MSI 和 ARM GIC 的关系
- 示例:MSI 在 ARM GIC 的实际应用
- 总结
PCIe Message 与 MSI
本文将介绍 PCIe message 的作用以及message 与 MSI 的关系,再介绍 MSI 如何配置以及MSI有哪些寄存器,及MSI 与 ARM 中的GIC的关系。

PCIe Message 和 MSI 的作用与关系
- PCIe Message 的作用
PCI Express(PCIe)是一种高速串行总线,其中使用消息传递(Message)机制代替了传统并行总线中的引脚信号。例如,传统 PCI 总线使用专门的引脚传递中断请求(IRQ 信号),而 PCIe 则通过发送消息完成中断、错误报告等功能。
- 主要用途:
-
中断通知 :用来代替传统中断引脚方式,比如
MSI (Message Signaled Interrupt)。 -
系统错误报告 :例如热插拔事件、数据链路错误等,PCIe 协议定义了诸如
ERR_COR,ERR_FATAL等错误消息。 -
电源管理 :通知设备的电源状态变化(例如进入低功耗模式)。
-
配置和控制 :例如在 Root Complex 和 Endpoint 之间交换消息。
-
- Message 和 MSI 的关系
MSI(Message Signaled Interrupt)是 PCIe 中实现中断的一种机制,其作用是通过消息代替传统硬件信号(中断引脚)来通知 CPU 发生了中断。
-
传统中断的劣势 :
-
中断引脚数量有限,不适合扩展。
-
在共享引脚的情况下,中断源需要额外的软件逻辑确定具体来源。
-
-
MSI 的优势 :
-
消除了中断引脚的物理限制,可以通过消息的形式支持更多中断源。
-
支持多个中断向量(MSI-X 可以支持多达 2048 个中断)。
-
提高了效率,特别是在多核系统中,可以将中断直接路由到特定的核。
-
MSI 的配置与寄存器
-
MSI 配置步骤
MSI 的配置是在设备的配置空间完成的,包括如下步骤: -
启用 MSI 功能 :
- 设置设备的配置空间中的
MSI Control字段以启用 MSI。
- 设置中断向量 :
- 为设备分配一个或多个中断向量,这些中断向量会映射到 CPU 的中断控制器。
- 设置消息地址与消息数据 :
-
Message Address:CPU 或中断控制器的地址,用于接收中断消息。 -
Message Data:与中断向量相关联的数据。
- 启用中断:
- 配置完成后,设备可以生成 MSI 消息通知中断。
- 相关寄存器
MSI 的相关寄存器位于 PCI 配置空间(Capability Structure)中,主要包括:
-
MSI Control 寄存器 :
-
是否启用 MSI。
-
是否支持多向量 MSI。
-
-
Message Address 寄存器 :
- 存储中断消息的目的地址,通常为 CPU 或中断控制器的地址。
-
Message Data 寄存器 :
- 包含中断向量值或其它与中断相关的信息。
-
MSI-X 表 (针对 MSI-X):
- 用于存储多个向量地址和数据。
MSI 和 ARM GIC 的关系
在 ARM 架构中,常用的中断控制器是 GIC (Generic Interrupt Controller),其主要作用是管理和分发中断。在 PCIe 系统中,MSI 由 PCIe 设备发送,最终需要被 GIC 处理。1. GIC 的作用
-
GIC 接收 PCIe 发出的 MSI。
-
将 MSI 转换为对应的中断 ID,分发到对应的 CPU。
-
GIC 负责中断优先级管理、中断屏蔽、中断分发等功能。
- 工作流程
- PCIe 设备生成 MSI 消息 :
-
包括
Message Address和Message Data。 -
Message Address配置为 GICD 中对应的中断管理地址。
- GIC 解析 MSI 消息 :
- GIC 使用 MSI 的
Message Data解析出具体的中断 ID。
- 中断分发 :
-
GIC 将解析的中断分发到特定的 CPU。
-
多核系统下,可以基于中断 ID 将中断发送到指定核。
- GIC 配置 MSI 示例
以典型系统为例:
-
Message Address :PCIe MSI 地址配置为 GICD 的物理地址。
-
Message Data :设置为 GIC 的中断 ID。
-
配置完成后,PCIe 中断通过 MSI 触发,最终由 GIC 接收并处理。
示例:MSI 在 ARM GIC 的实际应用
场景 :网络设备触发中断通知 CPU 处理数据包。
- PCIe 网络设备 :
- 分配 MSI,中断向量为 32,对应 ARM GIC 的中断号。
- MSI 消息内容 :
-
Message Address:0xF400_0000(假设为 GIC 中 MSI 接收地址)。 -
Message Data:32。
- 系统行为 :
-
网络设备检测到数据包到达,通过 PCIe 总线发送 MSI 消息。
-
GIC 收到
Message Address和Message Data,将其映射为中断 ID。 -
中断 ID 32 被分发到指定的 CPU 核处理。
通过上述流程,中断从 PCIe 设备传递到 CPU,实现了高效的中断通知。
总结
-
PCIe 消息 在 PCIe 中取代了传统硬件引脚信号,MSI 是其典型应用。
-
MSI 配置 涉及 Message Address 和 Message Data,存储在设备配置空间中。
-
MSI 与 GIC 的结合 使得 PCIe 设备与 ARM 架构协同工作,为高效的中断处理提供了支持。
推荐阅读:
https://aijishu.com/a/1060000000289702
相关文章:
【PCIe 总线及设备入门学习专栏 4.5 -- PCIe Message and PCIe MSI】
文章目录 PCIe Message 与 MSIPCIe Message 和 MSI 的作用与关系MSI 的配置与寄存器MSI 和 ARM GIC 的关系示例:MSI 在 ARM GIC 的实际应用总结 PCIe Message 与 MSI 本文将介绍 PCIe message 的作用以及message 与 MSI 的关系,再介绍 MSI 如何配置以及…...
Docker搭建MySQL
Docker搭建MySQL 准备工作 先准备配置目录和持久化目录,举个栗子:mkdir -p /opt/module/mysql/{conf,data,log}准备配置文件*.cnf,放到/opt/module/mysql/conf目录下。当然不准备也没事,容器中有个默认配置:/etc/mysql/conf.d/m…...
#C01L11P02. C01.L11.while循环.while循环和for循环的区别
唉,你们善良的王又来给你们发文章了!!! for循环一般应用于循环次数已知的情况; while循环一般应用于循环次数未知的情况; 在一般情况下,这两者是可以相互转化的。 举一个简单较适合用for循环…...
利用deepspeed在Trainer下面微调大模型
当模型参数越来越大的情况下,如果我们的GPU内存比较小,那么就没办法直接进行全参数微调,此时我们可以借助deepspeed来进行微调。 1、deepspeed的配置文件:deepspeed.json {"train_batch_size": 4,"train_micro_b…...
【spring】参数校验Validation
前言 在实际开发中,我们无法保证客户端传来的请求都是合法的。比如一些要求必传的参数没有传递,传来的参数长度不符合要求等,这种时候如果放任不管,继续执行后续业务逻辑,很有可能就会出现意想不到的bug。 有人可能会…...
基于PyQt5的UI界面开发——图像与视频的加载与显示
介绍 这里我们的主要目标是实现一个基于PyQt5和OpenCV的图像浏览和视频播放应用。用户可以选择本地的图像或视频文件夹,进行图像自动播放和图像切换以及视频播放和调用摄像头等操作,并且支持图像保存功能。项目的核心设计包括文件路径选择、图像或视频的…...
[python SQLAlchemy数据库操作入门]-16.CTE:简化你的复杂查询
哈喽,大家好,我是木头左! 在SQL的世界里,Common Table Expressions(公共表表达式),简称CTE,是一种强大的工具,它允许用户在单个查询中定义临时的结果集。这些结果集可以在整个查询中被多次引用,就像它们是数据库中的物理表一样。CTE不仅提供了一种组织和简化复杂查询…...
多分类的损失函数
在多分类任务中,常用的损失函数能够衡量模型输出的类别分布与目标类别之间的差异,帮助模型学习更准确的分类能力。以下是多分类任务中常用的损失函数: 1. 交叉熵损失(Cross-Entropy Loss) 公式: CrossEntropyLoss = − 1 N ∑ i =...
在WSL的系统中配置免密和GitHub传输数据(SSH)
在 WSL(Windows Subsystem for Linux)系统中配置免密与 GitHub 传输数据,主要包括设置 SSH 密钥对、将公钥添加到 GitHub 账户以及确保可以通过 WSL 正常使用这些密钥。以下是详细的步骤: 1. 检查现有 SSH 密钥 首先,…...
Python中元组(tuple)内置的数据类型
在Python中,元组(tuple)是一种内置的数据类型,用于存储不可变的有序元素集合。元组在很多方面与列表(list)相似,但它们之间存在一些关键的区别。以下是关于Python元组的详细解释: 定…...
chrome缓存机制以及验证缓存机制
一、Chrome 缓存机制 浏览器缓存机制旨在提高网页加载速度、减少服务器负载和节约带宽。Chrome 的缓存主要包括以下几种类型: 1. 强缓存 (Strong Cache) 无需向服务器发送请求即可使用缓存的资源。由 HTTP 响应头控制,包括: Expires&…...
医药进出口交易|基于SSM+vue的医药进出口交易系统的设计与实现(源码+数据库+文档)
医药进出口交易系统 目录 基于SSM+vue的医药进出口交易系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 5.1系统登录 5.2管理员功能模块 5.3仓储部门功能模块 5.4业务部门功能模块 5.5供应部门功能模块 5.6财务部功能模块 5.7客户功能模块 …...
爱快 IK-Q6000 WiFi6无线路由器 简单开箱评测和拆解
爱快(iKuai) IK-Q6000 WiFi6无线路由器 简单开箱评测和拆解 因为用的爱快软路由,所以就想着将AP全换成爱快的,方便管理,目前买了多款爱快的无线路由器当AP(IK-Q6000、IK-W35、IK-Q3600)&#x…...
时间敏感网络中全面分析与调度的模型驱动方法
论文:A Model-Driven Approach for the Comprehensive Analysis and Scheduling in Time-Sensitive Networks》 背景与动机 TSN 的发展与应用领域:自 2012 年起,IEEE 802.1 TSN 任务组致力于开发通信标准,增强 IEEE 802 网络&…...
统计颜色Count Color(POJ2777)题解
有一个长度为L厘米板,L是一个正整数,所以我们可以把它均匀地划分成L个部分,分别从左到右编号为1,2……L,每一个部分长度都为1厘米。现在我们必须给每个部分涂色,一个部分一种颜色,要求完成以下两…...
MySQL数据的增删改查(一)
目录 新增(create) 插入单条记录 插入多条记录 查询(retrieve) 查询所有列 查询特定列 查询字段为表达式 别名 去重 排序 按单列排序 按多列排序 使用表达式或别名排序 排序NULL值 条件查询 比较运算符 逻辑运算…...
国产文本编辑器EverEdit - 如何给小众语言开发大纲分析脚本
1 开发参考:小众语言如何开发大纲分析脚本 1.1 应用场景 在使用IDE进行代码开发时,代码中的变量、结构体、函数等,在大纲视图中都会显示出来,用户可以快速的了解当前文档的结构,以及快速跳转到函数、变量的声明位置。…...
【数据结构】线性数据结构——数组
1. 定义 数组是一种线性数据结构,由一组相同类型的元素组成,这些元素使用连续的内存空间存储。数组通过索引(下标)访问,每个元素的索引是固定的,从零开始递增。 2. 特点 顺序存储: 元素在内存…...
QT---------GUI程序设计基础
代码UI化设计(QT) 实例功能概述 假设我们要创建一个简单的计算器应用程序。该应用程序具有以下功能: 包含数字按钮(0-9)、操作符按钮(、-、*、/)、等于按钮()和清除按…...
2、Bert论文笔记
Bert论文 1、解决的问题2、预训练微调2.1预训练微调概念2.2深度双向2.3基于特征和微调(预训练下游策略) 3、模型架构4、输入/输出1.输入:2.输出:3.Learned Embeddings(学习嵌入)1. **Token Embedding**2. **Position Embedding**3…...
seo优化网络公司如何提高网站排名
SEO优化网络公司如何提高网站排名 在当今数字化时代,网站排名的高低直接关系到企业的曝光度和业务量。对于SEO优化网络公司来说,如何有效提升客户网站的排名是一项重要且复杂的任务。本文将从问题分析、原因说明、解决方法、注意事项和实用建议五个方面…...
如何永久保存网络小说?这款开源工具让你的阅读体验不再受限于平台
如何永久保存网络小说?这款开源工具让你的阅读体验不再受限于平台 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 核心痛点分析:数字阅读时代的内容失控危机 识别阅…...
BeesAndroid实战教程:如何在Nexus 6设备上搭建Android 7.0开发环境
BeesAndroid实战教程:如何在Nexus 6设备上搭建Android 7.0开发环境 【免费下载链接】BeesAndroid 项目地址: https://gitcode.com/gh_mirrors/be/BeesAndroid BeesAndroid是一款专为Android开发者打造的开源项目,通过本教程,你将快速…...
三步解决表情显示难题:用Noto Emoji告别跨平台显示困扰
三步解决表情显示难题:用Noto Emoji告别跨平台显示困扰 【免费下载链接】noto-emoji Noto Emoji fonts 项目地址: https://gitcode.com/gh_mirrors/no/noto-emoji 在日常沟通中,你是否遇到过这样的情况?发送的笑脸表情在自己手机上显示…...
利用Python脚本高效处理Sentinel2影像:从SAFE格式到GeoTIFF的批量转换
1. 为什么需要处理Sentinel2影像? Sentinel2卫星影像是目前最常用的免费遥感数据源之一,广泛应用于农业监测、环境评估、城市规划等领域。但原始数据下载后是以SAFE格式存储的,这种格式虽然保留了完整的元数据信息,但在实际使用中…...
STK实战:从星地/星间链路建模到数据高效提取的工程化路径
1. STK在卫星通信系统建模中的核心价值 第一次接触STK(Systems Tool Kit)时,我被它强大的太空环境仿真能力震撼到了。这款由AGI公司开发的软件,就像给工程师装上了"太空望远镜",能清晰看到每颗卫星的运行轨迹…...
Milvus向量库内存暴涨:踩坑实录与解决思路
研一升研二,时间还相当充裕。你现在的方向很对,继续把项目做深做透,同时拓展一下搜推广的知识面,明年找实习问题不大。现在大部分公司的LLM业务岗,说白了,干的还是SFT和RAG那点事,顶多加个Agent…...
SEO 查看哪些页面最重要
SEO查看哪些页面最重要:深度解析与实用建议 在当今数字营销的世界中,搜索引擎优化(SEO)无疑是每个网站运营者都必须关注的关键环节。为了提升网站在搜索引擎结果中的排名,了解哪些页面对SEO最重要是至关重要的。本文将…...
源码之家_最新建站源码_开源项目_成品源码一键部署
在互联网技术飞速发展的今天,网站建设已成为企业、个人展示形象、开展业务的重要窗口。然而,从零开始搭建一个功能完善、界面美观的网站,往往需要投入大量的时间和精力。对于开发者而言,寻找优质、可靠的源码资源,成为…...
3步构建安全可靠的用户脚本生态系统:Greasy Fork深度技术解析
3步构建安全可靠的用户脚本生态系统:Greasy Fork深度技术解析 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork Greasy Fork作为开源的用户脚本平台,基于Ruby on Rai…...
