来源: http://www.ssdfans.com/?p=3704


Host与PCIe设备之间,或者PCIe设备与设备之间,数据传输都是以Packet形式进行的。事务层根据上层(软件层或者应用层)请求(Request)的类型、目的地址和其它相关属性,把这些请求打包,产生TLP,也就是Transaction Layer Packet。然后这些TLP往下,经历数据链路层,物理层,最终到达目标设备。

根据软件层的不同请求,事务层产生四种不同的TLP请求:

1. Memory

2. IO

3. Configuration

4. Message

前三种分别用于访问内存空间、IO空间、配置空间,这三种请求在PCI或者PCI-X时代就有了;最后的Message请求是PCIe新加的。在PCI或者PCI-X时代,像中断、错误以及电源管理相关信息,都是通过边带信号(sideband signal)进行传输的,但PCIe干掉了这些边带信号线,所有的通讯都是走带内信号,即通过Packet传输,因此,过去一些由边带信号线传输的数据,比如中断信息、错误信息等,现在就交由Message来传输了。

我们知道,一个设备的物理空间,可以通过内存映射(Memory map)的方式映射到Host的主存,有些空间还可以映射到Host的IO空间(如果Host存在IO空间的话)。但新的PCIe设备(区别于Legacy PCIe设备)只支持内存映射,之所以还存在访问IO空间的TLP,完全是为了照顾那些老设备。以后IO映射的方式会逐渐取消,为减轻学习压力,我们以后看到IO 相关的东西,大可或略之。

所有的配置空间(Configuration)的访问,都是Host发起的,确切的说是RC发起的,往往只在上电枚举和配置阶段会发起Configuration的访问,这样的TLP很重要,但不是常态; Message也是一样,只有有中断,或者有错误等情况下,才会有Message TLP,属非主流。PCIe线上主流传输的是Memory访问相关的TLP,Host与device,或者device与device之间,数据都是在彼此的Memory之间(抛掉IO)交互,因此,这种TLP是我们最常见的。

这四种请求,如果需要对方响应的,我们叫做Non-Posted的TLP;如果不期望对方给响应的,我们称之为Posted TLP。Post,有”邮政”的意思,我们只管把信投到邮箱,能不能到达对方,就取决于邮递员了。Posted TLP,就是不指望对方回复(信能不能收到都是个问题);Non-Posted TLP,就是要求对方务必回复。

哪些TLP是Posted,哪些又是non-posted的呢?像Configuration和IO访问,无论读写,都是Non-posted的,这样的请求必须得到设备的响应;Message TLP是Posted;Memory Read必须是Non-posted,我读你数据,你不返回数据(返回数据也是响应),那肯定不行的。所以,Memory Read必须得到响应。而Memory Write是Posted,我数据传给你,无需回复,这样Host或者Device可以不等对方回复,趁早把下一笔数据写下去,这样一定程度上提高了写的性能。有人会担心如果没有得到对方的响应,发送者就没有办法知道数据究竟有没有成功写入,就有丢数据的风险。虽然这个风险存在(概率很小),但数据链路层提供了ACK/NAK机制,一定程度上能保证TLP正确交互,因此能很大程度减小数据写失败的可能。

Table 4.1

所以,只要记住只有Memory Write和Message两种TLP是Posted就可以了。

Memory Read Lock是历史的遗留物, Native PCIe设备已经抛弃了这个,存在的意义完全是为了兼容Legacy PCIe设备。和IO一样,我们以后也忽略。能不看的就不看,PCIe东西本来就多,不要被这些过时没用的东西挡着我们学习的道路。

Configuration一栏,看到有Type 0和Type 1。我们在之前的拓扑结构中,看到除了Endpoint之外,还有Switch,他们都是PCIe设备,但配置种类不同,因此用Type 0和Type 1区分。

Table 4.2

这样,Request TLP是不是清爽点?

