PCIe总线的通信机制:当一个设备要想另一个设备进行读取通信时,请求方requester需要向另一个设备发送请求request,靶向方作为事件完成方completer,以complete Packet的形式返回数据或者错误信息。请求的形式有:内存(memory)、输入输出(IO),配置(Configuration)和消息(Message)

non-posted和posted的区别是是否仅仅将数据发送到接收方就完成动作,non_posted是指请求方发送了一个包含请求的Packet之后,还要得到一个包含completion的Packet的应答,posted指的是发出请求后,不需要completer发送一个包进行应答。显然,posted类型的操作对总线的利用效率更高。

事务层包(Transaction Layer Packet,TLP)的几种类型:

abbreviated :缩写

TLP的传输层示意图:

图中的示意图以发送和接收为例,用户层将数据发送到事务层,事务层给数据加上帧头,并在数据的结尾添加ECRC(端到端CRC校验)信息,再发送给数据链路层(Data Link Layer),护具链路层给接收到的TLP添加网络封包序号和数据链路层CRC校验结果,之后将数据发送到物理层,物理层给接收到的报添加其实和结束标志。

接收方反向操作。

事务层包的结构图为:

图中的TLP Digest即ECRC(End-to-End CRC),是可选项。此外,TLP的长度(包括其中的Header、Data和ECRC)是以DW(double word双字,即四个字节byte)为单位。

带回答的数据传输non-posted,包括Ordinary Read(正常读取)、Locked Read(锁存读取)、IO/Configuration Write(IO端口、配置写入),不带回应的传输为Memory Writes和Message Writes。

1、在Ordinary read(non_posted)时,终端endpoint向system memory系统内存空间发送读取请求(Read Request)

终端的读请求经过两个切换之后进入root,然后root对读请求的包packet进行解码,从解码结果中识别出操作地址,再向操作地址进行读取,将包含数据的completion packet(cplD包)发送到Endpoint。PCIe允许每个包的最大数据量(Max Data Payload)为4KB,但是实际上往往采用更小的Size(128,256,512,1024,2048)。因此,往往一个读请求对应多个ClpD,将大于设定的Size的数据分成多个包进行分包发送。此外,在root将数据发送给请求端方式根据请求数据中的BDF(Bus,device,Function)信息查找对应的endpoint设备.

2、对于posted-write

PCIe中的写操作都是posted的,因此请求方不需要完成方的Copletion信息,写请求有处理器Processor发出,Root接收到写请求指令后将数据通过写入信息通过switch写入到endpoint。由于没有返回Completion,在发生错误时,请求方不知道错误的发生。但是完成方completer会将错误记录到日志(log),然后向root发送报错记录的Message。

 关于事务层传输的优先级问题

考虑到一些传输对时间要求的问题,保证这一类数据包的优先发送,PCIe标准中为每一个包都分配了一个优先级,通过事务层包的Header中的TC【2:0】进行区别,(Traffic Class,传输等级),TC越大,传输优先级越高,对应的包也会优先发送。通常支持QoS(Quallition of Service)的PCIe总线系统,对于每一个Tc值都会有一个独立的VC(虚拟通道,viatual channel)相对应,VC就是一个buffer缓存,作用是缓存数据包。

在switch端,switch根据优先级进行包传输,即为端口仲裁(Arbitrition of Port),

PCIe事务层の详解(一)的更多相关文章

  1. (转)Spring事务管理详解

    背景:之前一直在学习数据库中的相关事务,而忽略了spring中的事务配置,在阿里面试时候基本是惨败,这里做一个总结. 可能是最漂亮的Spring事务管理详解 https://github.com/Sn ...

  2. 【Spring】——声明式事务配置详解

    项目中用到了spring的事务: @Transactional(rollbackFor = Exception.class, transactionManager = "zebraTrans ...

  3. 可能是最漂亮的Spring事务管理详解

    Java面试通关手册(Java学习指南):https://github.com/Snailclimb/Java_Guide 微信阅读地址链接:可能是最漂亮的Spring事务管理详解 事务概念回顾 什么 ...

  4. 可能是最漂亮的Spring事务管理详解 专题

    微信阅读地址链接:可能是最漂亮的Spring事务管理详解 事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允 ...

  5. 最漂亮的Spring事务管理详解

    SnailClimb 2018年05月21日阅读 7245 可能是最漂亮的Spring事务管理详解 Java面试通关手册(Java学习指南):github.com/Snailclimb/- 微信阅读地 ...

  6. Net Core中数据库事务隔离详解——以Dapper和Mysql为例

    Net Core中数据库事务隔离详解--以Dapper和Mysql为例 事务隔离级别 准备工作 Read uncommitted 读未提交 Read committed 读取提交内容 Repeatab ...

  7. Redis的事务功能详解

    Redis的事务功能详解 MULTI.EXEC.DISCARD和WATCH命令是Redis事务功能的基础.Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项: >Re ...

  8. spring事务管理(详解和实例)

    原文地址: 参考地址:https://blog.csdn.net/yuanlaishini2010/article/details/45792069 写这篇博客之前我首先读了<Spring in ...

  9. SpringBoot事务注解详解

    @Transactional spring 事务注解 1.简单开启事务管理 @EnableTransactionManagement // 启注解事务管理,等同于xml配置方式的 <tx:ann ...

随机推荐

  1. Markers

    immune pdf(file = paste0(outdir,"T_B_NK_feature.pdf")) VlnPlot(expr_1_4,features = c(" ...

  2. prometheus-pushgateway安装

    背景 当prometheus的server与target不在同一网段网络不通,无法直接拉取target数据,需要使用pushgateway作为数据中转点. 弊端 将多个节点数据汇总到 pushgate ...

  3. Spring Boot教程(十五)使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  4. 使用WebStorm运行vue项目

    在WebStorm中怎么打开一个已有的项目,这个不用多说,那么如何运行一个vue项目呢? 1.点击下图中右上角的红框. 2.在出现的弹框中选中左上角“+”下的“npm”,如下图所示. 3.选中第二步的 ...

  5. [CSP-S模拟测试]:数对(线段树优化DP)

    题目传送门(内部题96) 输入格式 第一行一个整数$n$,接下来$n$行每行三个整数$a_i,b_i,w_i$. 输出格式 一行一个整数表示最大权值和. 样例 样例输入: 54 4 12 3 31 5 ...

  6. android界面的滑动切换功能

    左右滑动切换是几乎所有应用中都会用到的功能.在这里将相关资源进行总结 (1)viewflipper结合手势检测进行左右滑动. http://www.cnblogs.com/hanyonglu/arch ...

  7. Linux小记 -- 更新系统软件包

    系统信息 操作系统:Ubuntu 18.04.2 LTS 内核版本:4.15.0-51-generic 何时需要更新 重新启动Ubuntu发现如下motd(message of tody),此时需要更 ...

  8. PTA编程总结一

    7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成“贰万叁仟壹百零捌”元.为了简化输出,用小写英文字 ...

  9. BFC块级格式

    BFC块级格式上下文,独立的一个渲染区域 1.同一个BFC的两个相邻盒子间的margin会重叠(垂直方向): 2.BFC内部的盒子在垂直方向上会一个接一个的放置: 3.每个子元素的左外边距与包含块的左 ...

  10. 在性能测试时使用nmon进行监控服务器性能

    在使用Jmeter进行性能测试,可以使用nmon进行服务器的监控. 一.nmon说明 nmon分为工具包和分析包(nmonanalyser) nmon安装很简单,根据服务器版本,下载相应的版本后,进行 ...