0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

Linux阅码场 来源:Linux阅码场 2024-04-09 09:46 次阅读

理解PCIe配置对性能的影响

PCIe用途

当PCIe 应用于网卡和主机间通信时,网络适配器需要与 CPU 和内存(以及其他模块)进行通信。这意味着为了处理网络流量,应该对通过 PCIe 进行通信的不同设备进行良好配置。将网络适配器连接到 PCIe 时,它会自动协商网络适配器和 CPU 之间支持的最大功能。

PCIe 属性

任何 PCI 设备都加载了某些属性。其中一些属性对性能至关重要。设备的 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 带宽计算。

66e2835a-f610-11ee-a297-92fbcf53809c.png

PCIe Max Payload Size

PCIe Max Payload Size 确定 PCIe 数据包或 PCIe MTU 的最大大小(类似于网络协议)。这意味着较大的 PCIe 事务被分解为 PCIe MTU 大小的数据包。此参数仅由系统设置,取决于芯片组架构(例如 x86_64、Power8、ARM 等)。您可以使用命令 lspci(在 DevCtl 下指定)查看 PCIe Max Payload Size。

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 Max Read Request

PCIe Max Read Request 确定允许的最大 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 Max Read Request:首先,查询该值以避免覆盖其他属性:

# setpci -s 04:00.0 68.w
5936

第一个数字是 PCIe Max Read Request。设置选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 Max Read Request 和 Max Payload Size 可能会由于 PCIe 整体增加和相同负载的待处理事务而导致事务速率限制。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10451

    浏览量

    206583
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72779
  • PCIe
    +关注

    关注

    13

    文章

    1083

    浏览量

    80886
  • 网络适配器
    +关注

    关注

    0

    文章

    40

    浏览量

    11473

原文标题:性能调优之PCIe配置

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PCB制作关键步骤说明书

    PCB制作关键步骤说明书.
    发表于 11-10 19:06

    RNN算法的三个关键步骤

    DL之RNN:RNN算法相关论文、相关思路、关键步骤、配图集合+TF代码定义
    发表于 12-28 14:20

    优化BIOS设置提高系统性能

    BIOS设置对系统性能的影响非常大,优化的BIOS设置,可大大提高PC整体性能,不恰当的设置会导致系统性能下降,运行不稳定,甚至出现死机等现象。下面就BIOS中影响
    发表于 10-10 14:27 43次下载

    布线测试中的几个关键步骤

    布线测试中的几个关键步骤 步骤1: 通断测试是基础   通断测试是测试的基础,是对线路施工的一种最基
    发表于 04-14 11:46 507次阅读

    配置控制器局域网络(CAN)位时序,优化系统性能

    配置控制器局域网络(CAN)位时序,优化系统性能
    发表于 01-07 16:18 0次下载

    企业提升IoT安全性的七个关键步骤

     以下是企业提升IoT安全性以防止数据泄露的七个关键步骤
    的头像 发表于 10-16 09:58 1893次阅读

    使用 NCP1611 设计紧凑、高效 PFC 级的 5 个关键步骤

    使用 NCP1611 设计紧凑、高效 PFC 级的 5 个关键步骤
    发表于 11-14 21:08 1次下载
    使用 NCP1611 设计紧凑、高效 PFC 级的 5 个<b class='flag-5'>关键步骤</b>

    设计 NCL30088 控制的 LED 驱动器的 4 个关键步骤

    设计 NCL30088 控制的 LED 驱动器的 4 个关键步骤
    发表于 11-14 21:08 0次下载
    设计 NCL30088 控制的 LED 驱动器的 4 个<b class='flag-5'>关键步骤</b>

    设计由 NCP1631 驱动的交错式 PFC 级的关键步骤

    设计由 NCP1631 驱动的交错式 PFC 级的关键步骤
    发表于 11-14 21:08 6次下载
    设计由 NCP1631 驱动的交错式 PFC 级的<b class='flag-5'>关键步骤</b>

    设计 NCL30288 控制的 LED 驱动器的 4 个关键步骤

    设计 NCL30288 控制的 LED 驱动器的 4 个关键步骤
    发表于 11-15 19:31 0次下载
    设计 NCL30288 控制的 LED 驱动器的 4 个<b class='flag-5'>关键步骤</b>

    关于工业物联网的3个关键步骤

    可以通过以下三个关键步骤使工业物联网的采用更容易:数据结构、连接性、人机界面 生态系统
    发表于 11-23 09:36 348次阅读

    焊接贴片电阻的关键步骤

    贴片电阻是一种常见的电子元件,用于电路板的焊接。焊接贴片电阻需要注意一些关键步骤和技巧,以确保焊接质量和电路的稳定性。
    的头像 发表于 08-19 10:52 794次阅读

    零损拆卸:掌握三菱变频器拆解的关键步骤

    零损拆卸:掌握三菱变频器拆解的关键步骤
    的头像 发表于 09-19 09:04 724次阅读

    邪恶PLC攻击技术的关键步骤

    今天我们来聊一聊PLC武器化探秘:邪恶PLC攻击技术的六个关键步骤详解。
    的头像 发表于 01-23 11:20 611次阅读
    邪恶PLC攻击技术的<b class='flag-5'>关键步骤</b>

    MES系统实施的几大关键步骤

    MES系统实施的几大关键步骤--万界星空科技MES/低代码MES/开源MES  在制造业中,MES管理系统成为了提升生产效率、优化资源
    的头像 发表于 03-08 11:38 278次阅读