对Non-Posted的Request,是一定需要对方响应的,对方是通过返回一个Completion TLP来作为响应的。对Read Request,响应者通过Completion TLP返回请求者所需的数据,这种Completion TLP包含有效数据;对Write Request(现在只有Configuration Write了)来说,响应者通过Completion TLP告诉请求者执行状态,这样的Completion TLP不含有效数据。

因此, PCIe里面所有的TLP = Request TLP + Completion TLP

Table 4.3

看个Memory Read的例子:

图4.1

例子中,Switch B下面的某个Endpoint想读Host内存的数据,因此,它在事务层上生成一个Memory Read TLP,该MRd一路向上,翻过B,越过A,最终到达RC。RC收到该Request,就到内存中取该Endpoint所需的数据,RC通过Completion with Data TLP(CplD)返回数据,原路返回,直到Endpoint。

一个TLP,最多只能携带4KB有效数据,因此,上例子,如果Endpoint需要读16KB的数据,RC必须返回4个CplD给Endpoint。注意,Endpoint只需发1个MRd就可以了。

再看个Memory Write的例子:

图4.2

该例子中,Host想往某个Endpoint写入数据,因此RC在其事务层生成一个Memory Write TLP(要写的数据在该TLP中),翻过A,越过B,直到目的地。前面说过Memory Write TLP是Posted的,因此,Endpoint收到数据后,是不需要返回Completion TLP(如果这个时候返回Completion TLP,反而是画蛇添足)。

同样的,由于一个TLP只能携带4KB数据,因此Host想往Endpoint上写入16KB数据,RC必须发送4个MWr TLP。


09/21/2017 Thu


http://www.taodudu.cc/news/show-4553925.html

相关文章:

  • 老男孩读PCIe之五:TLP结构
  • tcp协议系列文章(3):TLP算法
  • PCIE TLP报文
  • PCIE调试笔记理解--TLP理解
  • Mongodb 安装详解
  • 详细图解mongodb下载、安装、配置与使用
  • mongoDB简记
  • mongodb数据库的下载、安装、配置与使用
  • MongonDB下载、安装(Windows)、配置详解
  • 使用KlipC避开平台扫止损,控制止盈和延迟订单成交
  • 闵帆老师《论文写作》课学习心得
  • 论文写作经验 集萃
  • 论文写作课程内容总结
  • 存储过程排版工具_文案创作者必备的7个写作辅助工具类网站,记得收藏
  • 《控制系统设计指南》_George Ellis著_部分章节读书笔记
  • 读书笔记 节选示例
  • 深入浅出数据分析读书笔记
  • 多模型读后感【1】
  • The Phoenix Project 读书笔记00
  • 【方法】如何高效率的阅读一篇论文
  • 怎么样读论文?
  • 如何读一篇论文
  • 一文读懂汉明码
  • 《JavaScript DOM 编程艺术》读书笔记
  • java 邮件 已读回执_java – 在Firebase群组消息传递应用中实施已读回执功能
  • 读书清单2020
  • 读 Herbert George Wells 之 A Short History of The World
  • mit2021计算机竞赛女生,2021全国大学生计算机系统能力大赛操作系统设计赛第一场研讨会隆重举行...
  • 益聚星荣:阿里巴巴的“电商帝国”正走向衰落
  • CSDN高校俱乐部“名师高校行”——贵州遵义站

