问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

PCIe配置优化:提升系统性能的关键步骤

创作时间:
作者:
@小白创作中心

PCIe配置优化:提升系统性能的关键步骤

引用
1
来源
1.
https://m.elecfans.com/article/2667211.html

PCIe(Peripheral Component Interconnect Express)是现代计算机系统中用于连接高速外设的关键接口技术。其性能直接影响到系统的整体运行效率。本文将深入探讨PCIe的关键配置参数,包括宽度、速度、最大负载大小和最大读取请求等,并提供具体的验证和调整方法,帮助读者优化系统性能。

PCIe属性详解

PCIe宽度

PCIe宽度决定了设备可并行用于通信的PCIe通道数。宽度标记为xA,其中A是通道数(例如,x8表示8通道)。具体支持多少通道取决于厂商的设备和它们的型号。

要验证PCIe宽度,可以使用命令lspci。例如,在PCI 04.00.0地址上安装了Mellanox适配器:

# lspci -s 04:00.0 -vvv | grep Width
LnkCap: Port #0, Speed 8GT/s, Width x8, ASPM not supported, Exit Latency L0s unlimited, L1 unlimited
LnkSta: Speed 8GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-

如您所见,PCIe报告了已通信的设备功能(在LnkCap下),以及它们的当前状态(在LnkSta下),这是实际的PCIe设备属性。

PCIe速度

PCIe速度以GT/s为单位,代表“每秒十亿次交易”。与PCIe宽度一起确定了最大PCIe带宽(速度*宽度)。为了验证PCIe速度,可以使用命令lspci

# lspci -s 04:00.0 -vvv | grep Speed
LnkCap: Port #0, Speed 8GT/s, Width x8, ASPM not supported, Exit Latency L0s unlimited, L1 unlimited
LnkSta: Speed 8GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt

与宽度参数类似,设备能力和状态都会被报告。PCIe速度被标识为“代”,其中2.5GT/s称为“gen1”,5GT/s称为“gen2”,8GT/s称为“gen3”,16GT/s称为“gen4”。

注意:除了支持的速度之外,各代之间的主要区别在于数据包的编码开销。对于第1代和第2代,在PCIe上发送的每个数据包都有20%的PCIe标头开销。这在第3代中得到了改进,其中开销减少到1.5% (2/130)。有关更多详细信息,请参阅下面的实际PCIe带宽计算。

PCIe最大负载大小

PCIe最大负载大小确定PCIe数据包或PCIe MTU的最大大小(类似于网络协议)。这意味着较大的PCIe事务被分解为PCIe MTU大小的数据包。此参数仅由系统设置,取决于芯片组架构(例如x86_64、Power8、ARM等)。

您可以使用命令lspci(在DevCtl下指定)查看PCIe最大负载大小。

lspci -s 04:00.0 -vvv | grep DevCtl: -C 2
DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset+
DevCtl: Report errors: Correctable- Non-Fatal+ Fatal+ Unsupported-
RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+ FLReset-
MaxPayload 256 bytes, MaxReadReq 4096 bytes

PCIe最大读取请求

PCIe最大读取请求确定允许的最大PCIe读取请求。由于必须为传入响应准备缓冲区,PCIe设备通常会跟踪待处理的读取请求的数量。PCIe最大读取请求的大小可能会影响待处理请求的数量(当使用大于PCIe MTU的数据获取时)。

同样,使用命令lspci来查询Max Read Request值。

# lspci -s 04:00.0 -vvv | grep MaxReadReq
MaxPayload 256 bytes, MaxReadReq 4096 bytes

与此处讨论的其他参数相反,可以在运行时使用命令setpci更改PCIe最大读取请求:首先,查询该值以避免覆盖其他属性:

# setpci -s 04:00.0 68.w
5936

第一个数字是PCIe最大读取请求。设置选Max Read Request:

# setpci -s 04:00.0 68.w=2936

该值应使用命令lspci更新:

# lspci -s 04:00.0 -vvv | grep MaxReadReq
MaxPayload 256 bytes, MaxReadReq 512 bytes

可接受的值为:0-128B、1-256B、2-512B、3-1024B、4-2048B和5-4096B。

计算PCIe带宽限制

如前所述,PCIe功能可能会影响网络适配器的性能。最好了解PCIe引入的带宽限制。下面是理论计算和几个例子。

最大可能的PCIe带宽是通过乘以PCIe宽度和速度来计算的。从这个数字中,我们减少了大约1Gb/s的纠错协议和PCIe标头开销。开销由PCIe编码(有关详细信息,请参阅PCIe速度)和PCIe MTU确定:

最大PCIe带宽 = 速度 * 宽度 * (1 - 编码) - 1Gb/s。

例如,具有x8宽度的第3代PCIe设备将被限制为:

最大PCIe带宽 = 8G * 8 * (1 - 2/130) - 1G = 64G * 0.985 - 1G = ~62Gb/s。

另一个示例 - 具有x16宽度的第2代PCIe设备将被限制为:

最大PCIe带宽 = 5G * 16 * (1 - 1/5) - 1G = 80G * 0.8 - 1G = ~63Gb/s。

注意:PCIe事务包括网络数据包有效负载和标头,因此在计算网络流量的PCIe限制时需要考虑它们。PCIe最大读取请求和最大负载大小可能会由于PCIe整体增加和相同负载的待处理事务而导致事务速率限制。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号