PCIe总线-MPS MRRS RCB参数介绍(四)

本文详细解释了PCIe总线中MaxPayloadSize(MPS)、MaxReadRequestSize(MRRS)和ReadCompletionBoundary(RCB)的概念,包括它们如何影响数据传输、设备协商过程以及在不同处理器和设备上的应用实例。通过lspci命令展示了实际配置中的参数设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概述

PCIe总线的存储器写请求、存储器读完成等TLP中含有数据负载,即Data Payload。Data Payload的长度和MPS(Max Payload Size)、MRRS(Max Read Request Size)和RCB(Read Completion Boundary)相关。

2.MPS

MPS(Max Payload Size)表示TLP报文中数据负载的长度。PCIe总线规MPS的最大值为4KB,但PCIe设备并不一定都能够按照最大长度发送数据负载。因此实际使用的MPS由链路两端的设备Function协商决定。当发送的数据长度超过MPS时,这段数据会被分割成多个TLP报文发送,若接收的TLP报文数据负载超过MPS,则接收端会认为这是一个非法的TLP。对于存储器读完成TLP报文,数据负载的长度也不能超过MPS,如果超过MPS,则需要发送多个读完成报文,同时也要满足RCB的要求。

在PCIe设备配置空间中,PCI Express Capability Structure中有两个寄存器,Device Capabilities寄存器记录了PCIe设备Function支持的MPS,Device Control寄存器保存主机设置的MPS。对于多Function的PCIe设备,每个Function的MPS可能不同。

Device Capabilities寄存器如下图所示,主机通过该寄存器获取当前PCIe设备Function的MPS大小。

Device_Capabilities_Register

Max_Payload_Size Supported的值和MPS对应关下如下:

取值MPS
000b128 bytes max payload size
001b256 bytes max payload size
010b512 bytes max payload size
011b1024 bytes max payload size
100b2048 bytes max payload size
101b4096 bytes max payload size
110bReserved
111bReserved

Device Control寄存器如下图所示,主机将协商好的MPS写入该该寄存器。实际使用的MPS通常是链路两端设备Function中最小的MPS。

Device_Control_Register

在多数X86处理其系统的MCH或者ICH中,MPS参数为128B,而在PowerPC处理器系统中,MPS大多为256B。目前在大多数EP中,MPS参数不大于512B,因此很多RC的MPS也不大于512B。

MPS参数的大小与PCIe总线的传送效率成正比,MPS越大,带宽利用率越低,反之带宽利用率越高。MPS参数的大小与实时性成反比,MPS越大,某个Function占用总线的时间过长,导致实时性降低,反之实时性越高,对于实时性要求高的PCIe设备Function,MPS参数不应该设置的过大。

3.MRRS

MRRS(Max Read Request Size)参数决定了PCIe设备Function使用存储器读请求,一次能从目标设备读取多少数据,即PCIe设备Function的读请求TLP中的Lewngth字段不能超过MRRS。若PCIe设备Function使用存储器读请求读取的数据长度超过了MRRS,则需要发送多个存储器读请求TLP。PCIe总线规定MRRS最大值为4KB,通常情况下PCIe设备Function的MRRS都会小于这个值。

在PCIe设备配置空间中,PCI Express Capability Structure的Device Control寄存器用于设置MRRS。对于多Function的PCIe设备,每个Function的MRRS可能不同。若PCIe设备Function的Max_Read_Request_Size固定为128字节,则Max_Read_Request_Size位域可实现为只读,且值为000b。

Device_Control_Register

Max_Read_Request_Size的值和MRRS对应关下如下:

取值MRRS
000b128 bytes maximum Read Request size
001b256 bytes maximum Read Request size
010b512 bytes maximum Read Request size
011b1024 bytes maximum Read Request size
100b2048 bytes maximum Read Request size
101b4096 bytes maximum Read Request size
110bReserved
111bReserved

MRRS和MPS没有关系,MPS描述的是TLP中数据负载的实际长度,而MRRS描述的是存储器读请求TLP需要读取的数据长度,此时TLP中没有有效数据,当返回存储器读完成报文时,数据负载的长度不能大于MPS。

4.RCB

RCB(Read Completion Boundary)定义了一个存储器读请求需要多个存储器读完成报文响应时,完成报文数据地址对齐的边界。RC的RCB参数可以为64字节或者128字节,由硬件自身决定,系统软件可以通过配置空间获取这个值,其他PCIe设备固定为128字节

