工具/软件:
在 Enet 示例(即 enet_lwip_cpsw)中、将第个数据包池存储器分配给 ENET_DMA_PKT_MEMPOOL、然后在 OCRAM 中加载和运行。 这是缓存内存。
由于这些缓冲区正在使用“dma"进行“进行更新、因此不应将它们映射到未缓存的存储器段以避免缓存不一致性? ENET_CPPI_DESC 中的描述符设置为未缓存。
只是想确保这不是一个遗漏。


感谢您抽出宝贵的时间来回应。
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.
工具/软件:
在 Enet 示例(即 enet_lwip_cpsw)中、将第个数据包池存储器分配给 ENET_DMA_PKT_MEMPOOL、然后在 OCRAM 中加载和运行。 这是缓存内存。
由于这些缓冲区正在使用“dma"进行“进行更新、因此不应将它们映射到未缓存的存储器段以避免缓存不一致性? ENET_CPPI_DESC 中的描述符设置为未缓存。
只是想确保这不是一个遗漏。


感谢您抽出宝贵的时间来回应。
尊敬的 Huey Duong:
我们仅将 CPPI 描述符内存位置标记为非缓存。 放置在 OCRAM 中的 ENET_DMA_PKT_MEMPOOL 缓冲区被缓存、我们通过 EnetOSAL_CacheInv 和 EnetOSAL_CacheWbInv API 处理 Enet 驱动器 (enet_cpdma.c) 中的缓存一致性操作(写回和失效)。
根据我与网络团队的讨论、将 ENET_DMA_PKT_MEMPOOL 标记为非缓存会影响 ENET 吞吐量。 我建议采用默认开箱即用示例中所示的配置。 如果管理得当、这种方法实际上可以提高整体系统性能、而不是对性能产生负面影响:
对于 TX(发送)操作:
对于 RX(接收)操作:
将非缓存内存用于缓冲区可以避免显式缓存管理、但会显著降低 CPU 对数据包数据的访问速度、这通常比高速缓存管理操作的开销更重要。 CPPI_DESC 区域保持为非缓存区域、因为这些描述符经常被 DMA 控制器访问、但 CPU 不经常访问、因此与一致性管理开销相比、缓存的优势将非常小。
此致、
Shaunak