老男孩读PCIe之四:TLP类型相关推荐

  1. 老男孩读PCIe介绍系列

    老男孩读PCIe系列 文章目录 老男孩读PCIe系列 老男孩读PCIe之一:从PCIe速度说起 老男孩读PCIe之二:PCIe拓扑结构 老男孩读PCIe之三:PCIe分层结构 老男孩读PCIe之四:T ...

  2. [转]老男孩读pcie

    转自 http://www.ssdfans.com/blog/2017/08/03/%E8%80%81%E7%94%B7%E5%AD%A9%E8%AF%BBpcie%E4%B9%8B%E4%B8%80 ...

  3. 老男孩读PCIe之一:从PCIe速度说起

    老男孩读PCIe之一:从PCIe速度说起 Posted on 2017年8月3日 by SSD Fans 原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢! 从今天开 ...

  4. 老男孩读PCIe之五:TLP结构

    来源: http://www.ssdfans.com/?p=3683 无论Request TLP,还是作为回应的Completion TLP,它们模样都差不多: 图5.1 TLP主要由三部分组成:He ...

  5. PCIe扫盲——TLP Header详解(一)

    转:http://blog.chinaaet.com/justlxy/p/5100053352 事务层包(TLP)的一般格式如下图所示: 前面的文章介绍过,TLP Header为3DW或者4DW,Da ...

  6. 30.PCIe扫盲——TLP Header详解(一)

    事务层包(TLP)的一般格式如下图所示: 前面的文章介绍过,TLP Header为3DW或者4DW,Data Payload为1-1024DW,最后的TLP Digest(ECRC)是可选的,为1DW ...

  7. ITK:读未知的图像类型

    ITK:读未知的图像类型 内容提要 C++实现代码 内容提要 读取一张未知图片 C++实现代码 #include "itkImageFileReader.h" #include & ...

  8. PCIe扫盲——TLP路由(Routing)基础

    转:http://blog.chinaaet.com/justlxy/p/5100053323 首先来分析一个例子,如下图所示: 当包(Packet)到达Switch的输入端口(Ingress Por ...

  9. PCIe TPH (TLP Processing Hints) 介绍

    ✨1. TPH 基本介绍   TLP Processing Hints,直译过来是事务处理提示,英文简写为TPH.TPH最初由PCIe 2.1引入,是请求事务TLP头标中的一个可选配的特性,适用于存储 ...

最新文章

  1. 说时间不够用,CTO怒了!让我学习:GTD时间管理,番茄工作法,三八理论
  2. AlertDialog.Builder setCancelable用法
  3. 容齐的身世_白发容齐真正身份
  4. 域socket(domain socket)和ipsocket(TCP/IP socket)区别
  5. C#中类与结构体的区别
  6. 深入浅出SQL(1)
  7. 腾讯面试题:一条SQL语句执行得很慢的原因有哪些?
  8. 抓包,反抓包,反反抓包
  9. Code[VS]1159 最大全0子矩阵
  10. 单片机 重要英文缩写解释
  11. 考研经验贴(一):什么可以让你考研坚持到底
  12. 【手写】一些情景题 记录
  13. 密码暴力破解漏洞(kali crunch)
  14. NLP中人类的沟通模式
  15. react-native抽奖转盘制作
  16. 编写ATL工程实现ActiveX控件调用cryptoAPI接口(三)------------AES对称加密与解密
  17. 夜游模式探索推动文旅融合可持续发展
  18. 用数字 5,5,5,1 ,进行四则运算,每个数字当且仅当用一次,要求运算结果值为 24
  19. 蓝牙4.0--Android BLE(二)BleLib开源库
  20. 记大型商业软件国土档案管理信息系统之系统简介

热门文章

  1. R语言可视化进阶-高级点图、气泡图、动态图、图形叠加与相关图
  2. 记事本打开文件乱码的问题
  3. PTA - 数据库合集38
  4. 支付宝手机网页支付接口调用
  5. SKYLIN TerraExplorer Pro 后台控制导航控件的显示隐藏(指北针、放大、缩小等)
  6. 如何选型PLM软件?PLM选型时注意哪些事项呢?
  7. 建设“智慧城市”、“智慧社区”远程控制开关智能微型断路器哪家好?——安科瑞 严新亚
  8. 苹果手机html吊起拍照,苹果手机照相技巧
  9. KONG管理界面KONGA安装使用
  10. 目标跟踪之LTMU:High-Performance Long-Term Tracking with Meta-Updater环境配置及代码运行