RCB(Read Completion Boundary)定义在PCI Express Capability Structure的Link Control寄存器中,如下图所示,0表示64字节,1表示128字节,默认为64字节。对于RC只读属性,由硬件设置好,系统软件读取即可,硬件可设置为64字节或者128字节。对于Switch则没有意义,硬件设置为0。对于EP或者桥为读写属性,其主要反应RC的RCB值,当RC的RCB值为128字节,系统软件需要设置为128字节,使EP或者桥能更好的优化传输,提高传输效率,EP或者桥自身的RCB值固定为128字节。

RCB

如果存储器读请求只需要一个完成报文响应,则无需考虑RCB,数据长度不超过MPS即可;若需要多个完成报文响应,则需要考虑完成报文数据地址对齐的边界,即RCB,具体的规则如下:

  1. 第一个完成报文的数据结束地址必须对齐到RCB的整数倍。
  2. 中间完成报文的数据起始和结束地址必须对齐到RCB的整数倍。
  3. 最后一个完成报文的起始地址必须对齐到RCB的整数倍。

下面举几个例子进行说明:

  1. EP通过存储器读请求,读取RC的0x10000地址处的数据,数据长度为0xC0字节(192字节),RC的RCB为64字节。MPS和MRRS都为256字节。则RC的完成报文数据地址和长度有以下几种可能:
方式1方式2方式3方式4
0x10000-0x100BF:1920x10000-0x1007F:1280x10000-0x1003F:640x10000-0x1003F:64
0x10080-0x100BF:640x10040-0x100BF:1280x10040-0x1007F:64
0x10080-0x100BF:64
  1. EP通过存储器读请求,读取RC的0x10000地址处的数据,数据长度为0xC0字节(192字节),RC的RCB为128字节。MPS和MRRS都为256字节。则RC的完成报文有以下几种可能:
方式1方式2
0x10000-0x100BF:1920x10000-0x1007F:128
0x10080-0x100BF:64
  1. EP通过存储器读请求,读取RC的0x10020地址处的数据,数据长度为0x100字节(256字节),RC的RCB为64字节。MPS和MRRS都为256字节。则RC的完成报文有以下几种可能:
方式1方式2方式3方式4方式5方式6
0x10020-0x1011F:2560x10020-0x1003F:320x10020-0x1003F:320x10020-0x1003F:320x10020-0x1003F:320x10020-0x1003F:32
0x10040-0x1011F:2240x10040-0x1007F:640x10040-0x1007F:640x10040-0x1007F:640x10040-0x100BF:128
0x10080-0x1011F:1600x10080-0x100BF:640x10080-0x100BF:640x100C0-0x1011F:96
0x100C0-0x1011F:960x100C0-0x100FF:64
0x10100-0x1011F:32
方式7方式8方式9方式10方式11方式12
0x10020-0x1007F:960x10020-0x1007F:960x10020-0x1007F:960x10020-0x1007F:960x10020-0x100BF:1600x10020-0x100FF:224
0x10080-0x1011F:1600x10080-0x100FF:1280x10080-0x100BF:640x10080-0x100BF:640x100C0-0x1011F:960x10100-0x1011F:32
0x10100-0x1011F:320x100C0-0x1011F:960x100C0-0x100FF:64
0x10100-0x1011F:32
  1. RC通过存储器读请求,读取EP的0x10020地址处的数据,数据长度为0x100字节(256字节),EP的RCB固定为128字节。MPS和MRRS都为256字节。则EP的完成报文有以下几种可能:
方式1方式2方式3方式4
0x10020-0x1011F:2560x10020-0x1007F:960x10020-0x1007F:960x10020-0x100FF:224
0x10080-0x1011F:1600x10080-0x100FF:1280x10100-0x1011F:32
0x10100-0x1011F:32

5.应用

如下图所示,使用lspci命令,查看虚拟机里面PCIe桥的某个Root Ports的配置空间,可以看到MPS和MRRS都为128字节,RCB为64字节。

lspci

参考资料

  1. PCIEXPRESS体系结构导读
  2. PCI Express technology 3.0
  3. PCI Express® Base Specification Revision 5.0 Version 1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值