Pcie学习笔记(24)

Ordering and Receive Buffer Flow Control

流量控制(FC)用于防止接收端缓冲区溢出,并使其符合定义的排序规则。请注意,请求者使用流量控制机制来跟踪代理中可用的队列/缓冲区空间,如图2-48所示。也就是说,流控制是点对点的(跨一个链接),而不是端到端的。流控制并不意味着请求已经到达了它的最终Completer。

流量控制与用于实现发送端和接收端之间可靠信息交换的数据完整性机制是正交的。流量控制可以将从发送端到接收端的TLP信息流视为完美的,因为数据完整性机制确保损坏和丢失的TLP通过重传得到纠正。

每个虚拟通道维护一个独立的流量控制信用池。FC信息通过DLLP在链路的两端传递。DLLP的VC ID字段用于携带正确的Flow Control信用所需的VC ID。

流量控制由事务层与数据链路层合作处理。事务层为接收到的TLP执行流量控制计算功能,并根据可用的传输信用“门控”TLP传输,即使这些TLP最终被取消

注:流量控制是事务层的一个功能,因此,在接口上传输的以下类型的信息不与流量控制积分相关联:LCRC、分组分帧符号、其他特殊符号和数据链路层到数据链路层之间的通信包。这一事实的含义是,这些类型的信息必须由接收方以它们到达的速率进行处理。

此外,任何从事务层传输到数据链路和物理层的TLP必须首先通过流量控制“门控”。因此,无论是发送还是接收的流量控制机制都不知道数据链路层是否由于链路上的错误而重复传输TLP。

流量控制规则

•流量控制信息使用流量控制数据包(FCPs)传输,FCPs是DLLP的一种

