当前位置: 首页 > 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…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

uniapp中使用aixos 报错

问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...