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.

[参考译文] SK-AM62:实时性能

Guru**** 2466550 points
Other Parts Discussed in Thread: AM625

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1127375/sk-am62-real-time-performance

器件型号:SK-AM62
主题中讨论的其他器件:AM625

大家好、

我在 am625 SoC 上使用 preemp_RT 内核(v5.10.120-rt70)运行了一系列测试、旨在评估我可以从此器件获得的实时性能、特别是等待计时器事件的用户任务的最坏情况延迟。 我的问题是 以下结果是否 准确地表示我们可能期望的典型最坏情况下的延迟(很抱歉、发布较长的帖子、但详细信息可能会有所帮助)。

测试配置如下:

- PLL 设置为25MHz (启动开关)

-使用来自 RT 测试套件的常规'cyclictest'程序(仅限于 clock_nanosleep()接口)测量的最坏情况下的计时器事件延迟。

-可 从[1]获取 TI 供应商内核

-内核配置调整:  

*禁用 ACPI (CONFIG_ACPI)

*强制启用 CPU_FREQ "性能"调节器
(CPU_FREQ_DEFAULT_GOV_performance)、禁用所有其他调速器

*关闭所有内核调试

-以1kHz 频率运行的20英寸采样环路、由单个线程执行。 这 可能太短、无法观察到最差的数字、但在我们的情况下足以观察 到已有的高值。

- 采样线程始终固定在单个 CPU 上、无论是隔离式(CPU2)还是非隔离式(CPU1)。

-一个应力负载与测试并行运行、其中包括一个 dd 循环持续 清除内存、以及  一个发出大量上下文开关的'hackbench'循环、所有这些都可以在非隔离式 CPU 上自由运行。

实际上、使用的命令是:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~μ A

# dd if=/dev/zero of=/dev/null BS=128M&
# while :; do hackbench; done &
# cyclictest -a -p 98 -m -n -i 1000 -D 20m -q

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~μ A

测试隔离式 CPU 案例时使用'isolcpus=2'引导参数。 对采样线程的正确 CPU 关联性进行了双次检查。

结果如下所示、显示为"最坏情况(平均值)"、所有结果均以微秒为单位、

   隔离式(CPU2)  |  非隔离式(CPU1)

      170(27)                 368(59)

对于这类硬件、这些数字看起来很高、 由于 在其他 CPU 上运行的活动以高速率移动内存和切换上下文、导致在运行延迟测试的隔离式 CPU 上产生明显干扰/噪声。 正如预期的那样、在非隔离式情况下、情况更糟。

 如果能对这些数字有任何了解,并能尽可能减少这些数字,我们将不胜感激。

simal:在 TI 基本内核[2]上移植此 SoC 的 xenomai4 EVL 内核 显示了非 RT 应力负载的相同影响,分别为130 (10)和284 (40))。 这可能排除了特定于 preemp_RT 的问题、因为实现没有任何共同之处。 这个特定测试的另一个要点:在查看 EVL 数据时、我们可以肯定地看到在配置中启用透明的大页面支持的(负面)影响。  Ftracing 告诉我们、这可能与修复页表条目后的 I/D 高速缓存维护操作有关、尽管 CPU 未屏蔽中断、但会显著延迟中断。  由于 不支持此配置、我无法检查 preemp_RT。

谢谢、

[1] git.ti.com/.../、位于#gca705d5c043)

[2] source.denx.de/.../v5.10.120

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

    菲律宾、

    这似乎与我们在 AM64x 和 AM62x 上一直在寻找的一个问题类似。 设置存储器负载固定到一个内核、所有其他内核(1个具有双核 AM64x、3个具有 AM62x)显示延迟显著跳转。 一般而言、存储器压力设置似乎不太重要、请为 AM62x 上的4个内核中的任何一个交换位掩码、以便我在下面有2个内核、而在另外3个内核上的最大循环测试延迟在>300us 范围内快速变化、 而具有存储器压力的内核更受控制。

    taskset 2 stress-ng --memrate 1 --memrate-rd-mbs 100 --memrate-wr-mbs 100 &
    cyclictest -n -m -Sp91 -i400 -M

    我知道这不能解决问题、但我想告诉您、如果您有意见、您认为这是同一个问题。 似乎与 DDR 密集型程序(lmbench bw_mem 也会使其启动)或确切参数没有区别、只是会在显示速度方面产生一些变化。

    如果我不固定后台内存应力程序、问题出现的速度会下降。

     Pekka

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

    您好、Pekka、

    我在主线 v5.19内核上使用 xenoma4运行了一些测试、我认为我们确实观察到了同样的问题:

    -在 µs µs (隔离式)内核上运行压力传感器和延迟测量程序(1kHz 循环)可得到< 45 μ s 的最坏情况、平均为10 μ s、这是可以的。

    -在以 maxcpus=1引导的内核上运行相同的测试配置会在与上述相同的 Ballpark 中生成数字。

    µs µs、现在、在隔离式 CPU 内核上运行10kHz 采样环路(而不是1kHz)、压力源在所有其他内核上自由运行-即有问题的情况-得到< 60 μ s 最坏情况、平均2 μ s、这也很好。

    (所有测试只运行了几分钟、因此这些最坏情况下的数据可能是乐观的、但幅度不大)。

    IOW、它看起来是:

    -运行采样循环的 CPU 内核越忙,问题就越大。

    -采样环路越快,数据就越好。 由于高速缓存较热、非 RT 活动需要更少的时间来清除 RT 端使用的高速缓存行、因此通常会产生这种结果。 然而,在这种情况下,增加采样频率似乎完全是一个问题,而不仅仅是略微改善数字。

    我想知道与 CPU 闲置状态相关的内容是否可以正常工作? 关于这一点、一些测试结果更多:

    -完全禁用 CPU_IDLE、或者将 SCI 空闲驱动程序保留在输出未改进图。

    -使用 idle=poll 引导也没有改进它们。

    对于所有这些测试、启用了 CPU_FREQ、并强制开启"性能"调节器。 相反、禁用 CPU_FREQ 无法解决问题。