•流量控制信用的单位是4 DW数据。(为啥有两种单位?4DW和下面的区别?

•对于报头:

◦不支持TLP前缀的接收器的流量控制信用单位是一个最大大小的报头和TLP摘要的总和

◦支持End-End TLP前缀的接收器的流量控制信用单位是一个最大大小的头,TLP摘要和一个TLP中允许的最大数量的End-End TLP前缀的总和。

◦流量控制的接收器支持Local TLP Prefixes的管理是依赖于Local TLP Prefixes 类型。

每个虚拟通道有独立的流量控制

•流量控制区分三种类型的TLP:

◦Posted Request (P) -消息和内存写

◦Non-Posted Request(NP) -所有读,I/O写,配置写和AtomicOps

◦Completion(Cpl) -与相应的NP请求相关联

•此外,Flow Control在三种类型中分别区分以下类型的TLP信息:

◦Headers (H)

◦Data (D)

因此,每个虚拟通道的Flow Control可以跟踪六种类型的信息

TLP消耗的流量控制信用如表所示。

•组件必须为该组件支持的所有虚拟通道实现独立的流量控制

流量控制仅由硬件自动初始化默认的虚拟通道(VC0)

◦当数据链路层在DL_Init状态下复位时,VC0被初始化。

•当其他虚拟通道被软件启用时,每个新启用的VC将遵循流量控制初始化协议。

软件通过在链路上的两个组件中设置虚拟通道的VC使能位来启用虚拟通道

注意:有可能多个vc同时遵循Flow Control初始化协议——每个vc都作为一个独立的进程遵循初始化协议。

软件通过清除链路上两个组件中虚拟通道的VC使能位来禁用虚拟通道。

◦禁用一个组件的虚拟通道会重置该组件中的虚拟通道的流量控制跟踪机制。

InitFC1和InitFC2 FCPs仅用于流量控制初始化

•指定禁用虚拟通道的InitFC1、InitFC2或UpdateFC FCP将被丢弃而无效。

•在任何虚拟通道的FC初始化期间,包括作为链路初始化的一部分初始化的默认VC,接收器初始发布的VC信用值必须等于或大于表2-44所示的值。

如果缩放流量控制不支持或支持但未激活,使用“比例因子1”列中的值

•如果缩放流量控制是支持和激活的,使用与信用类型相关的比例因子列中的值

•不支持根端口之间的点对点流量的RC必须在每个根端口上发布无限的Completion credits信用

•支持部分或全部根端口之间点对点流量的RC可以选择性地在这些根端口上发布非无限Completion credits积分。在这种情况下,RC必须确保避免死锁,并维护指向RC的Completion的前进进度。请注意,由于RC转发的Non-Posted Request可能没有明确分配完成缓冲空间,因此可能会暂时停止Completion traffic(由于暂时缺乏信用)。

不支持缩放流量控制的接收器不得累计向发送器发出超过2047个未使用的数据有效载荷或127个报头。支持按比例流量控制的接收方不得累计向发送方发出超过表3-2所示的最大信用值的未使用数据或报头。

◦组件可以选择检查是否违反此规则。如果实现此检查的组件确定违反了此规则,则该违反是流控制协议错误(FCPE)如果选中,这是一个与接收端口相关的报告错误

•如果在初始化过程中进行了Infinite Credit advertisement(值为00h或000h),则初始化后不需要进行Flow Control更新。

◦如果发送UpdateFC DLLP,信用值字段必须为Clear,且必须被接收方忽略。

接收方可以选择检查非零更新值(违反此规则)。如果执行此检查的组件确定违反了此规则,则该违反是流量控制协议错误(FCPE)。如果检查,则报告与接收端口相关的错误(参见6.2节)。

•如果在初始化过程中,给定类型(P、NP或Cpl)只有数据或报头发布(但不是两者都发布),并且有无限的积分,则仍然需要传输UpdateFC DLLPs,但是与数据/报头(发布为无限)对应的信用字段必须设置为零,并且必须被接收方忽略。

◦接收器可以选择检查非零更新值(违反此规则)。如果执行此检查的接收方确定违反了此规则,则该违反是流量控制协议错误(FCPE)。▪如果选中,这是一个与接收端口相关的报告错误(见6.2节)。

•如果缩放流量控制被激活,UpdateFCs中的HdrScale和DataScale字段必须匹配初始化期间发布的值(参见3.4.2节)。

◦接收方可以选择检查是否违反此规则。如果执行此检查的接收方确定违反了此规则,则该违反是流量控制协议错误(FCPE)。▪如果选中,这是一个与接收端口相关的报告错误(见6.2节)。

使用未使能的VC接收的TLP是畸形TLP。

始终使能VC0。

对于VCs 1-7,当VC资源控制寄存器中相应的VC Enable位被设置时,当FC协商该VC退出FC_INIT1状态并进展到FC_INIT2状态时,VC被认为是启用的

◦这是一个与接收端口相关的报告错误(见6.2节)。

•在该虚拟通道的初始化通过退出FC_INIT2状态完成之前,不允许使用任何虚拟通道0-7进行TLP传输。。

对于VCs 1-7,软件必须使用VC资源状态寄存器中的VC Negotiation Pending位,以确保在链路上两个组件的FC_INIT2状态退出协商完成之前不会使用VC。

下面章节中使用的[Field Size]参数如表2-45所示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405122.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集团数字化转型方案(六)

集团数字化转型方案旨在通过引入前沿技术,如人工智能(AI)、大数据分析、云计算和物联网(IoT),全面提升业务运营效率和市场竞争力。该方案首先实现业务流程的自动化,减少人工干预,通过…

学习C语言 第十八天

第一项 C 强制类型转换 强制类型转换是把变量从一种类型转换为另一种数据类型。可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型 (type_name) expression 一个整数变量除以另一个整数变量&#xff0c;得到一个浮点数&#xff1a; eg: #include <st…

AI在线免费数学工具:Qwen2-Math

1、Qwen2-Math https://huggingface.co/spaces/Qwen/Qwen2-Math-Demo

Python爬虫——简单网页抓取(实战案例)小白篇

Python 爬虫是一种强大的工具&#xff0c;用于从网页中提取数据。这里&#xff0c;我将通过一个简单的实战案例来展示如何使用 Python 和一些流行的库&#xff08;如 requests 和 BeautifulSoup&#xff09;来抓取网页数据。 实战案例&#xff1a;抓取一个新闻网站的头条新闻标…

【Qt】 常用控件QLCDNumber

常用控件QLCDNumber QLCDNumber是一个专门用来显示数字的控件&#xff0c;类似于“老式计算机”的效果。 QLCDNumber的属性 属性说明 intValue QLCDNumber 显⽰的数字值(int). value QLCDNumber 显⽰的数字值(double). 和 intValue 是联动的. 例如给 value 设为 1.5, i…

Docker 存储空间不足无法导入加载镜像

问题&#xff1a;在载入镜像时&#xff0c;发现docker没有空间了 解决办法&#xff1a; 更改docker的存储路径 1.添加新的硬盘 docker info #查看docker的存储位置 df -Th #查看占用以及挂载情况 发现没有可用的剩余空间&#xff0c;我们可以添加一个新的硬盘 在linu…

Java之HashMap的底层实现

Java之HashMap的底层实现 摘要HashMap的底层原理哈希值转换为数组下标节点初始化put(Object key, Object value)重写toString()get(Object key)增加泛化remove(K key) 摘要 本博客主要讲述了Java的HashMap的底层实现 HashMap的底层原理 底层原理&#xff1a;数组链表 过程…

Golang | Leetcode Golang题解之第352题将数据流变为多个不相交区间

题目&#xff1a; 题解&#xff1a; type SummaryRanges struct {*redblacktree.Tree }func Constructor() SummaryRanges {return SummaryRanges{redblacktree.NewWithIntComparator()} }func (ranges *SummaryRanges) AddNum(val int) {// 找到 l0 最大的且满足 l0 < val…

Elasticsearch 使用误区之四——不合理的使用 track_total_hits

0、企业级实战问题 在使用 Elasticsearch 进行搜索时&#xff0c;我们常常关心匹配查询的文档总数而将 track_total_hits 设置为 true&#xff0c;如下截图所示&#xff0c;在数据量非常大的情况下这种检索导致的问题是&#xff1a;查询特别慢&#xff0c;聚合会更慢&#xff0…

机器学习:逻辑回归实现下采样和过采样

1、概述 逻辑回归本身是一种分类算法&#xff0c;它并不涉及下采样或过采样操作。然而&#xff0c;在处理不平衡数据集时&#xff0c;这些技术经常被用来改善模型的性能。下采样和过采样是两种常用的处理不平衡数据集的方法。 2、下采样 1、概念 下采样是通过减少数量较多的类…

MaxKB(二):Ubuntu24.04搭建maxkb开发环境

接上文&#xff1a;windows10搭建maxkb开发环境&#xff08;劝退指南&#xff09; 上文在windows10环境搭建maxkb开发环境遇到各种坑&#xff0c;后面就转战ubuntu平台&#xff0c;果然比较顺利的完成开发环境搭建。当然遇到相关的问题还是可以参考上文《windows10搭建maxkb开发…

Stable Diffusion赋能“黑神话”——助力悟空走进AI奇幻世界

《黑神话&#xff1a;悟空》是由游戏科学公司制作的以中国神话为背景的动作角色扮演游戏&#xff0c;将于2024年8月20日发售。玩家将扮演一位“天命人”&#xff0c;为了探寻昔日传说的真相&#xff0c;踏上一条充满危险与惊奇的西游之路。 同时&#xff0c;我们还可以借助AI绘…

向量数据库Faiss的搭建与使用

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 向量数据库在处理大量高维数据时非常有用&#xff0c;尤其在机器学习、推荐系统、图像检索和自然语言处理等领域。Faiss是 Facebook AI Research (FAIR) 开发的一款高效的开源向量数据库&#xff0c;专注于大规模、高维…

SpringBoot整合Sharding-JDBC分库分表

SpringBoot整合Sharding-JDBC分库分表 本文介绍SpringBoot使用当当Sharding-JDBC进行分库分表。 1、有关Sharding-JDBC 有关Sharding-JDBC介绍这里就不在多说&#xff0c;之前Sharding-JDBC是当当网自研的关系型数据库的水平扩展框架&#xff0c;现 在已经捐献给Apache&…

macOS安装搭建python环境

安装Homebrew apt-get是一个常见于Debian和Ubuntu等基于Linux的操作系统中的包管理工具&#xff0c;用于安装、更新和移除软件包。然而&#xff0c;macOS使用的是Homebrew或者MacPorts等其他的包管理工具&#xff0c;并不使用apt-get。 如果你想在macOS上使用类似apt-get的功…

【大模型理论篇】大模型时代下Bert去哪啦?

这个标题是最近看到的一篇文章《What happened to BERT & T5? On Transformer Encoders, PrefixLM and Denoising Objectives》有感而发&#xff0c;也感觉很有意思。在几年前&#xff0c;在项目中还经常会用到Bert。本文主要回顾一下Bert的原理、Bert的继续训练和使用&am…

JavaScript高级程序设计 -- -- 观后记录

一、什么是 JavaScript 1、JavaScript 实现 完整的 JavaScript 实现包含以下几个部分&#xff1a; -- --  核心&#xff08;ECMAScript&#xff09;  文档对象模型&#xff08;DOM&#xff09;  浏览器对象模型&#xff08;BOM&#xff09; 2、DOM 文档对象模型&#…

UE5 datetime 创建日期时间节点 进行加法减法。个人理解

以下均为个人实验和个人理解&#xff0c;仅供参考。 目录 目标节点&#xff1a; 年月日 时分秒毫秒 目标节点&#xff1a; 年月日 年月日以1 为基底。若填的数字<0&#xff0c;该节点会失效。 试验&#xff1a; year基底为1&#xff0c;正常 year基底为0&#xff0c;异…

SpringBoot 整合 Excel 轻松实现数据自由导入导出

01、背景介绍 在实际的业务系统开发过程中&#xff0c;操作 Excel 实现数据的导入导出基本上是个非常常见的需求。 之前&#xff0c;我们有介绍一款非常好用的工具&#xff1a;EasyPoi&#xff0c;有读者提出在数据量大的情况下&#xff0c;EasyPoi 会占用内存大&#xff0c;…

k8s综合项目

一、准备环境 1.1 部署服务器 在centos7.9系统里搭建v1.23版本的k8s集群&#xff0c;准备四台服务器&#xff0c;两台作为master&#xff0c;主机名分别为 k8s-master和k8s-master-2&#xff0c;主机名为k8s-master&#xff0c;两台作为 node&#xff0c;主机名分别为k8s-nod…