Linxu下确认PCIe配置信息

一、PCIE 信息获取

PCI-SIG的官方网站

lspci 是一个在 Linux 系统中使用的命令行工具,用于列出所有 PCI 总线及其连接的设备信息。PCI(Peripheral Component Interconnect)是一种用于连接计算机内部硬件设备的标准接口。lspci 命令通过读取系统的 PCI 配置空间来获取这些信息,并以用户友好的格式显示出来。

详细的使用方式可以通过man lspci查看。

以RTL8822CE设备为例进行以下讲解:
在这里插入图片描述

常用命令:

  • lspci -s 03:00.0 -vvv
  • lspci -s 03:00.0 -xxx
  • setpci

1.1 PCIe设备分配的资源

lspci -s 03:00.0 -vv | grep Region
在这里插入图片描述
PCIe Bar存储器空间操作:
busybox devmem 0xe0041000000
在这里插入图片描述

1.2 PCIe设备宽度与速度

pcie速度编码格式
PCIe 1.02.5GT/s8b/10b
PCIe 2.05GT/s8b/10b
PCIe 3.08GT/s128b/130b
PCIe 4.016GT/s128b/130b
PCIe 5.032GT/s128b/130b
PCIe 6.064 GT/sPAM4

吞吐量 = 传输速率 × 链路宽度 × 编码效率

  • PCIe Gen4,8条lane的PCIe Device,编码是128b/130b,传输速率是16GT/s
    吞吐量 = 16 * (128/130) * 8 = 126.03 Gbit/s = 15.754GB/s
  • RTL8822CE设备:Gen1、X1
    吞吐量 = 2.5GT/s × 1 × 8/10 = 4 Gb/s ≈ 250MB/s

lspci -s 03:00.0 -vv |grep Width
在这里插入图片描述

1.3 PCIe Max Payload Size 和 Max Read Request

lspci -s 03:00.0 -vv | grep MaxPayload
在这里插入图片描述

二、PCIE 性能

PCIe(Peripheral Component Interconnect Express)中的Data Payload(数据负载)是指在PCIe传输层协议(Transaction Layer Protocol,TLP)中包含的实际数据部分。在PCIe通信中,TLP是用于在PCIe设备之间传输数据的基本单位,而Data Payload则是这些TLP中包含的实际要传输的数据。

Data Payload的影响因素:

  • MPS(Max Payload Size)
  • MRRS(Max Read Request Size)
  • RCB(Read Completion Boundary)

前提条件是PCIe EP必须支持调整这些参数,并且PCIe 通信的两端经过的路径上的Switch节点也必须支持更大的值,否则也最终将协商为链路上设备支持的最大值中的最小的一个。

2.1 MPS(Max Payload Size)

MPS(Max Payload Size)是PCIe设备可以发送或接收的单个TLP中的最大数据负载量。MPS的大小会影响PCIe链路的带宽利用率和传输效率。较大的MPS可以减少TLP的数量,从而降低传输延迟并提高带宽利用率,但也会增加单个TLP的复杂性和处理时间。PCIe协议规定了MPS的最大值,但具体值可以由PCIe设备在初始化时通过协商确定。

2.1.1 MPS相关寄存器

在PCIe设备配置空间中,PCI Express Capability Structure包含Device Control寄存器和Device Capability寄存器。Device Capabilities寄存器记录了PCIe设备支持的MPS最大值,而Device Control寄存器保存了主机设置的MPS实际值。

  • Device Capabilities Register 在这里插入图片描述
    在这里插入图片描述

  • Device Control Register
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.1.2 不同MPS值的影响

  1. 对传输效率的影响

    • 较小MPS值:对于较大的数据量,如果MPS设置较小,那么数据只能被分割成多个TLP进行发送。这会增加传输开销,降低PCIe链路带宽的利用率。
    • 较大MPS值:虽然较大的MPS值可以提高带宽利用率,但也会增加硬件处理数据包所需的内存和逻辑量。此外,如果MPS值设置得过大,而链路中某些设备的MPS能力值较低,那么实际传输时仍会受到这些设备的限制。
  2. 对实时性的影响
    MPS参数的大小与实时性成反比。MPS越大,某个Function占用总线的时间可能越长,导致实时性降低。因此,对于实时性要求较高的PCIe设备,MPS参数不应设置过大。

  3. 对硬件设计的影响
    在实际硬件设计中,MPS值的选择需要考虑到设备的处理能力、内存资源以及与其他设备的兼容性等因素。例如,在某些情况下,为了优化传输效率,可能会选择较大的MPS值;但在其他情况下,为了兼容较低能力的设备或满足实时性要求,可能会选择较小的MPS值。

  4. 对系统性能的影响
    在系统中,如果存在多个PCIe设备,并且它们的MPS值不同,那么系统性能可能会受到影响。为了平衡多个PCIe设备之间的吞吐量并避免系统带宽被某些设备霸占,操作系统层面的PCIe驱动可能会配置MPS值。此外,不合理的MPS设置还可能导致数据通信时上报Malformed TLP错误。

综上所述,MPS值在PCIe总线中起着至关重要的作用。不同的MPS值会对传输效率、实时性、硬件设计以及系统性能等方面产生影响。因此,在选择MPS值时需要根据具体的应用场景和设备特性进行综合考虑。

2.1.3 系统下修改MPS值

