flow controlflow 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的通信。
前面的文章中介绍过,flow control机制是通过相邻两个端口(ports)的数据链路层之间发送dllp(flow control dllps)来实现的。在进行初始化的时候,接收端需要向发送端报告(reports)其buffer的大小,在正常运行状态(run-time)时,会周期性地通过flow control dllps来告知发送端,接收端的各个buffer的大小。
需要注意的是,虽然flow control dllp只在相邻的数据链路层之间传输,但是相关的buffer和计数器(fc counter)确实存在于事务层(transaction layer)的。如下图所示:
前面的文章中多次介绍过,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类型,如下图所示:
flow control buffer的存储单元(unit)被称作flow control credits。对于header来说,requests tlp每个unit等于5dw,而completions tlp每个unit等于4dw。对于data来说,每个unit等于4dw,即data buffer是按照16个字节对齐的。对于各种类型的buffer的最小值如下表所示:
最大值如下表所示:
注:0 unit表示无限(infinite)。
奥运奖牌揭秘 伦敦奥运会铜牌成本价不到30块
C语言中Linux字节对齐的问题
简单分析短视频对服务器参数的标准
黑鲨游戏手机2今晚10点预售 该机号称是操控之王
代工终非长久之计 LED品牌才是王道
Flow Control机制可以显著地提高总线的传输效率
稳压二极管稳压值测量电路
单片机典型实例:如何用PWM程序控制LED灯?
基于物联网的平行智慧矿山系统,提高效率
时移世易:苹果回归小屏手机为何已无价值?
基于ZCZVS升压DC-DC双向变换器与变频器设计节能型电动车交流驱动系统
无奈之举!MLCC存货跌价,风华高科出售子公司80%股权
浅谈三相异步电动机等效电路及仿真
汽车电瓶“罢工”的紧急处理方法
差分运放电路的计算方法
苹果5英寸视网膜显示屏产品计划明年发布
新一代智能路由器极3Pro:智能组网,低调奢华
FPGA系统中三种方式减少亚稳态的产生
上海雷卯TVS瞬态电压抑制管---SMA/SMB/SMC封装能做到多种功率
高温温度计实现方案