Skip to content

Latest commit

 

History

History
197 lines (147 loc) · 13.6 KB

File metadata and controls

197 lines (147 loc) · 13.6 KB

第6章:流量控制(Flow Control)

来源: MindShare PCI Express Technology 3.0, Chapter 6
页码: 第215-244页


本章内容概述

章节 主题
6.1 流量控制概念
6.2 流量控制缓冲区和信用量
6.3 初始流量控制通告
6.4 流量控制初始化
6.5 流量控制机制简介
6.6 流量控制示例
6.7 流量控制更新

6.1 流量控制概念

流量控制(Flow Control, FC)是PCIe架构中的关键机制,用于确保发送端不会向接收端发送超过其处理能力的事务层包(TLP)。这种基于信用量(Credit-Based)的流量控制机制消除了传统PCI总线中由于缓冲区溢出而导致的重试、断开和等待状态等低效问题。

流量控制逻辑的位置

流量控制逻辑位于PCIe设备的数据链路层(Data Link Layer)中,具体实现如下:

                    PCIe Device A                          PCIe Device B
                    ┌─────────────┐                        ┌─────────────┐
                    │ Device Core │                        │ Device Core │
                    └──────┬──────┘                        └──────┬──────┘
                           │                                       │
                    ┌──────┴──────┐                        ┌──────┴──────┐
                    │ PCIe-Core   │                        │ PCIe-Core   │
                    │ Hardware/   │                        │ Hardware/   │
                    │ SW Interface│                        │ SW Interface│
                    └──────┬──────┘                        └──────┬──────┘
                           │                                       │
    ┌──────────────────────┼──────────────────────┬─────────────────┼──────────────────┐
    │    Transaction Layer │                      │    Transaction Layer              │
    │         ┌──────────┐ │                      │         ┌──────────┐             │
    │         │ FC Counters│                      │         │ FC Counters│             │
    │         └────┬─────┘ │                      │         └────┬─────┘             │
    │              │       │                      │              │                   │
    │         ┌────┴─────┐ │                      │         ┌────┴─────┐             │
    │         │ FC Buffers│ │                      │         │ FC Buffers│             │
    │         └────┬─────┘ │                      │         └────┬─────┘             │
    └──────────────────────┼──────────────────────┴─────────────────┼──────────────────┘
                           │                                       │
    ┌──────────────────────┼──────────────────────┬─────────────────┼──────────────────┐
    │    Data Link Layer   │                      │    Data Link Layer                │
    └──────────────────────┼──────────────────────┴─────────────────┼──────────────────┘
                           │                                       │
    ┌──────────────────────┼──────────────────────┬─────────────────┼──────────────────┐
    │    Physical Layer    │        Link          │    Physical Layer                 │
    │       (TX)           │◄────────────────────►│       (RX)                        │
    └──────────────────────┘                      └─────────────────┘

图6-1:流量控制逻辑的位置

流量控制概述


6.2 流量控制缓冲区和信用量

6.2.1 VC流量控制缓冲区组织

流量控制缓冲区针对端口支持的每个虚拟通道(VC, Virtual Channel)资源实现。每个VC流量控制缓冲区在接收端按照流经该虚拟通道的事务类别进行管理:

事务类别 包含的事务类型
发布事务(Posted Transactions) 存储器写(Memory Writes)和消息(Messages)
非发布事务(Non-Posted Transactions) 存储器读(Memory Reads)、配置读写(Configuration Reads/Writes)、I/O读写(I/O Reads/Writes)
完成(Completions) 读完成和写完成

此外,每个类别又细分为头部(Header)和数据(Data)两部分,共形成六个不同的缓冲区

  • PH (Posted Header) - 发布请求头部
  • PD (Posted Data) - 发布请求数据
  • NPH (Non-Posted Header) - 非发布请求头部
  • NPD (Non-Posted Data) - 非发布请求数据
  • CPLH (Completion Header) - 完成头部
  • CPLD (Completion Data) - 完成数据
                    PCIe Device A                          PCIe Device B
                    ┌─────────────┐                        ┌─────────────┐
                    │ Device Core │                        │ Device Core │
                    └──────┬──────┘                        └──────┬──────┘
                           │                                       │
                    ┌──────┴──────┐                        ┌──────┴──────┐
                    │ PCIe-Core   │                        │ PCIe-Core   │
                    │ Hardware/   │                        │ Hardware/   │
                    │ SW Interface│                        │ SW Interface│
                    └──────┬──────┘                        └──────┬──────┘
                           │                                       │
    ┌──────────────────────┼──────────────────────┬─────────────────┼──────────────────┐
    │    Transaction Layer │                      │    Transaction Layer              │
    │                      │                      │                                   │
    │  ┌───────────────────┴──────┐        ┌──────┴───────────────────┐             │
    │  │   Flow Control Buffers   │        │   Flow Control Buffers   │             │
    │  │       (Receiver)         │        │       (Receiver)         │             │
    │  │                          │        │                          │             │
    │  │   ┌───┐ ┌───┐ ┌───┐     │        │   ┌───┐ ┌───┐ ┌───┐     │             │
    │  │   │PH │ │NPH│ │CPLH│     │        │   │PH │ │NPH│ │CPLH│     │             │
    │  │   └───┘ └───┘ └───┘     │        │   └───┘ └───┘ └───┘     │             │
    │  │   ┌───┐ ┌───┐ ┌───┐     │        │   ┌───┐ ┌───┐ ┌───┐     │             │
    │  │   │PD │ │NPD│ │CPLD│     │        │   │PD │ │NPD│ │CPLD│     │             │
    │  │   └───┘ └───┘ └───┘     │        │   └───┘ └───┘ └───┘     │             │
    │  │     P     NP    CPL     │        │     P     NP    CPL     │             │
    │  └────────────────────────┘        └────────────────────────┘             │
    └──────────────────────────────────────────────────────────────────────────┘
    
    图例: P = Posted(发布请求), NP = Non-Posted(非发布请求), CPL = Completion(完成)
          PH = Posted Header, PD = Posted Data
          NPH = Non-Posted Header, NPD = Non-Posted Data
          CPLH = Completion Header, CPLD = Completion Data

