PCIe学习笔记(25)

news2025/2/5 12:37:15

数据完整性

PCI Express的基本数据可靠性机制包含在数据链路层(data Link Layer)中,它使用32位的LCRC (CRC)码逐链路检测TLP中的错误,并采用逐链路重传机制进行错误恢复。TLP是一个数据和事务控制单元,由位于PCI Express域“边缘”的数据源(如Endpoint或Root Complex)创建,可能通过中间组件(即交换机)路由,并由最终的PCI Express接收者使用。当TLP经过Switch时,Switch可能需要改变一些控制字段,而不需要修改报文传输路径时不应该改变的其他字段。因此,LCRC由交换机重新生成。数据损坏可能发生在交换机内部,损坏数据的良好LCRC的再生掩盖了错误的存在。在对数据可靠性要求较高的系统中,为了保证端到端的数据完整性检测,可以在TLP末尾的TLP Digest字段中放置一个Transaction Layer端到端32位CRC (ECRC)。ECRC涵盖了所有在TLP遍历路径时不会改变的字段(不变字段)。ECRC由源组件中的事务层生成,并由最终PCI Express Receiver和可选的中间Receiver检查(如果支持的话)。支持ECRC检查的交换机必须在针对交换机自身的tlp上检查ECRC。这样的交换机可以选择检查它转发的tlp上的ECRC。在Switch转发的TLP上,无论Switch是否检查ECRC或ECRC检查失败,Switch都必须将ECRC作为TLP的一个组成部分保留(转发时不动)         在某些情况下,TLP负载中的数据在生成TLP时已知已损坏,或者在通过中间组件(如Switch)时可能已损坏。在这些情况下,error forwarding错误转发(也称为data poisoning,数据中毒)可用于向使用数据的设备指示损坏情况。

ECRC Rules

生成和检查ECRC的能力报告给软件,并且通过软件启用该功能。

•如果使能某个设备的Function生成ECRC,则必须计算并应用该功能生成的所有tlp的ECRC。

•SW从入端口到出端口传递的tlp必须保持ECRC不变

•如果一个设备支持ECRC生成/检查,它的至少一个功能必须支持高级错误报告(AER)(见6.2节)

如果一个设备功能被启用检查ECRC,它必须对所有具有ECRC的TLPs这样做,设备是最终的PCI Express接收器

注意,它仍然有可能接收没有ECRC的TLPs,这些被正常处理-这不是一个错误

请注意,交换机可以选择对通过交换机的tlp执行ECRC检查。Switch检测到的ECRC错误报告如表6-5所示,但不会改变tlp通过Switch的传递。

一个32位的ECRC (end - end TLP Prefixes, header, and data payload)使用如下算法计算并附加到TLP的末尾(如图2-3所示):

使用多项式的系数表示为04C1 1DB7h

种子值seed(ECRC存储寄存器的初始值)为FFFF FFFFh

所有报头字段,所有End-End TLP前缀(如果存在)和整个数据负载(如果存在)都包含在ECRC计算中。在变体字段中的所有位必须设置为进行ECRC计算。

TLP报头中Type字段的0位是可变的(Variant)。End-End TLP前缀中的这位是不变的。

EP位为可变的(Variant)

所有其他字段为不变的(Invariant)

ECRC计算从字节0的第0位开始,从TLP的每个字节的第0位到第7位进行

•ECRC计算的结果进行补全,并将补全的结果位映射到32位TLP Digest字段中,如表2-49所示

•32位的ECRC值被放置在TLP摘要字段的末尾(见图2-3)

对于包含用于ECRC值的TLP摘要字段的TLP,支持端到端数据完整性检查的接收器通过以下方式检查TLP摘要字段中的ECRC值:

对接收到的TLP应用相同的ECRC计算算法,但不包括收到的TLP的32位TLP Digest字段,然后

将计算结果与收到的TLP的TLP Digest字段中的值进行比较。

•支持端到端数据完整性检查的接收器将违规报告为ECRC错误。这个报告的错误与接收端口有关(参见6.2节)。

SW内TD位保护

最重要的是,交换机确保和维护它们接收和转发的TLP中TD位的完整性(即,通过应用特殊的内部保护机制),因为TD位的损坏将导致最终目标设备误解TLP摘要字段的存在或不存在。

同样,强烈建议交换机为它们接收和转发的tlp中的其他变体字段提供内部保护,因为变体字段的端到端完整性不是由ECRC维持的。

数据链路层没有内部TLP可见性

由于数据链路层不处理TLP头(它根据物理层的指示确定TLP的开始和结束),因此它不知道TLP摘要字段的存在,只是将其作为TLP的一部分传递给事务层。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重大发现!看Apache与nginx工作模型,享web服务幸福人生

文章目录 文章相关连接如下: Web 服务基础介绍ApacheApache prefork 模型 Apache worker 模型Apache event模型 Nginx-高性能的 Web 服务端nginx源码安装平滑升级和回滚平滑升级步骤:回滚步骤 nginx启动文件 文章相关连接如下: 如果想更多了…

【GH】【EXCEL】P4: Chart

