This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM6442:将数据发送到 am64x cortex-A53 集群(cpsw 千兆位以太网)上的 Linux 网络协议栈时、CPU 负载较高

Guru**** 2923200 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1645584/am6442-high-cpu-load-when-sending-data-to-the-linux-network-stack-on-the-am64x-cortex-a53-cluster-cpsw-gigabit-ethernet

器件型号: AM6442

在将数据发送到 am64x cortex-A53 集群上的 Linux 网络堆栈时、我们会遇到相对较高的 CPU 负载。 此行为可在 am64x EVM 评估板上重现(SMP Linux 基于 TI Linux、内核版本 6.1.124、我无法准确地说它基于哪个版本的 SDK、但该行为并不绑定到某个版本、我们已经在较旧的 5.x 版本上进行了检查)。  

测试设置: 创建从 soc 到客户端 PC 的同时 TCP 和 UDP 流:

服务器 (am64x)

iperf3 -s -p 5201 &
iperf3 -s -p 5202 &

客户端 (PC)- iperf 反向模式

iperf3 -c 192.168.136.10 -l 1000000 -b 250M -t 0 -R &
iperf3 -c 192.168.136.10 -p5202 -u -b 250M -l 1400 -t 0 -R &

这将在千兆以太网端口上创建 500MBit/s 的传出流量。  
此情况下的 CPU 负载约为 70%(用顶部测量)。
对我们来说,这个价值似乎相当高(与其他平台相比也是如此)。
这给我们的产品带来了问题、因为我们必须在运行需要大量计算能力的应用程序逻辑时提供此带宽。
注意:UDP 数据包大小不是最佳的、但这正是我们的应用程序所需要的。 我们知道、通过最大化数据包大小可以在一定程度上改善这些值
传递到栈、因此无需讨论这一点。
问题:
- TI 对此采取了什么措施? 该平台是否符合预期?
-是否有优化潜力显著提高性能,例如通过配置网络堆栈/驱动程序,甚至通过修补通用或特定于硬件的堆栈/驱动程序代码?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Jonas,  

    对延迟的回复表示歉意

    (SMP Linux 基于 TI Linux、内核版本 6.1.124、我无法准确地说它基于哪个版本的 SDK、但行为并不绑定到某个版本、我们已在较旧的 5.x 版本上进行了检查)

    我可以询问这是在 RT-Linux 还是非 RT Linux 上吗? 此外、您是否使用 ICSSG 或 CPSW 以太网?

    这种情况下的 CPU 负载约为 70%(用顶部测量)。
    对我们来说,这个价值似乎相当高(与其他平台相比也是如此)。

    请问您的 CPU 负载较低的其他平台是什么?  

    这给我们的产品带来了问题、因为我们必须在运行需要大量计算能力的应用程序逻辑时提供此带宽。

    两个端口同时需要 250Mbps、这似乎是一个相当高的吞吐量要求。 请问您的用例是每个端口需要 250Mbps 吗?

    iperf3 性能与您最终用于接收和发送数据包的应用程序之间也可能存在差异。 例如对于 iperf3、 底层的 sk_buff (SKB) 用于管理和处理由 iperf3的套接字缓冲区生成或接收的所有网络数据包 (TCP 和 UDP)、但对于最终应用、可能是使用 AF_packet 或其他套接字缓冲区在不同的 Linux 网络层处理接收到的数据包。 例如、iperf3 使用的套接字缓冲区需要遍历整个 Linux 网络栈、这将在处理数据链路层流量并绕过上层协议时消耗比 AF_packet 更多的 CPU 负载。

    - TI 对此有何看法? 该平台是否符合预期?

    在过去的测试中、我们观察到、当两个千兆位以太网端口都在主动传递尽可能多的流量(每个端口上配置为~900Mbps UDP)时 、我只能观察到每个 CPSW 端口上~400Mbps、此时观察到的 CPU 负载接近~100%负载。 根据这一推断、我想说您在测试中看到的内容与我在过去测试中看到的内容相当。  

    -是否有优化潜力显著提高性能?例如、通过配置网络堆栈/驱动程序、甚至通过修补通用或特定于硬件的堆栈/驱动程序代码?

    毫无疑问、有很多方法可以尝试提高性能、而不是我们所见的开箱即用。 例如、如前所述、根据您的目标流量、由于数据包需要遍历整个 Linux 网络堆栈、iperf3 结果可能无法完全反映最佳性能。 优化的理想情况是使用 XDP 零复制来完全绕过 Linux 网络堆栈、并消除由于将数据从内核空间复制到用户空间而产生的额外负载。  

    下面的链接是有关 TI ICSSG 的 XDP 和 XDP 零复制实现和性能的一些详细信息。 您可以期望 TI CPSW 具有类似的性能。

    https://software-dl.ti.com/processor-sdk-linux-rt/esd/AM64X/latest/exports/docs/linux/Foundational_Components PRU-ICSS/PRU-ICSS/PRU_ICSSG Linux_Drivers。html#PRU-icssg-XDP

    -道林

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Daolin:

    感谢您的详细回答。

    首先、缺少一些信息:我们使用 CPSW、内核中有 CONFIG_PREEMPT_RT=y、我们将性能与 NXP imx8(使用相同数量的 CPU 和 CPU 频率)进行比较。 我们没有找到导致实际差异的原因、但我们看到 CPU 负载显著减少。

    很高兴知道我们用于测试的方案及其结果大致符合预期、因此没有明显的错误配置或其他错误。

    XDP 零副本似乎可以为我们提供显著的改进。 但是、CPSW 驱动程序 (am65-cpsw-nuss) 是否支持它?

    此致

    Jonas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Jonas,  

    XDP 零副本似乎可以为我们提供显著的改进。 但是、CPSW 驱动程序 (am65-cpsw-nuss) 是否支持它?

    自 TI SDK 11.02+以来、am65-cpsw-Nuss 驱动程序中已引入 XDP 零复制。 我建议您评估最新 TI SDK 的 XDP 零复制支持:  

    [quote userid=“576780“ url=“~/support/processors-group/processors/f/processors-forum/1645584/am6442-high-cpu-load-when-sending-data-to-the-linux-network-stack-on-the-am64x-cortex-a53-cluster-cpsw-gigabit-ethernet/6359497

    下面的链接是有关 TI ICSSG 的 XDP 和 XDP 零复制实现和性能的一些详细信息。 您可以期望 TI CPSW 具有类似的性能。

    https://software-dl.ti.com/processor-sdk-linux-rt/esd/AM64X/latest/exports/docs/linux/Foundational_Components PRU-ICSS/PRU-ICSS/PRU_ICSSG Linux_Drivers。html#PRU-icssg-XDP

    [/报价]

    如果您有其他问题、敬请告知

    -道林