PCIe扫盲——Flow Control基础(一)

PCIe扫盲——Flow Control基础(一)FlowControl即流量控制,这一概念起源于网络通信中。PCIe总线采用FlowControl的目的是,保证发送端的PCIe设备永远不会发送接收端的PCIe设备不能接收的TLP(事务层包)。也就是说,发送端在发送前可以通过FlowControl机制知道接收端能否接收即将发送的TLP。在PCI总线中,并没有FlowControl这样的机制,因此发送端并不知道当前时刻,接收端能否接收对应的TLP。因此,发送端只能先尝试发送,期间可能会被插入多个等待周期(接收设备尚未就绪等原因),甚至是重发(Re

大家好,又见面了,我是你们的朋友全栈君。

Flow Control即流量控制,这一概念起源于网络通信中。PCIe总线采用Flow Control的目的是,保证发送端的PCIe设备永远不会发送接收端的PCIe设备不能接收的TLP(事务层包)。也就是说,发送端在发送前可以通过Flow Control机制知道接收端能否接收即将发送的TLP。

在PCI总线中,并没有Flow Control这样的机制,因此发送端并不知道当前时刻,接收端能否接收对应的TLP。因此,发送端只能先尝试发送,期间可能会被插入多个等待周期(接收设备尚未就绪等原因),甚至是重发(Retries)等。

PCIe Spec规定,PCIe设备的每一个端口(Ports)都必须支持Flow Control机制,在发送TLP之前,Flow Control必须先检查接收端口是否有足够的Buffer空间来接收这个TLP。当PCIe设备支持多个VC(Virtual Channel)时,Flow Control机制可以显著地提高总线的传输效率。

PCIe Spec规定,每个PCIe端口最多支持8个VC,并且每个VC的Flow Control Buffer是完全独立的。也就是说,某一个VC的Flow Control Buffer满了,并不会影响其他的VC的通信。

注:一般Endpoint只有一个端口,Root有一个或者多个端口,Switch有一个Upstream端口和多个Downstream端口。

前面的文章中介绍过,Flow Control机制是通过相邻两个端口(Ports)的数据链路层之间发送DLLP(Flow Control DLLPs)来实现的。也就是说Flow Control是一种点到点(Point to Point)的方式,而非端到端(End to End)。在进行初始化的时候,接收端需要向发送端报告(reports)其Buffer的大小,在正常运行状态(Run-time)时,会周期性地通过Flow Control DLLPs来告知发送端,接收端的各个Buffer的大小。

需要注意的是,虽然Flow Control DLLP只在相邻的数据链路层之间传输,但是相关的Buffer和计数器(FC Counter)确是在事务层(Transaction Layer)的,即事务层参与了Flow Control机制的管理。如下图所示:

blob.png

前面的文章中多次介绍过,TLP一共有三大类:Posted Transactions(包括Memory Writes和Messages)、Non-Posted Transactions(包括Memory Reads、Configuration Reads and Writes、IO Reads and Writes)以及Completions(包括Read and Write Completion)。并且知道,TLP可以分为两个部分,Header和Data部分。Flow Control为了获得更高的数据传输效率,将这三类TLP分开存放,同时将Header与Data部分也分开存放。因此,一共存在六种不同的Flow Control Buffer类型,如下图所示:

blob.png

Flow Control Buffer的存储单元(Unit)被称作Flow Control Credits。对于Header来说,Requests TLP每个unit等于5DW,而Completions TLP每个unit等于4DW。对于Data来说,每个unit等于4DW,即Data Buffer是按照16个字节对齐的。对于各种类型的Buffer的最小值如下表所示:

blob.png

最大值如下表所示:

blob.png

注:0 unit表示无限(Infinite)。

注:原文最早发表于本人的ChinaAET博客(http://blog.chinaaet.com/justlxy/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146153.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月15日 下午7:40
下一篇 2022年5月15日 下午7:40


相关推荐

  • 米家声波电动牙刷T500

    米家声波电动牙刷T500

    2026年3月15日
    1
  • vlan的作用和特点_VLAN的概念

    vlan的作用和特点_VLAN的概念VLAN它的全称是虚拟局域网,作用就是把连接在同一交换机下的主机分为更小的逻辑网段,以减少广播的数量,不同的VLAN之间不能通讯,这样广播就被限制在同一个业务需求主机的VLAN里,即便是连接在同一个交换机下,不同的VLAN也不会收到广播的ARP请求!如果他们之间需要通讯,只能借助路由器或三层交换机没有携带VLAN(Tag)的数据帧携带VLAN(Tag)的数据帧标签类型把同一物理局域网内的不同用户逻辑地划分成不同的广播域、有助于控制流量、减少设备投资、简化网络管理。提高网络的安全性。1)区段化:将一个网络

    2022年8月10日
    7
  • 华为P40怎么解账号锁P40Pro忘记密码ID账号锁解除方案开机设备解锁帐号软件使用方法

    华为P40怎么解账号锁P40Pro忘记密码ID账号锁解除方案开机设备解锁帐号软件使用方法​今天带来一台用户华为mate30手机强制清除华为账号锁案例分享,这个台手机是用户公司手机,由于前使用者离职后未能退出手机的华为账号和锁屏密码,导致手机无法使用。自己通过简单的恢复出厂设置后,发现手机有华为账号锁无法激活手机,这才联系到刷机爱好者技术人员,给予远程强制刷机移除华为mate30的账号锁。在此提醒广大用户,登录的华为账号建议绑定经常使用的手机号码,防止无法找回密码从而到时手机无法使用。在刷机解锁过程中需要准备以下工具:准备windwos系统电脑一台,有条件的用户可以找台配置.

    2022年6月23日
    130
  • css3奇偶选择器[通俗易懂]

    css3奇偶选择器[通俗易懂]数学里面的奇数偶数,上代码trtd:nth-of-type(odd){margin-left:20px;}奇数行trtd:nth-of-type(even){margin-left:10px;}偶数行

    2022年7月11日
    22
  • 永恒之蓝勒索病毒_2019勒索病毒专杀

    永恒之蓝勒索病毒_2019勒索病毒专杀整个的复现的过程需要的环境以及工具有:kali2.0:用来监听获取反弹的shell。ip:192.168.15.174winsever2003:需要装上python环境,勒索病毒攻击机。ip:192.168.15.141win2007:靶机,确保445端口开启。ip:192.168.15.144永恒之蓝python2.6已经在winsever下装python需…

    2022年10月16日
    5
  • ?条件运算符的结合——从右往左[通俗易懂]

    ?条件运算符的结合——从右往左[通俗易懂]#include<stdio.h>#include<stdlib.h>intmain(){ intmax=1; inti=11,j=13,k=5; max=i>j?i>k?i:k:j>k?j:k; printf(“max=%d\n”,max); return0;}…

    2022年10月2日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号