PCIE-TLP路由

2024-08-30 12:44
文章标签 路由 pcie tlp

本文主要是介绍PCIE-TLP路由,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TLP路由存在三种形式,基于地址、基于ID、隐式路由。

1关于TLP路由方式的划分:

  cpl/cpld  ;  cfgwr/cfgrd  -> ID routing

  Mwr/Mrd[lock]/atomicop  ;  Iowr/Iord  -> address routing

  Msg/MsgD  -> 三种均可

2)关于posted/non-posted

  mwr/message  -> posted

  其他  -> non-posted

33DW/4DW

  ID路由:仅message路由中出现4DW

  地址路由:

  Memory请求的目标地址小于4GB32bit地址)->3DW

  大于4GB(64bit地址)  ->4DW

Header中的type字段决定了路由方式、posted与否

ID路由(256*32*8

1.EP进行一次检查)

  在收到type0配置写过程中会从配置写事务中捕获自己BDF号,EP只会简单的根据自己的BDF来检查TLP Header中的ID字段。

2. Switch(每个端口进行两次检查)

  (1)将端口自身的BDFTLP Header中的目标ID进行比较;

  (2)通过检查Secondary Bus Number Subordinate Bus Number来查看TLP的目标总线号是否在Switch端口下方的从属总线范围内; 

注意:(1)对于步骤1来说,如果是自己用,type01h类型的TLP会转化成type00hTLP对于步骤2bus number在两个范围之间,type01h类型的TLP不改变类型,只有确定是那个EP使用后才会转化类型。(2)上行端口转发到下行端口后,所有下行端口都会在此执行两次检查,也就是一次检查是不是属于自己,另一次检查是否属于从属总线范围。

三种结果:(1)端口自身消耗;(2)端口转发到其他端口;(3) Unsupported Request处理;

在消息传送、CplCplD中可能会存在下游端口向上游端口传递的过程p-p3桥片发现tlp不是发给自己的以后会推到上游总线bus1bus1上的p-p1认领的话就发给RC,不认领的话就会发给p-p2桥片,并由这个桥片转发给相应的EP

地址路由 

1.EP:

EP将会用其自身配置Header中的每一个BARBase Address Register)与TLP Header中的Address字段进行比对

2.Switch

(1Switch端口自身Type 1 Header中的两个BARTLP Header中的Address进行比对;

2如果并未匹配任何一个BAR的地址范围,那么Switch端口将会检查Base/Limit寄存器对(IO地址空间,memory地址空间),以此来确定这个TLP的目标Function是否在本端口之下。

向上移动(次级接口接收并且向上转发)

(1)如果TLP的目标地址与当前Switch次级接口的其中一个BAR地址范围相匹配->自身消耗

(2)如果TLP的目标地址落在端口的Base/Limit寄存器所表示的范围内->TLP被次级接口当作UR处理(除非这个端口是Switch的上行端口,在这种情况下,这个数据包可能是一个Peer-to-Peer的事务,它将会被转发至下行的另一个端口上,而不是之前接收这个TLP的端口)。

(3)若以上两个条件都不符->转发到主接口(既不是当前的端口Bridge,也不是这个Bridge之下的任何一个Function

message路由 

1.MessageType字段

[4:3] -> 10;

[2:0] -> message具体使用的路由方式;

2. EP

EP会简单的检查路由子字段(sub-field)是否适合它;

3.Switch

1上行端口可以合法的接收一个广播Message011),上行端口将会把这个广播Message复制一份,并向它的所有下行端口都转发;下行端口不能接收一个隐式路由的广播Message也就是这个Message将会向上行移动,会将其认为是一个Malformed TLP

2下行端口可以接收隐式路由目的地为RCMessage000),下行端口将会把这个Message转发给上行端口,因为路由元件知道RC永远在上行。而Switch的上行端口并不会从外界接受一个隐式路由目的地为RCMessage,因为这意味着它会向下转发,但是RC却在拓扑结构的上方。

3 如果隐式路由Message表示它会终止在其接收者的位置(100),那么接收它的Switch端口将会消耗掉这个Message,而不是将其转发。

4对于使用地址路由或者ID路由的Message来说,Switch会按照类似于地址或ID的路由规则。

问题:000101都是去RC,区别是什么?

