当前位置: 首页 > news >正文

【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 的作用与关系

  1. PCIe Message 的作用
    PCI Express(PCIe)是一种高速串行总线,其中使用消息传递(Message)机制代替了传统并行总线中的引脚信号。例如,传统 PCI 总线使用专门的引脚传递中断请求(IRQ 信号),而 PCIe 则通过发送消息完成中断、错误报告等功能。
  • 主要用途:
    1. 中断通知 :用来代替传统中断引脚方式,比如 MSI (Message Signaled Interrupt)

    2. 系统错误报告 :例如热插拔事件、数据链路错误等,PCIe 协议定义了诸如 ERR_COR, ERR_FATAL 等错误消息。

    3. 电源管理 :通知设备的电源状态变化(例如进入低功耗模式)。

    4. 配置和控制 :例如在 Root Complex 和 Endpoint 之间交换消息。

  1. Message 和 MSI 的关系
    MSI(Message Signaled Interrupt)是 PCIe 中实现中断的一种机制,其作用是通过消息代替传统硬件信号(中断引脚)来通知 CPU 发生了中断。
  • 传统中断的劣势

    1. 中断引脚数量有限,不适合扩展。

    2. 在共享引脚的情况下,中断源需要额外的软件逻辑确定具体来源。

  • MSI 的优势

    1. 消除了中断引脚的物理限制,可以通过消息的形式支持更多中断源。

    2. 支持多个中断向量(MSI-X 可以支持多达 2048 个中断)。

    3. 提高了效率,特别是在多核系统中,可以将中断直接路由到特定的核。


MSI 的配置与寄存器

  1. MSI 配置步骤
    MSI 的配置是在设备的配置空间完成的,包括如下步骤:

  2. 启用 MSI 功能

  • 设置设备的配置空间中的 MSI Control 字段以启用 MSI。
  1. 设置中断向量
  • 为设备分配一个或多个中断向量,这些中断向量会映射到 CPU 的中断控制器。
  1. 设置消息地址与消息数据
  • Message Address:CPU 或中断控制器的地址,用于接收中断消息。

  • Message Data:与中断向量相关联的数据。

  1. 启用中断:
  • 配置完成后,设备可以生成 MSI 消息通知中断。
  1. 相关寄存器
    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 负责中断优先级管理、中断屏蔽、中断分发等功能。

  1. 工作流程
  2. PCIe 设备生成 MSI 消息
  • 包括 Message AddressMessage Data

  • Message Address 配置为 GICD 中对应的中断管理地址。

  1. GIC 解析 MSI 消息
  • GIC 使用 MSI 的 Message Data 解析出具体的中断 ID。
  1. 中断分发
  • GIC 将解析的中断分发到特定的 CPU。

  • 多核系统下,可以基于中断 ID 将中断发送到指定核。

  1. GIC 配置 MSI 示例
    以典型系统为例:
  • Message Address :PCIe MSI 地址配置为 GICD 的物理地址。

  • Message Data :设置为 GIC 的中断 ID。

  • 配置完成后,PCIe 中断通过 MSI 触发,最终由 GIC 接收并处理。


示例:MSI 在 ARM GIC 的实际应用

场景 :网络设备触发中断通知 CPU 处理数据包。

  1. PCIe 网络设备
  • 分配 MSI,中断向量为 32,对应 ARM GIC 的中断号。
  1. MSI 消息内容
  • Message Address:0xF400_0000(假设为 GIC 中 MSI 接收地址)。

  • Message Data:32。

  1. 系统行为
  • 网络设备检测到数据包到达,通过 PCIe 总线发送 MSI 消息。

  • GIC 收到 Message AddressMessage 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 密钥 首先&#xff0c…...

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…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...