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.

[参考译文] AM3356:PRU-ICSS

Guru**** 2551110 points
Other Parts Discussed in Thread: AM3356, AM3354

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1303196/am3356-pru-icss

器件型号:AM3356
主题中讨论的其他器件: AM3354

我们使用的是 AM3356处理器、它  通过 eth0和 eth1端口执行 TCP/UDP 通信。

我们正在使用 CPSW 来处理2个以太网端口。

我们在 CPU 上的实现是一个密集型的实现、会遇到一些 CPU 负载。 我考虑使用 PRU-ICSS 进行 TCP/UDP 通信、以降低 AM3356主内核上的 CPU 负载。

我对 AM3356上的 PRU 设备有一些疑问:

1) 1)可以在 PRU 中运行完整的 UDP/TCP/IP 堆栈吗?  此类堆栈 TCP/UDP/堆栈是否可以在 PRU 中完全运行? 在 PRU (内存等)中运行这样一个堆栈是否有任何限制?

2)在主内核和 PRU 之间交换数据的方法是什么。  这样一个架构会减少主内核上的 CPU 负载吗?  

3) 3)我可以通过 CPSW 运行 eth0、而通过 PRU 运行 eth1吗?

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

    尊敬的 Martin:

    哪些 Linux SDK 版本支持 AM335x PRU 以太网?

    首先、请注意、我们支持 AM335x Linux SDK 版本至 AM335x Linux SDK 8.2 (Linux 内核5.10)上的 AM335x PRU 以太网。 我们没有将 AM335x PRU 以太网移植到最新的 Linux SDK 9.1。 我们计划在2024 AM335x SDK 版本中重新添加 PRU 以太网支持。

    很遗憾、此解决方案未包含在 AM335x SDK 9.1文档中。 我正在努力对这些文档进行更新。 未来的读者,您应该在此处找到有关这些内容的信息:
    https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/09_01_00_001/exports/docs/devices/AM335X/linux/Release_Specific_Release_Notes .html 

    好的、我使用的是支持 PRU 以太网的 AM335x SDK。 现在怎么办?  

    请记住、软件堆栈仍可在 ARM Linux 内核上运行。 因此、CPSW 和 PRU 以太网均支持 TCP/UDP。

    在较旧的 AM335x 软件版本中、我们支持 HSR 和 PRP 等以太网网络协议。 对于这些协议、PRU 能够减轻一些处理负载。 但是、对于通用以太网、我希望 CPSW 和 PRU 以太网的 Linux 内核负载相似。 从概念层面来说、您可以这样思考:PRU 本质上是一组可编程内核、而 CPSW 是一组电路。 但是、可以对 PRU 内核进行编程、使 其在 Linux 与 CPSW 电路交互时具有类似的行为。

    是的、您可以让 CPSW 控制一个以太网接口、让 PRU 控制一个以太网接口。 请注意、即使将使用一个单个 PRU 内核来控制一个 PRU 以太网接口、也不应将另一个 PRU 内核用于该用例中的任何用途。

    此致、

    尼克

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

    Nick、

    感谢您的回复。

    我刚才意识到、PRU 是一款小型 CPU 、仅有8KB 的指令和 数据 RAM。 我的理解是、最多可以将8KB 的代码加载到 PRU 中、这意味着我应该仔细考虑这8KB 的指令代码中可以填充的内容。  

    我们考虑3种替代方案:

    1.将 PRU 用作专用 CPU、定期从共享存储器发送/接收以太网数据包。 在此设计中、ARM 主内核将为数据读取/写入共享存储器。

    2.主 ARM 内核通过 PRU 以太网端口定期发送/接收以太网数据包  

    3.主 ARM 内核通过 CPSW 以太网端口定期发送/接收以太网数据包

    问题: 选项1优于选项2和3 (在 ARM 内核的 CPU 负载时间内)是否有任何优势?  方案2在 ARM 内核负载中是否比方案1更重? 方案3 在 ARM 内核负载中是否比方案2或1重?  

    选项1在从 PRU 中的共享存储器发送/接收数据(以太网数据包)方面看起来更具确定性、但 对于主 ARM 内核、它也取决于共享存储器的读取/更新速率。  

    选项3看起来更好、因为我们不必对软件和硬件进行任何更改。

    请提供您的意见。

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

    尊敬的 Martin:

    选项1:这不是 TI 支持的用例。 PRU 内核负责处理进出芯片的信号、然后由不同内核处理网络堆栈。 在 AM335x 上、ARM 内核是不同的内核、而在 AM64x 等更高版本的器件上、网络堆栈可由 Linux A53内核或 RTOS R5F 内核处理。

    对于通用以太网用例、我不知道使用 PRU 以太网而不是 CPSW 以太网有什么具体好处。 如果您的用例需要3-4个以太网端口而不是1-2个以太网端口、则主要优势将是。

    如果您未使用 PRU-ICSS、则可以考虑使用不同的 AM335x 器件型号、例如 AM3354、其 Linux 内核的运行速度最高可达1000MHz。 从而使 ARM 内核的性能略为提高。

    另一方面、如果 Linux 内核花费大量周期来执行 非网络任务、例如监控外部电压值、这种任务可以转移到 PRU 子系统中。 如果您有关于 PRU 的其他问题、请告诉我。

    此致、

    尼克

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

    我与支持 CPSW 以太网的工程师进行了双重核实、他证实、与 PRU 以太网相比、CPSW 以太网具有相同或更少的执行以太网所需的 ARM 处理能力。 再加上所有 AM335x Linux SDK 版本均支持 CPSW 以太网、我建议将 CPSW 以太网用于您的用例。

    此致、

    尼克

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

    您好、Nick、

    再次感谢 您的回答。

    我不熟悉 PRU 中以太网子系统的代码和架构、以及它如何与 AM335x 主内核互连。

    我假设 AM3356内核上的以太网驱动程序以某种方式向 PRU 传输/从 PRU 接收以太网数据包。 我假设 PRU 实现了 MAC 层并控制连接到 PHY 的 MII 线路。 我是对吗?

    我的团队成员坚持要澄清以下选项:

    将 多个传入以太网或 UDP 数据包聚合到一个数据包中、并将单个聚合数据包转发到 AM335x ARM 内核、更改 PRU 中的以太网驱动程序是否可行(可能)。 其理念是缩短向一个传入数据包提供多个数据包的时间。 我不确定能否在 PRU 内控制通过 PRU 到 AM335x 主内核以太网驱动程序的以太网数据流量。  

    请就此问题提供建议。

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

    尊敬的 Martin:

    我已经有一段时间以来一直在探究 Linux 以太网驱动程序和 PRU 固件之间的分工、但您的假设 通常是正确的。 有关更多信息、请参阅 SDK 文档、开始部分为"工作原理"

    https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/08_02_00_24/exports/docs/linux/Foundational_Components / PRU-ICSS / Linux_Drivers / PRU-ICSS_Ethernet.html

    您还会注意到、AM335x 的 PRU-ICSS 版本的 PRU 以太网使用共享存储器策略在 Linux 和 PRU 之间传递帧、而不是使用 DMA。 这是赞成 CPSW 的另一点、因为我认为它使用 DMA 进行数据传输。

    聚合以太网数据包会怎么样?

    从"修改以太网驱动程序/PRU 固件工作方式"的角度来看:
    我不建议尝试修改 Linux 驱动程序/PRU 固件接口。 从技术上讲、我可以向您指出 PRU 固件源代码、但它非常复杂、没有文档记载的汇编代码。 接口也从 SDK 7.3 --> SDK 8.2更改为

    我认为 Linux 以太网驱动程序提供了一个选项来聚合数据包、而不是在每次接收到 TX 数据包时中断 ARM 内核。 在尝试使用 PRU 以太网进行任何操作之前、我会通过 CPSW 了解该选项。

    如果您对该主题有后续问题、我会将您的主题重新分配给 CPSW 的家伙。

    此致、

    尼克

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

    实际上、我将暂停线程一会儿。

    请在开始时查看  
    https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/09_01_00_001/exports/docs/linux/Foundational_Components Network/CPSW.html Kernel_Drivers Network/CPSW.html

    部分" 中断起搏 "

    此致、

    尼克

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

    Nick、

    感谢您的帮助。  我们将使用1G 处理器。 这将为我们提供一些额外的功率。 我们还将使用分布式网络、我们必须利用这些网络来降低主 CPU 的 CPU 负载。  

    再次感谢您的帮助。  

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

    没问题 Martin!

    关于中断节奏的另外一点注意事项-我希望它能够帮助处理 RX 以太网数据包(但我不确定它能改善多少数据、因为我还没有进行自我测试)。 但是、这不会降低 ARM 内核生成的 TX 以太网数据包的处理器负载。

    此致、

    尼克