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.
您好、Tony、
存储器映射布局中的该图像显示了默认的存储器分配、但这并非所需的存储器分配。
AM64x Academy 多核模块将在下周左右的某个时间上线。 在 AM62x Academy 多核模块变为可用状态之前、您可以让客户参考 AM62x Academy 多核模块的"如何分配存储器"页
https://dev.ti.com/tirex/explore/node?node=A__AZgEw2fWxmvPzpRgXlGAMQ__AM62-ACADEMY__uiYMDcq__LATEST
您应该能够将定义的 SRAM 存储器区域传递到 Linux devicetree 文件节点中、就像定义的 DDR 存储器区域一样。
此致、
尼克
Nick、
感谢您的回复。
是否也可以在运行 Linux 的 A53时在 SRAM 上分配 IPC 存储器? 我猜是的。
您好、Tony、
这是一个包含复杂答案的简单问题。
您能否在此处提供有关用例的更多详细信息? 例如、
1)您说的是用于 Linux <-->远程核心通信的 RPMSg IPC VRingS?
2) 2)您是否在谈论远程内核之间的 IPC? (即不使用 Linux)?
3) 3)或者我们是否在讨论其他类型的 IPC?
4) 4)是否有特定的时序注意事项?
等等
如果您谈论的是 RPMsg IPC VRINGS:
请记住这一点:
1) AM64x SRAM 仅为2MB、Linux 与1个远程内核之间的 RPMsg IPC VRINGS 默认占用1MB (因为总共512个缓冲区、每个方向256个缓冲区)。 也许有 一种方法可以通过减少缓冲器数量来减小尺寸,但上次我尝试减少 Virtio 缓冲器的数量时,它不起作用。 这将需要额外的开发工作。
2)我们只测试了进入 DDR 的 RPMSg IPC VRNG。 可能是一个问题、导致我们无法将这些缓冲器放置在 SRAM 中、但我无法准确地告诉您相关信息。
此致、
尼克
您好、Tony、
只是为了澄清一下:如果您要求在 SRAM 中的 Linux 和远程内核之间设置 RPMsg IPC VRING、那么这种做法不受支持、而且无论我们是否能够减少 Virtio 缓冲区的数量、这种做法甚至都不可能实现。
通常、您不希望将共享内存设置为可高速缓存。 每当 R5F 检查其他人是否已写入存储器时、您都希望 R5F 实际外出读取存储器区域、而不是仅 读取其缓存并假设数据尚未更新。
此致、
尼克
您好、Tony、
我认为这应该可行、但我需要将您的问题转给另一位员工进行验证。
在我介绍您的主题之前、您能帮助我理解将 IPC 内存区域设置为可缓存的用例吗? 这种存储器访问优化是否是某种存储器访问优化、在短期内您会尝试通过将传入的 IPC 数据存储在缓存中而不是复制到本地存储器来节省存储器?
此致、
尼克
Nick、
背面接地是这个岗位:
如果可以利用可缓存 IPC 存储器、那么将 IPC 共享存储器放置在何处无关紧要、因为即使将其放置在 DDR 上、吞吐量也足够快。
您好、Tony、
啊,还可以。 Anil 是我会问的缓存操作是如何工作的、所以我让他来评论另一个线程。
由于您将使用 ipc_rpmsg_echo 示例、我假设您在两个 MCU+内核之间讨论 IPC。
在查看这些测试时、我们会想到几个问题:
1) 1)内核如何通知内核共享存储器数据已就绪? 我假设 IPC_Notify 最大程度地减少通知延迟?
2) 2)这里的延迟注意事项是什么?
例如、您是否正在尝试尽可能缩短 从发送内核发送 IPC Notify 通知数据已就绪到接收内核实际读取数据之间的延迟?
您是否关心延迟、只是想尽量减少 R5F 用于读取数据的时钟周期?
如果延迟无关紧要、您只是想最小化 R5F 进行读取或写入的时钟周期、那么高速缓存失效/读取高速缓存操作可能是个好主意(具体取决于 CacheP_inv / CacheP_wbInv 实际工作方式)。 但是、如果延迟需要关注、您实际上可能会也可能没有看到使用高速缓存带来的好处。
此致、
尼克
Nick、
我们提供了详细信息、其中延迟和吞吐量对于实时用例都很重要。 客户将对其进行评估和比较。
现在我们可以在 R5F 内核上使用 RTOS 的缓存 API、如何 在 A53 Linux 到 IPC 存储器上启用缓存并实现缓存一致性?
您好、Tony、
这听起来不错。
我并不十分熟悉 Linux 与缓存的具体交互方式。 高级用户空间应用代码在发送和接收常规的 RPMsg 消息时无需担心缓存管理。
但是、它看起来就像我们使用零占空比示例进行一些缓存一致性管理:
https://git.ti.com/cgit/rpmsg/rpmsg_char_zerocopy/
来自 https://git.ti.com/cgit/rpmsg/rpmsg_char_zerocopy/tree/linux/README.md
We're doing a very basic cache coherency management with the help of
*DMA_BUF_IOCTL_SYNC* ioctl before and after accessing the mmapped area.
它引用的行在此处:
https://git.ti.com/cgit/rpmsg/rpmsg_char_zerocopy/tree/linux/src / rpmsg_char_zerocopy.c#n226
这是否意味着 DDR 存储器区域 实际上已 移至本地缓存、对 DDR 存储器区域的任何读取操作都将实际从本地缓存而不是 DDR 进行读取? 这些同步是否就是为了超级安全? 我不确定的那部分。
此致、
尼克
您好、Tony、
我在度假直到明天、因此我现在提供快速响应、我将有更多时间在星期五查看此内容。 如果我在星期一之前未再次回复、请 Ping 该主题。
AM64x Academy
首先、请注意 AM64x Academy 多核模块现已在线! 客户使用以下工具可能会更容易:
https://dev.ti.com/tirex/explore/node?a=7qm9DIS__LATEST&node=A__AbwqjEswy38Z6lZWYQC-5g__AM64-ACADEMY__WI1KRXP__LATEST
回答问题
这里有几个潜在的问题。 我没有发布的 SRAM 示例、我现在可以为您指出、因此我们必须一起完成。
首先、如果我回忆正确、在客户的器件树中修改的保留存储器部分专门用于 DDR。 您可以在 am64-main.dtsi 文件中找到 SRAM 分配。 因此、如果客户要添加 SRAM 分配、则需要将其添加到 SRAM 节点而不是 DDR 节点。
其次、请注意、我们仅测试了1MB Virtio 部分在 DDR 中工作、而不是在 SRAM 中工作。 我不确定资源表是否也需要位于 DDR 中、或者它是否可以进入 SRAM 中。 但这是另一项要测试的内容。
第三、 除非进行修改以添加资源表、否则 Linux Remoteproc 将无法加载 GPIO_LED_BLINK。 请参阅 AM64x Academy、多核模块页面"远程内核上的应用开发"
https://dev.ti.com/tirex/explore/node?a=7qm9DIS__LATEST&node=A__AeMVTHckwFDmFoNkRHpRPw__AM64-ACADEMY__WI1KRXP__LATEST
此致、
尼克
再需注意的一点是、对于 GPIO_LED_BLINK 示例、应在 Linux devicetree 中禁用远程内核正在使用的 GPIO 模块。 请参阅 https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/09_01_00_41/exports/docs/api_guide_am64x/EXAMPLES_DRIVERS_GPIO_INPUT_INTERRUPT.html 上的注释
此致、
尼克
您好、Tony、
今天、我花了一些时间重新阅读该主题。 我在之前的回复中涵盖了大多数重要内容、但我确实有一个最后的要点:
SysConfig 内存配置器和 SRAM 分配
目前、我还没有玩过 SysConfig GUI 中的存储器配置器工具。
客户应参考其 linker.cmd 文件、以仔细检查 SysConfig 工具在 SRAM 中的放置数据的位置。 我不确定 SysConfig 是否考虑了 Linux 内存分配(我怀疑没有)、因此客户可能需要直接修改 linker.cmd 文件来更改 SRAM 分配、以便与它们在 Linux devicetre 中定义的内容保持一致。
此致、
尼克