图6-2:流量控制缓冲区组织

FC初始化

6.2.2 流量控制信用量

接收端以称为**流量控制信用量(Flow Control Credits, FCCs)**的单位报告缓冲区空间。信用量的单位值定义如下:

缓冲区类型 信用量单位值
头部信用量(Header credits) 最大头部大小 + 摘要(Digest)
- 完成:4个双字(DWs)
- 请求:5个双字(DWs)
数据信用量(Data credits) 4个双字(16字节对齐)

注意:流量控制DLLP本身不需要流量控制信用量,因为它们起源于数据链路层并在该层终止,不使用事务层缓冲区。


6.3 初始流量控制通告

6.3.1 流量控制通告概述

在流量控制初始化期间,PCIe设备通过流量控制信用量"通告"其缓冲区大小。PCIe还定义了某些缓冲区所需的**无限流量控制信用量(Infinite Flow Control Credit)**值。通告无限缓冲区空间的接收端实际上保证其缓冲区永远不会溢出。

6.3.2 最小和最大流量控制通告

规范定义了不同流量控制缓冲区类型可报告的最小信用量数量:

表6-1:所需的最小流量控制通告

信用量类型 最小通告值
发布请求头部(PH) 1单位。信用值 = 1个4DW头部 + 摘要 = 5DW
发布请求数据(PD) Max_Payload_Size最大可能设置对应的信用量。例如:如果支持的最大Max_Payload_Size值为1024字节,则最小允许初始信用值为040h
非发布请求头部(NPH) 1单位。信用值 = 1个4DW头部 + 摘要 = 5DW
非发布请求数据(NPD) 1单位。信用值 = 4DW。
2单位。支持AtomicOp路由或AtomicOp完成者能力的接收端信用值为02h
完成头部(CPLH) 1单位。信用值 = 1个3DW头部 + 摘要 = 4DW;用于支持P2P的根复合体和交换机。
无限单位。初始信用值 = 全0;用于不支持P2P的根复合体和端点
完成数据(CPLD) n单位。Max_Payload_Size最大可能设置值或最大读请求大小(取较小者)除以FC单位大小(4DW);用于支持P2P的根复合体和交换机。
无限单位。初始信用值 = 全0;用于不支持P2P的根复合体和端点

表6-2:最大流量控制通告

信用量类型 最大通告值
发布请求头部(PH) 128单位。128信用 @ 5 DWs = 2,560字节
发布请求数据(PD) 2048单位。Max_Payload_Size值(4096字节)包括设备支持的所有功能(8个)除以信用大小(4 DWs)= 32,768字节
2048信用 @ 4 DWs = 32,768字节
非发布请求头部(NPH) 128单位。128信用 @ 5 DWs = 2,560字节
非发布请求数据(NPD) 作者未能找到非发布数据最大信用量的精确值。数据列出的最大信用量为2048。然而,更合理的方法可能使用非发布头部限制128信用,因为非发布数据总是与非发布头部相关联
完成头部(CPLH) 128单位。128信用 @ 5 DWs = 2,560字节。这是不发起事务的端口的限制(例如,支持P2P的根复合体和交换机)。
无限单位。初始信用值 = 全0;用于发起事务的端口(例如,不支持P2P的根复合体和端点)
完成数据(CPLD) 2048单位。Max_Payload_Size值(4096字节)包括设备支持的所有功能(8个)除以信用大小(4 DWs)= 32,768字节
2048信用 @ 4 DWs = 32,768字节
无限单位。初始信用值 = 全0;用于发起事务的端口(例如,不支持P2P的根复合体和端点)

6.3.3 无限信用量


本章图片附录

以下是本章相关的原文图片:

图6-1.流量控制概述.png

图6-1.流量控制概述.png

图6-2.FC初始化.png

图6-2.FC初始化.png

图6-3.FC更新.png

图6-3.FC更新.png

图6-4.FC信用.png

图6-4.FC信用.png