【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…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...