文章目录 data and chartdonut chart (radial chart)Radial Chart bar chartBar Chart line chartLine Chart Scatter ChartScatter Chart Surface ChartSurface Chart Chart DecoratorsChart Decorators Chart GraphicsChart Graphics data and chart donut chart (radial cha…

《面板变系数模型及 Stata 具体操作步骤》

目录 一、文献综述 二、理论原理 三、实证模型 四、稳健性检验 五、程序代码及解释 六、代码运行结果 一、文献综述 在经济和社会科学研究领域,面板数据模型因其能够同时考虑个体和时间维度的信息而被广泛应用。传统的面板数据模型通常假设系数是固定的&#…

1.初识redis

文章目录 1.认识redis1.1 mysql和redis 对比1.2分布式系统1.2.1单机架构与分布式架构1.2.2数据库分离(应用服务器和存储服务器分离)与负载均衡1.2.3负载均衡器1.2.4 数据库读写分离1.2.5 数据库服务器引入缓存1.2.6数据库分库分表1.2.7 引入微服务 2.常见概念解释2.1 应用(Appl…

GoModule

GOPATH 最早的就是GOPATH构建模式, go get下载的包都在path中的src目录下 src目录是源代码存放目录。 package mainimport ("net/http""github.com/gorilla/mux" )func main() {r : mux.NewRouter()r.HandleFunc("/hello", func(w h…

iptables流量走向图

关联教学 https://www.bilibili.com/video/BV1dw411J7Qk/?spm_id_from333.337.search-card.all.click

7.2 算法设计与分析

分治法(考的概率较低) 回溯法(考的概率较低) 动态规划法(考的概率较高) 1

第四届机电一体化、自动化与智能控制国际学术会议(MAIC 2024)

目录 大会官网 会议简介 组织机构 大会主席 程序委员会主席 主讲嘉宾 征稿主题 参会说明 大会官网 http://www.icmaic.org 会议简介 第四届机电一体化、自动化与智能控制国际学术会议(MAIC 2024)将于2024年9月27-29日在中国成都召开。MAIC 20…

高性能MySQL04_操作系统和硬件优化

1. 从软件本身和它运行的典型工作负载来看,MySQL通常也更适合运行在廉价硬件上 2. 基本资源 2.1. CPU 2.2. 内存 2.3. 磁盘 2.4. 瓶颈 2.5. 网络资源 3. CPU 3.1. 最常见的瓶颈是CPU耗尽 3.2. 检查CPU使用率来确定工作负载是否受CPU限制 3.3. 低延迟&…

机器人学——正向运动学(机械臂)

Manipulator Forward Kinematics 机械臂基础概念 Joint and Link 连杆长度、连杆夹角 连杆偏距与关节角 移动关节看距离、旋转关节看角度 如何在杆上建立坐标系 地杆(link0)坐标系的建立 末端杆件坐标系的建立 DH表达法 如何计算出两杆之间的变换矩阵…

Qt鼠标键盘事件监听

普通的程序中. 鼠标事件监听 要监听鼠标事件,你可以使用QMouseEvent类,它提供了多种类型的鼠标事件,如QMouseEvent::MouseButtonPress、QMouseEvent::MouseButtonRelease、QMouseEvent::MouseMove等。 但是离开程序后就很难监听到&#xff0c…

机器学习第十一章--特征选择与稀疏学习

一、子集搜索与评价 我们将属性称为 “特征”(feature),对当前学习任务有用的属性称为 “相关特征”(relevant feature)、没什么用的属性称为 “无关特征”(irrelevant feature).从给定的特征集合中选择出相关特征子集的过程&…

单位订餐小程序开发:便捷高效,重塑职场餐饮新体验

随着移动互联网技术的飞速发展,各行各业都在积极探索数字化转型之路,以提升工作效率与用户体验。在单位日常运营中,餐饮管理作为保障员工基本生活需求的重要环节,其便捷性、高效性直接关系到员工的工作满意度与整体氛围。因此&…

鸿蒙内核源码分析(Fork篇) | 一次调用,两次返回

笔者第一次看到fork时,说是一次调用,两次返回,当时就懵圈了,多新鲜,真的很难理解.因为这足以颠覆了以往对函数的认知, 函数调用还能这么玩,父进程调用一次,父子进程各返回一次.而且只…

linux memory cgroup的memory.move_charge_at_immigrate含义

1.内核文档 上面的例子说明: 最开始某个进程是在cgroup A中,后面要迁移到cgroup B中,那么进程的内存计数是否要完全迁入B中,就是通过memory.move_charge_at_immigrate控制,如果目标cgroup也就是B设置了1到该字段中&am…

猫头虎 分享:什么是Thrift?Thrift的简介、安装、用法详解入门教程

猫头虎 分享:什么是Thrift?Thrift的简介、安装、用法详解入门教程 今天猫头虎带大家一起探讨 一个在人工智能和分布式系统开发中十分重要的工具——Thrift。无论你是AI开发者还是大数据工程师,了解和掌握Thrift都将极大地提高你的跨语言服务…

高性能web服务器

目录 一、简介 (一)nginx-高性能的web服务端 (二)用户访问体验 二、I/O模型 (一)概念 (二)网络I/O模型 (三)阻塞型 I/O 模型 (四&#xf…

AI系列-黑神话:悟空

今天的朋友圈被黑神话悟空刷圈了,喝的咖啡都是黑神话联名版本。四年磨一剑的本地游戏,身边也不少小伙伴用金钱支持了,属于现象级的游戏产品。游戏引擎后续是否可以结合AI文生图,小说编写、文生视频。加快大作的快速生成 &#xff…

Effective-Java-Chapter8-方法

https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual/blob/dev/Chapter-8/Chapter-8-Introduction.md 准则一 检查参数的有效性 首先对于方法要写详细的文档,例如参数要求,抛出什么异常以源码为例: 又比如…

分享一个基于微信小程序的反诈科普平台springboot(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…