通过lspci -s 03:00.0 -v 得知扩展空间地址偏移是0x70,通过命令 setpci修改寄存器。如果没有setpci命令需要进行安装,命令为:sudo apt-get install pciutils

在这里插入图片描述

  • 读取Device Capabilities Register
    setpci -s 03:00.0 74.w 其中[2:0] = 0x0 --------------------- 000b 128 bytes max payload size
    在这里插入图片描述

  • 读取Device Control Register
    setpci -s 03:00.0 78.w 其中[7:5] = 0x0 ---------------------000b 128 bytes MPS
    在这里插入图片描述

RTL88x2ce设备 Max Payload Size = 128 bytes ,主机设置的MPS实际值也是128 bytes
在这里插入图片描述

  • 修改Device Control Register

假如想修改MPS实际值,改为:256 bytes,将[7:5] = 0x1

setpci -s 03:00.0 78.w=0x5030
在这里插入图片描述

2.2 MRRS(Max Read Request Size)

MRRS代表Max Read Request Size,即最大读请求大小。这是PCIe总线中的一个关键参数,它定义了PCIe设备在发起存储器读请求时,一次性能从目标设备中读取的最大数据量。

2.2.1 MRRS相关寄存器

在PCIe设备的配置空间中,PCI Express Capability Structure的Device Control寄存器用于设置和查询MRRS的值。通过修改该寄存器的相应位段,可以动态调整MRRS的大小,以满足不同应用场景下的性能需求。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.2 MRRS的作用与影响

  1. 数据传输效率
    MRRS限制了PCIe设备在单次读请求中能够获取的数据长度。若读请求的数据量超出了MRRS的限制,设备则需将请求拆分为多个较小的读请求TLP(Transaction Layer Packet)进行发送。因此,合理设置MRRS可以优化数据传输效率,减少拆分请求的开销。
  2. 系统性能
    MRRS的设置对系统整体性能有重要影响。通过调整MRRS,可以最大化利用PCIe总线的带宽,减少读请求的次数和延迟,从而提升数据读取速度和系统吞吐量。
  3. 应用场景
    在不同的应用场景中对MRRS的需求可能有所不同。
    • 在高性能存储系统中,通过合理设置MRRS可以提升SSD的读取效率和系统整体性能;
    • 在基于PCIe的网络接口卡(NIC)中,优化MRRS可以更有效地利用网络资源,降低数据传输延迟;
    • 在图形处理领域,精细调整MRRS可以确保图形数据的快速传输,提升图形处理性能。

综上所述,MRRS作为PCIe总线中的关键参数,在数据传输和系统性能优化中发挥着重要作用。通过合理设置和管理MRRS,可以提升系统整体性能,满足高性能计算、数据存储、网络通信等领域的需求。

2.2.3 系统下修改MRRS值

  • 读取Device Control Register
    setpci -s 03:00.0 78.w 其中[14:12] = 0x5 ---------------------101b 4096 bytes maximum Read Request size
    在这里插入图片描述
  • 修改Device Control Register
    假如想修改MRRS实际值,改为:2048 bytes,将[14:12] = 0x4
    在这里插入图片描述

2.3 RCB(Read Completion Boundary)

RCB(Read Completion Boundary,读取完成边界)是PCI Express(PCIe)总线中的一个重要参数,它指定了在完成PCIe内存读取请求时可以返回的数据包的最大对齐字节边界。它的作用确保读取响应(Completion)数据包中包含的数据不会跨过特定的对齐边界,从而维持PCIe系统的稳定性和数据完整性,并优化数据在不同的设备间的高效传输。

2.3.1 RCB相关寄存器

RCB的值通常可配置为64字节或128字节。在PCIe规范中,Root Complex(RC)的RCB可以为64字节或128字节,默认值为64字节;而Endpoint(EP)、Bridge、Switch等其他设备的RCB只能为128字节。
RCB的值可以通过PCIe配置空间中的相关寄存器进行设置。例如,在PCI_EXPRESS_LINK_CONTROL_REGISTER寄存器中,有一个位用于指示RCB的值。如果该位为清除位,则RCB为64字节;如果设置了该位,则RCB为128字节。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.3.2 RCB对数据传输的影响

  • 64字节RCB
    较小的RCB设置会导致更频繁的数据包传输。这在某些情况下可能提高小数据块传输的效率,因为对于需要低延迟的应用,较小的数据包可能意味着更快的响应时间。
  • 128字节RCB
    较大的RCB设置减少了数据包传输的频率,有利于大量数据的传输效率。在数据吞吐量要求较高的应用场合,较大的RCB可以减少系统的总体开销,提高数据传输速度。

2.2.3 系统下修改RCB值

  • 修改Link Control Register
    假如想修改RCB值,改为:128 bytes,将[3] = 0x1
    setpci -s 03:00.0 80.w=0048

在这里插入图片描述

如何选择合适的RCB值

  • RC(Root Complex)的RCB可以为64字节或128字节,默认值为64字节。
  • EP(Endpoint)、Bridge、Switch等其他设备的RCB固定为128字节。
  • 根据系统需求和设备特性,选择合适的RCB值。
    比如:对于需要低延迟的应用,较小的RCB值(如64字节)可能更合适;而对于数据吞吐量要求较高的应用,较大的RCB值(如128字节)可能更有利于提高传输效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LS大猫

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值