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.

[参考译文] AM263P4:对于 ENET 示例、是否需要取消缓存.bss:ENET_DMA_PKT_MEMPOOL 中的缓冲器?

Guru**** 2560390 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1570384/am263p4-for-enet-examples-do-the-buffers-in-bss-enet_dma_pkt_mempool-need-to-be-uncached

器件型号:AM263P4


工具/软件:

在 Enet 示例(即 enet_lwip_cpsw)中、将第个数据包池存储器分配给 ENET_DMA_PKT_MEMPOOL、然后在 OCRAM 中加载和运行。  这是缓存内存。

由于这些缓冲区正在使用“dma"进行“进行更新、因此不应将它们映射到未缓存的存储器段以避免缓存不一致性?  ENET_CPPI_DESC 中的描述符设置为未缓存。

只是想确保这不是一个遗漏。   

感谢您抽出宝贵的时间来回应。

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

    尊敬的 

    我们仅将 CPPI 描述符内存位置标记为非缓存。  放置在 OCRAM 中的 ENET_DMA_PKT_MEMPOOL 缓冲区被缓存、我们通过 EnetOSAL_CacheInv 和 EnetOSAL_CacheWbInv API 处理 Enet 驱动器 (enet_cpdma.c) 中的缓存一致性操作(写回和失效)。

    根据我与网络团队的讨论、将 ENET_DMA_PKT_MEMPOOL 标记为非缓存会影响 ENET 吞吐量。 我建议采用默认开箱即用示例中所示的配置。  如果管理得当、这种方法实际上可以提高整体系统性能、而不是对性能产生负面影响:

    对于 TX(发送)操作:

    • 在发送数据包之前、驱动程序调用 EnetOSal_cacheWbInv () 将缓存中的任何修改数据写回主内存并使缓存行无效
    • 这可确保 DMA 控制器从存储器中读取正确的更新数据

    对于 RX(接收)操作:

    • 在向 DMA 控制器提供缓冲区之前、驱动程序会调用 EnetOSal_cacheInv () 使任何缓存的数据无效。
    • 当 CPU 稍后访问接收到的数据时、它将从主内存获取、而不是使用潜在的过时缓存数据

    将非缓存内存用于缓冲区可以避免显式缓存管理、但会显著降低 CPU 对数据包数据的访问速度、这通常比高速缓存管理操作的开销更重要。  CPPI_DESC 区域保持为非缓存区域、因为这些描述符经常被 DMA 控制器访问、但 CPU 不经常访问、因此与一致性管理开销相比、缓存的优势将非常小。

    此致、
    Shaunak

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

    感谢您抽出宝贵的时间对此进行研究、并给出了很好的解释。   我们将按原样保留我们的代码、这是示例的副本。