理解PCIe配置以获得最佳性能
应用介绍
为什么要使用PCIe?
PCIe用于任何系统中的不同模块之间的通信。 网络适配器需要与CPU和内存(以及其他模块)进行通信。 这意味着为了处理网络流量,应正确配置PCIe不同设备进行通信。 将网络适配器连接到PCIe时,它将自动协商网络适配器和CPU之间支持的最大功能。
PCIe属性
任何PCI设备都加载了某些属性。 其中一些属性对于性能至关重要。 通过在系统和设备功能之间进行协商来设置设备的PCIe属性。 在下面,您可以找到有关PCIe属性,如何验证它们及其对性能的影响的说明。
PCIe宽度
PCIe宽度确定设备可以并行使用以进行通信的PCIe通道数。 宽度标记为xA,其中A是通道数(例如8通道为x8)。 Mellanox适配器支持x8和x16配置,具体取决于它们的类型。
为了验证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速度,可以使用命令lspc
# 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-
与width参数类似,报告设备功能和状态。
PCIe速度被标识为“generations”,其中2.5GT / s被称为“ gen1”,5GT / s被称为“ gen2”,而8GT / s被称为“ gen3”。 大多数Mellanox产品都支持所有generations。 您也可以使用命令lspci查看PCIe的生成:
# lspci -s 04:00.0 -vvv | grep PCIeGen
[V0] Vendor specific: PCIeGen3 x8
注意:除了支持的速度外,各代之间的主要区别是数据包的编码开销。 对于第1代和第2代,在PCIe上发送的每个数据包都有20%的PCIe标头开销。 这在第三代中得到了改进,其开销降低到了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来查询“最大读取请求”值:
# lspci -s 04:00.0 -vvv | grep MaxReadReq
MaxPayload 256 bytes, MaxReadReq 4096 bytes
与此处讨论的其他参数相反,可以在运行时使用命令setpci更改PCIe Max Read Request:
首先,查询该值以避免覆盖其他属性:
# setpci -s 04:00.0 68.w
第一位数字是PCIe最大读取请求大小选择器。
设置选择器索引
# 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宽度和速度相乘得出的。通过这个数字,我们将纠错协议和PCIe标头开销降低了约1Gb / s。开销由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-1
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: www_apollocode_net@163.com 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » 理解PCIe配置以获得最佳性能
文件列表(部分)
名称 | 大小 | 修改日期 |
---|
发表评论 取消回复