• PCIe系列专题之二:2.2 TLP事务处理方式解析


    一、故事前传

    之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transaction layer), 数据链路层(Data link layer)和物理层(Physical layer)。

    较为详细解释请见之前的文章:

    1. PCIe技术概述;

    2.0 PCIe Transaction layer事务层概述;

    2.1 PCIe Transaction layer事务层TLP的前世今生。

    二、TLP事务处理方式

    看过前面TLP的前世今生精彩大剧之后,想必大家应该都知道TLP(Transaction Layer Packet)在事务层的角色。如果不知道,就默默翻一下前面的文章哈~

    TLP很重要,也有很多种类。我们先来个全局的认识,看看PCIe到底定义了多少TLP种类呢?瞅下面的表格~

    这么多TLP啊,每个都是什么含义,到底是干什么的呢?不急,我们慢慢的揭开他们神秘的面纱~

    之前的介绍中,我们提到过PCIe中总线事务有两大类:Non-Posted和Posted:

    • Non-Posted: 需要completion返回响应包;

    • Posted: 不需要completion返回响应包

    注:Memory Read Lock只适用在兼容PCI/PCI-X的陈旧设备中,在这里就先忽略了。

    我们先从Non-Posted和Posted阵营中的各挑选一些代表介绍一下TLP事务的具体作用。

    Non-Posted Memory Read:

    步骤:

    1. PCIe端初始化Memory Read请求;

    2. 经过Switch到达Root Complex;

    3. Root收到Memory Read之后就在系统缓存中抓取数据并回传完成报告(Completion);

    4. 同样经过Switch到达设备端,设备端收到完成报告后结束此次事务请求。

    Non-Posted IO and Configuration Write:

    步骤:

    1. Root初始化IO Write请求;

    2. 请求和数据经过Switch到达设备端;

    3. 设备端收到IO Write的请求以及数据之后,开始讲数据写入到PCIe设备中,并回传完成报告(Completion);

    4. 同样经过Switch到达Root,Root收到完成报告后结束此次事务请求。

    注意:Non-Posted写请求只能由处理器(也可以理解为Root端)发出!

    Posted Memory Write:

    步骤:

    1. Root初始化Memory Write请求;

      由于Memory write的请求是Posted方式,不要求有完成回报(Completion). 所以在Memory write请求发送之后,Root不用等任何回应,就可以继续做其他事情啦~

    2. PCIe设备端收到Memory Write请求之后就开始专心执行写入动作,也不必准备完成回报(Completion).

      不需要完成回报(Completion)虽然可以加速事务处理的速度,从而提高系统性能。但是,如果在设备端出现Error,具体内容也不会回报给Root。而是会给Root发送一条信息让其转告系统软件有Error需要处理。

  • 相关阅读:
    Python 潮流周刊#54:ChatTTS 强大的文本生成语音模型
    Python入门笔记
    Docker 安装部署与基础操作
    Java IO---序列化和反序列化
    洛谷P2486 lct做法
    实验1机器学习之线性回归实验
    【MySQL数据库笔记 - 进阶篇】(二)索引
    Day18:C++飞机大战
    ui_cb.c
    vue 模板应用
  • 原文地址:https://blog.csdn.net/zhuzongpeng/article/details/126905335