不同路由方式下请求的格式:

地址路由:有两种地址格式,使用 4 DW header64 位格式和使用 3 DW header32 位格式。

 

ID路由:两种,non-ARI Routing IDsARI Routing IDs

这篇关于PCIE-TLP路由的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120852

相关文章

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

【vue3|第28期】 Vue3 + Vue Router:探索路由重定向的使用与作用

日期:2024年9月8日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083;0.98365 = 0.0006 说

HCIA--实验十:路由的递归特性

递归路由的理解 一、实验内容 1.需求/要求: 使用4台路由器,在AR1和AR4上分别配置一个LOOPBACK接口,根据路由的递归特性,写一系列的静态路由实现让1.1.1.1和4.4.4.4的双向通信。 二、实验过程 1.拓扑图: 2.步骤: (下列命令行可以直接复制在ensp) 1.如拓扑图所示,配置各路由器的基本信息: 各接口的ip地址及子网掩码,给AR1和AR4分别配置

微信小程序路由跳转之间的区别

navigateTo: 功能描述: navigateTo用于保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。 页面栈变化: 当使用navigateTo进行页面跳转时,当前页面会被推入页面栈中,但不会被销毁,新页面则显示在屏幕上。因此,页面栈中的元素数量会增加。 注意:一般定制返回时候不要用navigateTo,用navigateBack,否则会导致页面栈过多。 nav

如何为 DigitalOcean 静态路由操作员设置故障转移

静态路由操作器的主要目的是提供更大的灵活性,并在 Kubernetes 环境中控制网络流量。它使你能够根据应用程序的需求自定义路由配置,从而优化网络性能。该操作器作为 DaemonSet 部署,因此将在你的 DigitalOcean Managed Kubernetes 集群的每个节点上运行。 在本教程中,你将学习如何根据 CRD 规范管理每个工作节点的路由表,并设置故障转移网关。

若依框架登录鉴权详解(动态路由)

若依框架登录鉴权:1.获取token(过期在响应拦截器中实现),2.基于RBAC模型获取用户、角色和权限信息(在路由前置守卫),3.根据用户权限动态生成(从字符串->组件,根据permission添加动态路由信息)和添加路由addRoutes(在路由前置守卫) 若依框架(Ruoyi)后端的登录权限身份认证流程是一个复杂但高效的过程,它确保了系统的安全性和数据的保护。以下是一个典型的若依

Vue - 关于Router路由跳转时显示的animate.css动画

Vue - 关于Router路由跳转时显示的animate.css动画 在Vue中,操作路由跳转时页面是闪白的,没有动画效果,我们可以通过在router-view中设置transition,并搭配animate丰富的动画效果来美化路由跳转时的显示效果. 1.安装animate npm i -S animate.css 2.在main中引入animate.css import 'anim

Avoided redundant navigation to current location: 路由相同报错

vue-router有一个内置保护机制,它会阻止不必要的重复导航,以提高性能并避免不必要的计算。 具体来说,错误信息中的就是试图访问的路径时,应用程序已经在当前这个路径上。因此,vue-router检测到了这个重复的导航请求,就发出了警告。 通常情况下,这种警告并不需要特别处理,因为这只是一个优化措施,防止不必要的导航。但是如果你频繁遇到这种情况,可能需要检查触发导航的部分代码逻辑是否有必要进

直接路由配置集群通信---------通过quagga 动态添加服务器路由规则

上一篇微博提到关于使用直接路由的方式配置集群通信,其优点很明确,简单易懂,但是缺点也是不容忽视的。假设一下,你的集群里面有100甚至是上千个node,在每个服务器上,你都得去配置到其他所有node的静态路由,其工作量是庞大切枯燥的。 这里我详细介绍一下,使用quagga来动态添加路由规则。软件主页http://www.quagga.net。 最简单的方式当然是直接在每台服务器上安装quagga

使用直接路由配置kubernetes 集群

通过在每个node 上添加其他node的docker0 网桥的静态路由规则,就可以实现docker0 网桥的互通了。 这种方法需要在每个node的路由表中增加到对方docker0 的静态路由规则,以下例子:      pod1 所在docker0网桥的ip子网10.1.10.0,该node 姑且叫做node1,其地址为192.168.1.128; pod2 所在docker0网桥的ip子网1