PCIE每个Virtual Channel都维护一个独立的Flow Control Credit Pool。发送端要发送TLP,首先得获得Credit。Flow Control对3种TLP有效:

1. Posted Request(P) - Messages和Memory Writes;

2. Non-Posted Request(NP) - 所有的Reads, I/O writes, Configuration Writes,和AtomicOps;

3. Completions(CPL) - 与NP相关的Completion。

并区分这3中TLP的Header和Data,所以Flow Control Credit的类型有6种:

在L0/L0s状态,对于每种被设成non-infinite的FC Credit,UpdateFC需要每隔30us至少发送一次,如果Control Link寄存器中的Extended Sync比特位置1,则每个120us至少发送一次。

在powerup之后,如果要开始进行正常的传输操作,需要先对默认的virtual channel(VC0)进行Flow control的初始化,如果enable了新的virtual channel,也需要对这个新的channel进行初始化。

Virtual Channel的初始化分为两步:

FC_INIT1

FC_INIT2

当VC0进入DL_Init状态后,或VC1-VC7被enable后,就会进入FC_INIT1。

进入FC_INIT1之后,TL层必须停止使用该VC上发送TLP;

按照1. InitFC1-P, 2. InitFC1-NP, 3. InitFC1-Cpl的顺序发送InitFC1 DLLP,并且每34us至少发送一遍;在Recovery或Configuration状态中所消耗的时间不计入34us内;强烈建议在没有其他TLP或DLLP发送的情况下,尽量多发送InitFC1 DLLP;

除非为了保证最低所需的InitFC1 DLLP的发送,Data  Link层不能停止其他包的发送,包括所有Physical Layer发起的包(OS),ACK/NAK DLLP,使用已完成初始化的VC来发送的TLP;

如果收到InitFC1和InitFC2 DLLP,记录FC unit的值,如果P/NP/Cpl都已被记录,则将FI1置1,然后进入FC_INIT2。

在FC_INIT2时:

TL层必须停止在该VC上发送TLP;

按照1. InitFC2-P, 2. InitFC2-NP, 3. InitFC2-Cpl的顺序发送InitFC2 DLLP,并且每34us至少发送一遍;在Recovery或Configuration状态中所消耗的时间不计入34us内;强烈建议在没有其他TLP或DLLP发送的情况下,尽量多发送InitFC2 DLLP;

除非为了保证最低所需的InitFC2 DLLP的发送,Data  Link层不能停止其他包的发送,包括所有Physical Layer发起的包(OS),ACK/NAK DLLP,使用已完成初始化的VC来发送的TLP;

如果收到InitFC1和InitFC2 DLLP,忽略FC unit的值,只要收到任意InitFC2 DLLP,则将FI2置1,然后退出FC_INIT2。

转载于:https://www.cnblogs.com/lybinger/p/10334028.html

flow control相关推荐

  1. ActiveMq生产者流量控制(Producer Flow Control)

    最近学习ActiveMq,昨日查看其配置文件activemq.xml的时候,被一行注释引到了http://activemq.apache.org/producer-flow-control.html页 ...

  2. PCIe系列专题之二:2.5 Flow Control缓存架构及信用积分

    一.故事前传 之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transacti ...

  3. ubuntu18 编译maplab opencv3_catkin 时出现Flow control statements are not properly nested.

    问题 CMake Error at cmake/OpenCVCompilerOptions.cmake:21 (else): Flow control statements are not prope ...

  4. 【RoCE】Flow Control

    概览 RoCE可以实现lossless无损网络环境,在二层网络上做到可靠网络传输,从而对原本在光纤网络环境下的应用在以太网环境下提供相同的服务,而不必对应用逻辑和上层协议更改.实现无损的方法有Glob ...

  5. Weir Flow Control售予First Reserve事宜完成之后更名为Trillium Flow Technologies

    出售之后,所有产品和服务将保持不变 休斯顿--(美国商业资讯)--Trillium Flow Technologies (Trillium)即之前的Weir Flow Control (WFC),今天 ...

  6. UART串口流控制(Flow control)

    一般在串行通讯中,我们会在一些上位机上看到 RTS /CTS.DTR /DSR和 XON /XOFF的选项,这是对流控制的选项,一般是应用于 RS232接口的,是拿来调制解调器的数据通讯的 一.流控制 ...

  7. Credit-based Flow Control的前世今生

    撰文 | 乔晶.姚迟 1 OneFlow 中的流控 OneFlow 团队此前发布的<仅此一文让您掌握OneFlow框架的系统设计>介绍了 OneFlow 是通过背压机制解决流控问题的.文中 ...

  8. ActiveMQ Message Cursors、Async Sends、Optimized Acknowledgement、Producer Flow Control

    概述 ActiveMQ发送持久消息的典型处理方式是:当消息的消费者准备就绪时,消息发送系统把存储的消息按批次发送给消费者,在发送完一个批次的消息后,指针的标记位置指向下一批次待发送消息的位置,进行后续 ...

  9. 蓝牙LL数据包交互【More Data多数据传输】【Acknowledgement and Flow Control】

    SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机.32位ARM Cortex-M0处理器.128kB Flash存储器.以及丰富的数字接口.SYD8801片上集成了 ...

最新文章

  1. vue及脚手架的下载安装,创建项目
  2. 第一篇-Html标签中head标签,body标签中input系列,textarea和select标签
  3. oracle使用关键字做表字段名_ArcGIS SQL使用
  4. 第十一:Pytest进阶之conftest.py
  5. Tensorflow代码解析(一)
  6. azure云数据库_如何使用SQL Data Sync同步Azure SQL数据库和本地数据库
  7. eclipse创建maven web工程,以及maven工程转化为web工程的简单介绍。
  8. 凨-百度地图API之地图标注(JS版),地理位置信息,根据地址获取经度纬度
  9. 装机员Ghost一键备份还原使用方法(硬盘装系统)
  10. 破解工具之调试器和相关破解案例视频教程大全
  11. UniWebView3 使用中遇到的坑
  12. 为虚幻4安装VS2019
  13. 未来智慧园区白皮书(2022年) 附下载
  14. Java课程设计题目七:魔板游戏
  15. 健全营销体制是打造营销生态系统的命脉
  16. 表单及阿里巴巴矢量图
  17. 数独基本规则_独数游戏,数独题目大全
  18. tpshop index.php,第三讲、TPshop linux安装
  19. 【工作笔记】微信公众号页面摇一摇+触发音效
  20. Python在cmd下pip快速下载安装包的国内安装镜像

热门文章

  1. Makefile系列之五 :函数
  2. php图片合并png保存图片大小,php缩放处理png和jpg图片
  3. mysql-------流程控制结构
  4. 图解XP局域网共享设置教程汇总A
  5. c语言从键盘输入数据数组,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...
  6. vba ado返回集合_利用VBA代码导出工作表中的图片
  7. 2018-04-08椭圆曲线测试程序
  8. 转:NAT traversal 的概念
  9. JavaWeb——springMVC异常处理器
  10. 深入玩转K8S之使用kubeadm安装Kubernetes v1.10以及常见问题解答