PCIe协议之-TLP路由基础
✨前言:
在PCI Express (PCIe) 技术中,数据包的路由方式对于确保信息能够高效、准确地传送至目标设备至关重要。PCIe定义了几种路由方式,主要有以下几种。
🌟地址路由(Address Based Routing)
这是最基本的路由方式,PCIe设备利用目的地址信息来决定数据包的路由路径。目的地址通常包括目标设备的总线号、设备号和功能号。在经过每一个交换节点时,基于这些信息来决定数据包是向下一个交换节点转发,还是到达了最终目标。
🌟ID路由(ID Based Routing)
在这种路由方式中,每个PCIe设备或端点都有一个唯一的ID,这个ID在数据包中用于识别目标设备。这种方式常用于结束点到结束点的直接信号传输,在多点传输场景下,尤其是在那些具有复杂拓扑结构的系统中,ID路由可以非常有效。
🌟隐式路由(Implicit Routing)
这种路由方式主要用于处理某些特定类型的数据包,如功率管理事件或热管理事件。这些数据包不需要明确的目标地址,因为它们通常由系统中的所有设备或者由特定处理这类事件的设备处理。隐式路由依赖于系统硬件和固件的内建规则来正确地处理和转发这些数据包。
具体采用哪一种路由方式是由TLP的类型所决定的,如下表所示:
📌注:AtomicOp是PCIe Spec V2.1新增的内容,有兴趣的可以自行阅读V2.1的相关内容。
📌注:一般情况下,Message都是使用模糊路由(Implicitly Routing)的,但是也有PCIe设备厂商自定义的Message会使用地址路由或者ID路由。
可能有的人要有疑惑了,既然Message可以使用地址路由或者ID路由,为什么还要单独搞出来一个模糊路由呢?原因很简单,使用模糊路由可以广播Message到每一个设备,采用其他的路由方式必须明确指定是哪一个设备。
那么PCIe中是如何来判断TLP的类型的呢?又是如何判断其为Request还是Completion的呢?实际上是通过TLP Header的Format和Type部分来确定的,如下图所示:
在PCI Express (PCIe) 架构中,事务层数据包(Transaction Layer Packets, TLPs)是数据通信的基本单位。TLPs用于在设备间传输数据、内存读写请求以及控制信息。TLP的类型、是否为请求(Request)还是完成(Completion)报文等,都通过TLP的头部信息来识别。
⭐️TLP头部信息
TLP头部包含了多个字段,其中一些关键字段用于指示TLP的类型以及它是请求还是完成报文:
格式(Format):指示TLP头部的长度和布局,不同类型的TLPs(如内存读/写、I/O读/写、配置读/写等)会使用不同的头部格式。
类型(Type):这是一个关键字段,它直接指示了TLP是什么类型的数据包。例如,内存读请求、内存写请求、I/O读写请求、配置读写请求或者是完成报文(用于响应之前的某个请求)。
请求者ID(Requester ID):在请求TLPs中,这个字段指示了发起请求的设备。 目的ID(Destination ID):在完成TLPs中,这个字段用于指示响应应当发送到哪个设备。
⭐️区分请求和完成
通过类型(Type)字段区分:TLP头部中的类型字段是区分TLP是请求还是完成报文的关键依据。例如,内存读请求和内存写请求被明确标记为请求类型,而完成报文则有其特定的标识符来指明是作为之前某个请求的响应。
格式字段辅助判断:虽然格式字段主要描述的是头部的大小和布局,但通过它与类型字段的组合,可以更确切地识别TLP的具体类型和性质。
下面就跟着我来详细了解一下这三种路由
✨一、ID Routing
ID 路由(ID Routing)有的时候也被称为BDF路由,即采用Bus Number、Device Number和Function Number来确定目标设备的位置。这是一种兼容PCI和PCI-X总线协议的路由方式,主要用于配置请求(Configuration Request)的路由,在PCIe总线中,其还可以被用于Completion和Message的路由。
TLP的Header有3DW的和4DW的,其中4DW的Header一般只用于Message中。使用ID路由的TLP Header以下两张图所示,第一个为3DW Header,第二个为4DW Header:
对于Endpoint来说,其只需要检查TLP Header中的BDF是否与自己的BDF一致,如果一致,则认为是发送给自己的,否则便会忽略该TLP。
📌注:采用ID路由的TLP Header中并未包含Requester的ID(BDF),那么Completer怎么确定Requester的位置呢?实际上这个问题并不难回答,因为ID路由主要用于配置请求和Completion,偶尔也用于一些厂商自定义的Message。首先,配置请求的Requester只能是Root,所以不需要确定其位置;再之,Completion用于对其他路由方式的回应,如地址路由中包含了Requester的BDF;最后,Message是Posted型的,即其根本不需要Completion,自然也就不需要Requester的BDF了。
📌注:实际上PCIe是一种点对点(Point-to-Point)的通信方式,即每个链路只能连接一个设备,因此大部分情况下使用5bit的空间来描述Device Number完全是多余的。为此,PCIe Spec提出了ARI格式,这里暂时不详细介绍了,有兴趣的可以自行阅读PCIe Spec的相关内容。
对于Switch来说,则需要根据TLP Header中的BDF来判断,这个TLP是给自己的还是给自己下属的其他设备的。如下图所示:
🌟请求者ID的作用
请求者ID(Requester ID)是一个重要字段,用于标识发起TLP请求的设备。在PCIe中,每个设备拥有一个唯一的ID,称为Bus/Device/Function(BDF)编号。这个ID确保了即使在复杂的系统拓扑中,完成者也能够确定并发送响应到正确的请求者。
🌟TLP中的请求者ID
对于请求TLP,无论是用于读操作还是写操作,头部中都会包含请求者ID字段。这个字段确保了,当完成者完成操作并需要发回完成(Completion)TLP时,知道将响应发送至何处。
对于完成TLP,头部包含的是完成者ID(Completer ID),这是因为响应需要标识出是哪个设备完成了操作。同时,完成TLP还包含了一个标签(TAG)字段,这个标签在请求时由请求者生成,并由完成者在生成完成TLP时复制过去,这样请求者就可以匹配响应到它原始的请求。
✨二、Address Routing
地址路由(Address Routing)的地址包括IO和Memory。对于Memory请求来说,32bit的地址使用3DW的Header,64bit的地址使用4DW的Header。而IO请求则只能使用32bit的地址,即只能使用3DW的Header。
注:再次强调,IO请求是为了兼容早期的PCI设备的,在新的PCIe设备中禁止使用。
3DW和4DW的TLP Header分别如以下两张图所示:
当Endpoint接收到采用地址路由的TLP时,其会根据该TLP Header中的地址信息和自己的配置空间中的BAR寄存器来判断这个TLP是不是自己的。如下图所示:
Switch的地址路由机制如下图所示:
✨三、Implicit Routing
模糊路由(Implicit Routing,又译为隐式路由)只能用于Message的路由。PCIe总线相对于PCI总线的一大改进便是消除了大量的边带信号,这正是通过Message的机制来实现的。
PCIe定义的Message主要有以下几种类型:
1.Power Management(电源管理): 这类消息用于管理设备的电源状态,比如将设备置于不同的睡眠状态(L1, L2等),或者唤醒设备。这对于节能和热管理非常关键。
2.INTx Legacy Interrupt Signaling(INTx传统中断信号): 尽管PCIe设备推荐使用基于消息的中断(MSI或MSI-X),但为了向后兼容,PCIe也支持通过特殊消息来模拟传统的PCI中断线(INTA,
INTB, INTC, INTD)。
3.Error Signaling(错误信号): PCIe设备和交换机可以通过发送特定的错误消息来报告诸如不可纠正错误、可纠正错误等问题。这些消息对于确保系统稳定运行和及时诊断故障至关重要。
4.Locked Transaction Support(锁定事务支持): 用于支持特定类型的原子操作,在确保数据一致性和事务的原子性方面非常重要。
5.Hot Plug Signaling(热插拔信号): 这类消息支持系统动态地检测和配置新增或移除的设备,比如在不需要关闭电源的情况下添加或移除扩展卡。
6.Vendor‐Specific Signaling(厂商特定信号): 这使得厂商可以定义自己特定的消息类型进行通信和控制,为设备制造商提供了设计灵活性。
7.Slot Power Limit Settings(插槽功率限制设置): 用于传递有关插槽可提供给插入设备的最大功率限制的信息,有助于电源管理和避免过载。
所有采用模糊路由的TLP的Header都是4DW的,具体如下图所示:
其中Type决定了模糊路由的类型,具体如下图所示:
000b: 路由到RC
001b:使用地址路由
010b: 使用ID路由
011b:来自RC的广播报文
100b:本地消息,在接收端结束(legacy中断消息使用这种报恩格式,传递来自PCI总线的中断报文)。
101b:用于PCIe电源管理(PME_TO_Ack报文使用)
110b-111b:保留字段
当一个Endpoint收到一个Message TLP,检查TLP Header,如果是RC的广播Message(011b)或者该Message终结于它(100b),它就接受该Message。当一个Switch收到一个Message TLP,检查TLP Header,如果是RC的广播Message(011b),则往它每个下游端口复制该Message然后转发。如果该Message终结于它(100b),则接受该TLP。如果下游端口收到发给RC的Message,则往上游端口转发。
相关文章:
PCIe协议之-TLP路由基础
✨前言: 在PCI Express (PCIe) 技术中,数据包的路由方式对于确保信息能够高效、准确地传送至目标设备至关重要。PCIe定义了几种路由方式,主要有以下几种。 🌟地址路由(Address Based Routing) 这是最基本…...
inline内联函数-虚函数(virtual)可以是内联函数(inline)吗?
目录标题 inline内联函数特征:使用:编译器对inline函数的处理步骤优点:缺点: 虚函数(virtual)可以是内联函数(inline)吗?特征:使用: inline内联函…...
Spring Boot | Spring Boot 消息管理 ( 消息中间件 ) 、RabbitMQ“消息中间件“
目录: 一、"消息服务" 概述 :1.1 为什么要使用 "消息服务" ( 消息中间件 ) ?① 异步处理② 应用解耦③ 流量削峰④ 分布式事务管理 1.2 常用 "消息中间件" 介绍 :ActiveMQ ( 广泛应用于中小型企业 )RabbitMQ ( 没有特别要求的场景下…...
二层交换机与路由器连通上网实验
华为二层交换机与路由器连通上网实验 二层交换机是一种网络设备,用于在局域网(LAN)中转发数据帧。它工作在OSI模型的第二层,即数据链路层。二层交换机通过学习和维护MAC地址表,实现了数据的快速转发和广播域的隔离。 实…...
AJAX知识点(前后端交互技术)
原生AJAX AJAX全称为Asynchronous JavaScript And XML,就是异步的JS和XML,通过AJAX可以在浏览器中向服务器发送异步请求,最大的优势:无需刷新就可获取数据。 AJAX不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式 …...
用wordpress为外贸进出口公司搭建多语言国际站
使用WordPress为外贸进出口公司搭建多语言国际站是一个很好的选择,因为WordPress不仅易于使用,而且具有丰富的插件和主题,可以支持多语言内容。以下是搭建多语言国际站的步骤和建议: 安装WordPress:首先,您…...
雷军-2022.8小米创业思考-6-互联网七字诀之口碑:口碑即定位,超预期才有口碑,品牌建设
第六章 互联网七字诀 专注、极致、口碑、快,这就是我总结的互联网七字诀,也是我对互联网思维的高度概括。 口碑 用户口碑是所有产品成功的关键因素,这是不言而喻的公理。 资源永远有限,对于创业公司尤其如此。只有专注…...
欧盟MDR法规对医疗器械网络安全都有哪些要求?
MDR,欧盟医疗器械法规(Medical Device REGULATION (EU) 2017/745,简称“MDR”),当医疗器械办理欧盟CE认证时,需满足新法规 MDR (EU) 2017/745要求。 M DR符合性评估 医械网络安全咨询与相关文件出具&#x…...
Linux —— 信号初识
Linux —— 信号初识 什么是信号测试几个信号signal函数函数原型参数说明返回值注意事项示例 后台程序前台转后台检测输入中断向量表 我们今天来继续学习Linux的内容,今天我们要了解的是Linux操作系统中的信号: 什么是信号 信号是操作系统内核与进程之…...
webpack进阶 -- 自定义Plugin,Loader封装打包优化
介绍 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。在 Webpack 处理应用程序时,它会在内部构建一个依赖图(dependency graph),这个依赖图对应映射到项目所需的每个模块,并生成一个或多个 bundle。在这个过程中…...
《Decoupled Optimisation for Long-Tailed Visual Recognition》阅读笔记
论文标题 《Decoupled Optimisation for Long-Tailed Visual Recognition》 长尾视觉识别的解耦优化 作者 Cong Cong、Shiyu Xuan、Sidong Liu、Shiliang Zhang、Maurice Pagnucco 和 Yang Song、 来自新南威尔士大学计算机科学与工程学院、北京大学计算机学院多媒体信息处…...
Springboot+Vue项目-基于Java+MySQL的毕业就业信息管理系统(附源码+演示视频+LW)
大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…...
条件平差——以水准网平差为例 (python详细过程版)
目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、原理概述 条件平差的函数模型和随机模型为: A V + W = 0...
mysql -- WITH RECURSIVE 语法
引言 在 SQL 中,WITH RECURSIVE 是一个用于创建递归查询的语句。它允许你定义一个 Common Table Expression (CTE),该 CTE 可以引用自身的输出。递归 CTE 非常适合于查询具有层次结构或树状结构的数据,例如组织结构、文件系统或任何其他具有…...
洗地机什么品牌好?洗地机怎么选?618洗地机选购指南
随着科技的飞速发展,洗地机以其高效的清洁能力、稳定的性能和用户友好的设计而闻名,不仅可以高效吸尘、拖地,还不用手动洗滚布,已经逐渐成为现代家庭不可或缺的清洁助手。然而,在众多品牌和型号中,如何选择…...
nginx负载均衡配置
1.nginx负载均衡配置 upstream lbs {server 192.168.1.12:8080;server 192.168.1.12:8081; }server {listen 80;server_name localhost a.com;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;}locatio…...
HarmonyOS NEXT星河版之美团外卖点餐功能实战(中)
接上 一、UI布局 1.1 购物车Item Preview Component export struct MTCartItemView {build() {Row({ space: 6 }) {Image(https://bkimg.cdn.bcebos.com/pic/4d086e061d950a7bc94a331704d162d9f3d3c9e2).width(42).aspectRatio(1).borderRadius(5)Column({ space: 3 }) {Text…...
CTF-Web Exploitation(持续更新)
CTF-Web Exploitation 1. GET aHEAD Find the flag being held on this server to get ahead of the competition Hints Check out tools like Burpsuite to modify your requests and look at the responses 根据提示使用不同的请求方式得到response可能会得到结果 使用…...
图书管理系统c语言
创建一个图书管理系统是一个涉及数据结构和文件操作的项目。在C语言中,你可以使用结构体来表示图书信息,使用函数来实现系统的各项功能。以下是一个简单的图书管理系统的示例,包括基本的添加、显示、查找和删除图书的功能。 1. 定义图书结构…...
森林消防—高扬程水泵,高效、稳定、可靠!/恒峰智慧科技
森林,作为地球的“绿色肺叶”,不仅为我们提供了丰富的自然资源,更是维持生态平衡的重要一环。然而,随着全球气候的变化和人为活动的增加,森林火灾频发,给生态环境和人民生命财产安全带来了巨大威胁。在森林…...
光伏设备制造5G智能工厂数字孪生可视化平台,推进行业数字化转型
光伏设备制造5G智能工厂数字孪生可视化平台,推进行业数字化转型。光伏设备制造5G智能工厂数字孪生可视化平台是光伏行业数字化转型的重要一环。通过数字孪生平台,光伏设备制造企业可以实现对生产过程的全面监控和智能管理,提高生产效率&#…...
【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series
【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series 摘要 这段文字介绍了一个名为TS2Vec的通用框架,用于学习时间序列数据的表示,可以在任意语义层次上进行。与现有方法不同,TS2Vec通过对增强的上下文视图进行层次化…...
windows驱动开发-DMA技术(一)
DMA(Direct Memory Access)是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量中断负载,否则CPU 需要从设备缓存中把每一页的数据复制到缓存中,然后把它们再次写入到新的地方,在这个过…...
实用的Chrome命令
以下是一些实用的Chrome命令及其用途: --allow-outdated-plugins:允许浏览器使用过期的插件,这在开发过程中可能会用到,以便测试兼容性。chrome://downloads:打开Chrome的下载页面,查看和管理你的下载文件…...
数据库(MySQL)基础:约束
一、概述 1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 2.目的:保证数据库中数据的正确、有效性和完整性。 3.分类 约束描述关键字非空约束限制该字段的数据不能为nullnot null唯一约束保证该字段的所有数据都是唯一…...
ControlNet作者放大招!IC-Light:控制生成图片光照效果!
ControlNet作者张吕敏近日又开源了一项新的工作:IC-Light (Impose Constant Light),在不改变图片内容的条件下,可以控制生成图片的光照效果。 作者发布了两种类型的模型:文本条件重打光模型和背景条件重打光…...
【Java】Java中类的初始化顺序(静态方法,静态块,非静态块,最后有流程图)
📝个人主页:哈__ 期待您的关注 目录 一、无继承关系类的初始化 1、静态变量k被初始化 2、静态变量t1初始化 3、静态变量 t2初始化 4、静态变量i初始化 5、静态变量n初始化 6、静态块初始化 7、非静态块初始化 8、非静态属性初始化 9、执行构造…...
在RK3588开发板使用FFMpeg 结合云服务器加SRS实现摄像头数据推流到云端拱其他设备查看
今天测试了一把在开发板把摄像头数据推流到云端服务器,然后给其他电脑通过val软件拉取显示摄像头画面,浅浅记录一下大概步骤 1.开发板端先下载ffmpeg apt install ffmpeg2.云服务器先安装SRS的库 云服务器我使用ubuntu系统,SRS是个什么东西&…...
elasticsearch搭建教程
主要参看这里就行,需要特别注意其中报错的解决方案:搭建elasticsearch 单机节点里,按照上述教程搭建只能开放本地访问,如果需要其他机器访问,需要在elasticsearch.yml里新增几个配置: node.name: node-1 network.host…...
c++ 归并排序
归并排序是一种遵循分而治之方法的排序算法。它的工作原理是递归地将输入数组划分为较小的子数组并对这些子数组进行排序,然后将它们合并在一起以获得排序后的数组。 简单来说,归并排序的过程就是将数组分成两半,对每一半进行排序,…...
网站后台如何上传图片/中国新闻网最新消息
1.AndFix只能修复方法级别的bug使用流程:添加依赖→封装工具类→生成差异包(.patch文件)→loadpatch方法更新源码:初始化源码:PatchManager→init(比较版本号,删除旧版本)加载源码:addpatch→initPatchs()→addpatch()…...
wordpress 调用avatar/宁波seo优化流程
引言 前几期的评测中,我们对比了Kafka和RocketMQ的吞吐量和稳定性,本期我们要引入一个新的评测标准——软件可靠性。 何为“可靠性”?先看下面这种情况:有A,B两辆越野汽车,在城市的周边地区均能很好应对泥泞…...
wordpress avada 加速/百度推广账号怎么申请
领先科技开发的网上阅卷系统有别于市场现有产品的最大特点是,利用计算机技术的先进性,该系统可将每次考试获得的大量数据进行快速的收集整理,从而获得有助于教学的各方面信息,完成了一些过去人工较难完成的工作,并最大…...
网站管理页面/如何学会推广和营销
这里介绍两种产生sdp文件的方法,仅供参考,欢迎补充。 1、环境 操作系统 :CentOS6.2_64 内核版本 :2.6.32-220.23.1.el6.x86_64 Darwin Streaming Server 版本:6.0.3 mpeg4ip版本:1.6.1 ffmpeg版本ÿ…...
网站设计特色/seo快速排名软件推荐
前面的《配置中心》和《服务注册&服务提供者》这两篇分别讲解了配置中心和服务提供者,但是服务提供者使用的配置文件还是本地的,没有使用配置中心的配置文件。今天看看如何实现服务提供者使用配置中心的配置文件。新建项目sc-eureka-client-provider…...
东莞网站建设服务/营销新闻
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。举个例子,我们来计算阶乘n! 1 * 2 * 3 * ... * n,用函数fact(n)表示,可以看出:fact(n) n! 1 x 2 x 3 x ... x (n-…...