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.

[参考译文] TDA4VH-Q1:R5F 执行失速

Guru**** 2472510 points
Other Parts Discussed in Thread: TDA4VH-Q1

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1463102/tda4vh-q1-stalls-in-r5f-execution

器件型号:TDA4VH-Q1

工具与软件:

您好!

我有一个关于代码执行延迟的问题。

电路板:J784s4定制电路板
PDK 09.02.00.30
Linux
SPL 引导
拆分模式下的 R5F 主域: MCU2_1

我正在使用 Lauterbach ETM 示波器对 TDA4VH-Q1上的 R5F 进行性能评测。

当我在 A72上施加压力时、我会在 R5F (连接和未连接 JTAG 调试器)上观察到零星的停转。

我们使用的 Stress-ng 命令如下:

stress-ng --cpu-method matrixprod --matrix 0 --memcpy 4 --ioport 4 --VM 4 --vm-bytes 20%--fault 4 -- tz



Stress-ng --cache 8 --激进-- CPU 3.

此外、我们使用 RPMSG 和 MSMC 上的数据传输加载系统。

我们使用 GPIO 和 Timer12来确认延迟是否"真实"。

您有什么想法会导致超过16us 的长时间延迟?




此致、
Matthias

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

    您好!

    您在 MCU2_1域中运行什么?

    [报价 userid="587610" url="~/support/processors-group/processors/f/processors-forum/1463102/tda4vh-q1-stalls-in-r5f-execution "]我正在使用 Lauterbach ETM 示踪剂对 TDA4VH-Q1上的 R5F 进行性能评测。

    当我对 A72施加压力时、我发现 R5F 中有零星的失速

    您如何引入压力? 您能详细说明一下吗?  

    此致

    Tarun Mukesh

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

    尊敬的 Turan:

    我们使用 cpsw2g 开关运行 EtherCAT 应用程序、结果通过 MSMC 提供。 要通知 a72 Linux、使用 rpmsg。

    为了在 A72 Linux 端模拟应力和负载、我们将使用 Stress-ng (https://manpages.debian.org/unstable/stress-ng/stress-ng.1.en.html)。

    "系统互连"上有一些数据带宽限制?  

    ...

    此致
    Thomas

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

    您好、Thomas:

    您是在 R5F 上使用一些示例 Enet 应用、还是定制实施?

    此致、
    Tanmay

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

    您好、Tanmay、

    这是基于 PDK Enet 驱动程序的定制应用。 我们将使用 uDMA 传输帧。
    根本故障是否会在 UDMA 访问和 R5F 内核之间的总线上引起仲裁问题?

    此致
    Thomas

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

    您好、Thomas:

    理论 UDMA 最大吞吐量远大于单个 cpsw2g 链路能够推送的吞吐量。

    我感到困惑的是 rpmsg 在摊位上扮演的角色。 Linux 通知的用途是什么? 通过以太网捕获的数据是否全部使用 rpmsg 传输到 A72?

    此致、
    Tanmay

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

    您好、Tanmay、

    我们只将 RPMSG 用于 R5F 和 A72之间的低优先级通信。 UDMA/以太网通信在高优先级的 FreeRTOS 线程上完成、而 RPMSG 在低优先级线程上处理。
    通过 RPMSG 传输的数据与帧数据没有关系、至少不直接相关。

    理论上、两个特征不应相互影响、但我们的观察结果表明存在交互...

    此致、
    Matthias

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

    Matthias、您好!

    失速是否可能是由 DDR 访问延迟引起?  

    当我们对 A72进行显著应力测试时、这将导致 A72对 DDR 执行大量的存储器访问。 这可能会导致从 R5进行一些 DDR 访问的延迟、从而解释了延迟的原因。

    我们可以看到 A72和 R5的高速缓存命中/未命中百分比以及 DDR 利用率吗?  

    此致、
    Tanmay

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

    您好、Tanmay、

    如果 DDR 访问可能导致这些停顿、则很可能是原因。

    您能解释一下延迟对执行的内存访问的影响吗?
    我们可以看到、当发生此类事件时、整个 R5F 似乎冻结了-即使是中断也会延迟。 存储器访问停滞也解释了这种行为。

    我们将尝试缩小测试用例中的问题范围、并收集有关高速缓存未命中/命中的信息。

    非常感谢。

    此致、
    Matthias

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

    您好、Tanmay、

    我可以再多找出这个问题。 当我只是发送 RPMSG 突发时会发生停顿。
    这意味着它与 uDMA、以太网是不相关的。 此外、Stress-ng 未运行。

    在 Virtio 子系统中会出现停顿:



    我还在 R5F 上观察到一些 PMU 计数器。 它们都是零。

    CSL_ARM_R5_PMU_EVENT_TYPE_ICACHE_MISS
    CSL_ARM_R5_PMU_EVENT_TYPE_DCache_MISS
    CSL_ARM_R5_PMU_EVENT_TYPE_DCache_access
    CSL_ARM_R5_PMU_EVENT_TYPE_ICACHE_STALL
    CSL_ARM_R5_PMU_EVENT_TYPE_DCache_STALL
    CSL_ARM_R5_PMU_EVENT_TYPE_LSU_BUSY_STALL
    CSL_ARM_R5_PMU_EVENT_TYPE_LSU_SB_STALL
    CSL_ARM_R5_PMU_EVENT_TYPE_LSU_QF_STALL


    是否可以通过更改 QoS 设置来解决该问题?

    此致、
    Matthias

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

    您好!

    一旦 RPMSG 发送被触发,Virtio_getAvailBuf()就会从 R5F 内核和 A72之间保留的区域获得可用的缓冲区。 当所有的缓冲区被使用,那么它将触发 Virtio kick Virtio_kick  ()。我们在运行 IP 回显测试示例时从未遇到任何停顿。 您能否用默认的 IPC 回显测试应用程序检查它是否停止?
    此致
    Tarun Mukesh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Tarun:

    您是否尝试过在内存有压力的情况下运行 IPC echo 测试应用? 设置此测试需要一些时间
    但我希望获得类似的结果。

    我可以通过在北桥上应用 QoS 设置和在 DDR 上应用 CoS 设置来改善这种情况。

    现在、我想问为什么存储器访问的停顿也会阻碍执行(特别是延迟中断)?

    此致、
    Matthias

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

    我在 ARM R5规范中找到了该行为的解释。

    Cortex-R5技术参考手册 r1p2

    收到中断后、处理器将放弃任何待处理的可重新启动内存操作。 可重新启动的内存操作包括多字传输指令 LDM、LDRD、STD、STM、PUSH、 和 POP、它们可以访问正常内存。

    为了尽可能减少中断延迟、ARM 建议您不要执行:

       对标记为设备或严格排序的存储器区域的多次访问

       将操作转换为存储器的缓慢区域。

    在我的设置中、Virtio 队列的内存区域严格排序。

    它是否有助于将其设置为正常(+共享)、或者我是否会冒导致 内存不一致甚至损坏的风险?

    调用这些函数会有所帮助吗

    CSL_armR5CacheWb
    CSL_armR5CacheInv

    实现一致性?

    此致、
    Matthias

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

    您好!

    即使在我结束,我有 VRING 内存配置如下,但我从来没有遇到任何问题,而传输消息.

    /*区域7配置:环形缓冲区*/
    .RegionID = 7u
    .enable = 1U
    #if defined (BUILD_MCU1_0)
    .baseAddr = 0xA0000000
    #elif defined (BUILD_MCU1_1)
    .baseAddr = 0xA1000000
    #elif defined (BUILD_MCU2_0)
    .baseAddr = 0xA2000000
    #elif defined (BUILD_MCU2_1)
    .baseAddr = 0xA3000000
    #elif defined (BUILD_MCU3_0)
    .baseAddr = 0xA4000000
    #elif defined (BUILD_MCU3_1)
    .baseAddr = 0xA5000000
    #endif
    .size = CSL_ARM_R5_MPU_REGION_SIZE_2MB、
    .subRegionEnable = CSL_ARM_R5_MPU_SUB_REGION_ENABLE_ALL
    .exeNeverControl = 1u
    .accessPermission = CSL_ARM_R5_ACC_PERM_PRIV_USR_RD_WR、
    .shareable = 0u
    .cacheable =(uint32_t) false
    .cachepolicy = CSL_ARM_R5_cache_policy_non_cachable、
    .memattr = 0u
    }
    您是否也有相同的信息?
    此致
    Tarun Mukesh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Tarun:

    我以前使用过以下设置:

        {
          /*区域8配置:
           *资源表和记录内存16 MB
           */
          .RegionID = 8u
          .enable = 1U
          .baseAddr = 0xA3100000u
          .size = CSL_ARM_R5_MPU_REGION_SIZE_16MB、
          .subRegionEnable = CSL_ARM_R5_MPU_SUB_REGION_ENABLE_ALL
          .exeNeverControl = 1u
          .accessPermission = CSL_ARM_R5_ACC_PERM_PRIV_USR_RD_WR、
          .sharable = 1u
          .cacheable =(uint32_t) false
          .cachepolicy = CSL_ARM_R5_cache_policy_non_cachable、
          .memattr = 0u
        }、



    并将 memAttr 现在更改为

    .memAttr = CSL_ARM_R5_MEM_ATTR_SHARTABLE

    这提高了稳定性并进一步降低了延迟。  
    到目前为止、我没有遇到 RPMSG 数据正确性方面的任何问题...

    此致、
    Matthias

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

    是的、在您的设置中、.sharedable = 1、因此您需要提供.memAttr 作为  CSL_ARM_R5_MEM_ATTR_SHAREABLE。 您不能将其保持为0。

    此致

    Tarun Mukesh

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

    使用 CSL_ARM_R5_MEM_ATTR_Sharable 使存储器区域成为"可共享器件"、

    它仍然阻止中断。

    使用 CSL_ARM_R5_MEM_ATTR_GULL_NON_CACHED 将其转换为正常存储器的含义是什么?

    此致、
    Matthias

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

    使用 CSL_ARM_R5_MEM_ATTR_HIGH_NON_cached 将其转换为普通存储器的含义是什么?

     

    对标记为严格排序的存储器的访问对于来自该处理器的所有显式存储器访问都有一个强存储器排序模型。 对被标记为严格排序存储器的访问将作为从该处理器进行所有其它明确访问的存储器屏障、直到访问完成。 另外、对被标记为严格排序存储器的访问必须在一个存储器隔离层的末尾前完成。

    然而、普通存储器可以从该处理器或其他处理器中的不同访问访问访问共享存储器位置。

     

    使用 CSL_ARM_R5_MEM_ATTR_SHAREable 使存储器区域成为"可共享器件"、

    它仍会阻止中断。[/QUOT]

    R5F 内核是否仍处于失速状态? 您能详细说明一下阻塞中断吗? 可共享模式对阻止中断没有任何影响。

    此致

    Tarun Mukesh

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

    感谢您的讲解。

    将所有共享资源从严格排序更改为正常(外部和内部、不可缓存、可共享)后
    我再也没有发现任何摊位了。

    为了确保数据完整性、我在邮箱调用中添加了内存障碍、并且在 VirtIO 队列中未观察到任何数据损坏。

    此致、
    Matthias