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:如何提高 PCIe DMA 传输性能

Guru**** 2482225 points
Other Parts Discussed in Thread: AM6442

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1449886/am6442-how-to-improve-pcie-dma-transfer-performance

器件型号:AM6442

工具与软件:

您好!

我目前使用 AM6442作为 EP 模式、使用 Windows 作为 RC。 并在 MCU SDK 中成功运行 PCIe EP 枚举测试案例、如下所示。

AM64x MCU+ SDK:"PCIe EP 枚举"

但是、在 DMA 测试中、我们发现 Bar0与 DMA 存储器之间的数据复制速度极低(与两个本地存储器之间的复制速度相比)。

我们的 DMA 存储器映 射到 RC DMA 存储器以通过 PCIe 出站映射进行访问、并且文档提到出边界地址必须在指定区域中。

我不确定影响此速度的因素、我想知道有没有方法 可以优化将数据从 DMA 映射地址存储器复制到本地存储器的性能。

此致、

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

     

    感谢您的提问。

    您可以参考以下文档的第4.3节和第4.4节、并告知我您是否需要进一步的帮助?

    Sitara AM64x/AM243x 基准测试 Cortex-R5存储器存取延迟(修订版 B)

    此致

    Ashwani

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

    您好!

    PCIe_enumere_EP 示例执行的 DMA 测试从 RC 的角度来看是 DMA (即 EP 直接写入 RC 存储器、而不涉及 RC CPU)、但在 AM64x 上、复制由 CPU 执行。

    如果您要传输更多的数据、则应在 AM64x 上使用 BCDMA 外设、类似于应用手册 Ashwani 链接中所示的内容。

    你需要自己合并这些示例、例如、从其他示例复制代码来设置 BCDMA、并用它来代替"copyLoop"中的"memcpy"调用。

    此致、

    Dominic

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

    感谢您的答复。

    我将尝试使用 BCDMA 连接出站映射地址存储器 和本地 Bar0。 如果有任何问题或进展、我将向您通报最新情况。

    但我仍然有一个疑问。 我使用 CPU 测试了两个本地存储器之间的复制性能、并且复制速度远高于出站映射地址存储器和 Bar0之间的复制速度。 这两种复制都使用 CPU、但为什么 复制性能有显著差异?

    期待您的回复。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但我仍然有一个疑问。 我使用 CPU 测试了两个本地存储器之间的复制性能、并且复制速度远高于出站映射地址存储器和 Bar0之间的复制速度。 这两种复制都使用 CPU、但为什么 复制性能有显著差异?

    从 AM64x 的 R5f 到 RC 存储器的延迟要高得多。 根据我所见的情况、延迟通常为~2us、但我们也有一个系统在3-4us 时的情况要差得多(甚至可能是5us?)。

    从 AM64x 的 R5f 到其自身存储器的延迟要小得多、请参阅应用手册 Ashwani Linked (MSRAM 为~60ns、DDR 为~280ns)。

    这种延迟也是 BCDMA 的一个问题、因为单个通道受其 FIFO 的大小(192字节 IIRC)和延迟的限制。 192字节* 1/2us = 96,000,000字节/s 这大致匹配应用手册中针对单个 BCDMA 通道(868Mbit/s)的数字。

    这取决于您的应用是否会成为问题、并且您可以通过并行使用多个 BCDMA 通道来进一步优化(有关扩展能力、请参阅应用手册)。

    此致、

    Dominic

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从 AM64x 的 R5f 到 RC 内存的延迟要高得多。 [报价]

    很抱歉、这偏离了我以前的理解。 我认为在 DMA 测试中、数据将使用 PCIe DMA 传输(但这确实让我感到困惑、因为手册说我们的 PCIe 没有内置 DMA)、换句话说、来自 RC 存储器的数据已经在 PCIe DMA 后的 R5f PCIE0_DAT0存储器(其中 EP DMA 映射)中、而您之前提到的 memcpy 函数只是使用 CPU 从 PCIE0_DAT0存储器复制到 MSRAM (其中、CPU)。

    但正如您所说的、DMA 测试只是不使用 CPU 而将数据复制到 PCIe。 也就是说、DMA test 和 bar test 之间的区别仅是 RC 的复制方式。 我的理解是否正确?

    此致、

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

    我想我不能完全理解你的想法是怎样工作的。

    PCIe_enumere_EP 中实现的"DMA 测试"将数据从 AM64的 Bar0复制到 RC 的主机存储器中。 从 RC 的角度来看、这是"DMA"。 一些其他总线主控(EP)写入 RC 的主机内存。

    出站映射不会复制任何数据。 它只是为 AM64x 提供了一种通过 PCIE0_DAT0区域中的地址访问"PCIe 地址空间"的方法。 RC 确保这些 PCIe 地址后面有"存储器"。 因此、访问 PCIE0_DAT0区域中配置了出站映射的位置、意味着 R5f 正在通过 PCIe 向 RC 发送事务、RC 反过来读取/写入其自己的存储器。

    另一方面、Bar0存储器是 AM64x (MSRAM)中的本地存储器。 当 RC 在那里写入数据时、它需要通过 PCIe 总线并通过 AM64x PCIe 中到 AM64x 内部位置的入站映射。

    双向(RC 通过 Bar 访问 EP 中的内容、EP 通过出站映射访问 RC 中的内容)具有~2us (或更多)的延迟。

    根据"远程"存储器的映射方式(通过 MPU/R5f 上的 EP、通过页面表和 x86 RC 上的 MTRR)、远程存储器写入可能不会那么糟糕、因为写入可能会"发射后忘记"。 读取始终会导致这种延迟。 PCIe_ENUM_EP 示例不对出站 DMA 区域使用特定的 MPU 映射、因此它获得"严格排序"特性、其中 R5f 等待每次写入完成。 你应该能够优化,以使用"设备",甚至可能"正常未缓存",但我不知道你将能够获得多少未完成的交易,即这可能会达到一些其他限制。

    此致、

    Dominic

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

    感谢您的讲解、 真的对我有很大帮助。 是的、测试后、我们发现写入速度高于读取速度。

    我已将 PCIE0_DAT0区域的内存类型更改为"cache"、它确实对传输性能进行了大量优化。

    我将继续尝试使用 BCDMA 在出站 DMA 区域和本地存储器之间复制数据。

    再次感谢!

    此致、

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

    感谢  和 

    此致

    Ashwani