当前位置: 首页 > news >正文

PCIe学习笔记(25)

数据完整性

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的一部分传递给事务层。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • OpenHarmony基础组件—图片加载ImageKnife
  • 登录 k8s-Dashboard 显示 Your connection is not private
  • 多线程并行
  • 水库大坝安全预警系统的创新与应用
  • 职场那些事:应对施暴者的智慧
  • 代码随想录训练营 Day36打卡 动态规划 part04 1049. 最后一块石头的重量II 494. 目标和 474. 一和零
  • 流动会场:声音与空间完美融合,重新定义城市多功能场所—轻空间
  • 虚拟化平台kvm架构 部署kvm虚拟化平台
  • OpenCV几何图像变换(3)计算透视变换矩阵函数getPerspectiveTransform()的使用
  • Nginx源码安装与进阶负载均衡
  • SSH 隧道方式连接 MySQL 服务器
  • 元数据管理gravitino学习
  • C++笔记---类和对象(下)
  • css高级
  • Unity求向量和平面的交点
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [nginx文档翻译系列] 控制nginx
  • docker容器内的网络抓包
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • nfs客户端进程变D,延伸linux的lock
  • Python socket服务器端、客户端传送信息
  • Redis在Web项目中的应用与实践
  • SOFAMosn配置模型
  • spring cloud gateway 源码解析(4)跨域问题处理
  • yii2中session跨域名的问题
  • 给Prometheus造假数据的方法
  • 记一次删除Git记录中的大文件的过程
  • 力扣(LeetCode)56
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 延迟脚本的方式
  • 7行Python代码的人脸识别
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 容器镜像
  • ​数据链路层——流量控制可靠传输机制 ​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (三)c52学习之旅-点亮LED灯
  • (三)模仿学习-Action数据的模仿
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (数据结构)顺序表的定义
  • (四)linux文件内容查看
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)Linux+Windows下安装ffmpeg
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .NET Core 2.1路线图
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NetCore 如何动态路由
  • .NET的微型Web框架 Nancy