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.

[参考译文] PROCESSOR-SDK-AM64X:在较新的 Linux SDK 版本上、上下文切换性能不佳

Guru**** 2430620 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1541446/processor-sdk-am64x-context-switching-underperformance-on-newer-linux-sdk-versions

器件型号:PROCESSOR-SDK-AM64X


工具/软件:

我们有一个对上下文切换效率低下敏感的应用用例。  当我们迁移到较新版本的 Linux SDK 时、我们会看到显著降低的基准测试结果。 使用 AM64x 开发套件、我们使用 Stress-ng 和 perf bench 收集数据:

  • Stress-ng --context 1 --perf --metrics-brief --timeout 5s
  • 性能工作台计划

为了从 stress-ng 结果中提供粗略的数字、我们看到 1100 ops/s(Linux SDK 08.06.00.42、5.10 内核)-> 755 ops/s(Linux SDK 09.02.01.10、6.1 内核)-> 710 ops/s(Linux SDK 10.01.10.04、6.6 内核)。 差异的大小在性能测试台结果上相似、我们发现在跟踪和评测我们自己的应用时也会产生相同的影响。

我们正在寻求一些帮助来  降低差异。 谢谢!

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

    您好 Cory、

    我联系的是我的团队成员、他们花了更多时间来优化循环测试基准。 如果我没有在下周中回复、请随时 ping 通螺纹。

    此致、

    Nick

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

    您好 Cory、

    对此处延迟的回复表示歉意。 自上一个帖子以来、我已经错过了关键团队成员 5 或 6 次。 我想在明天抓住他们,如果我没有在一周结束前再次回复,请随时 ping 通线程。

    此致、

    Nick

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

    您好 Cory、

    好的、感谢您的耐心。

    PERF 不是我或我的同事拥有丰富经验的工具、因此我无法深入了解您可能希望的细节。 但我们来讲述一些关于影响 cyclictest 和 lmbench 的东西的基本概念、我 希望性能会受到类似因素的影响。

    首先、我们来谈谈基准测试  

    一般而言、我希望 SDK 9.1 和 9.2 上的基准测试数据看起来最好。 我来总结一下不同 SDK 版本上报告的(非优化)基准测试结果。

    最佳报告值用蓝色表示、最差报告值用红色表示。  我刚刚在 11.0 上检查了 lmbench 结果、除了  lat_ctx-4-256k (us) 之外、一切都大致相同、我得到了~8usec。  

    8.6. 9.0 9.1. 9.2.1.10. 10.0 10.1. 11.0 11.1.
    cyclictest (usec) 平均 8,8.
    最大 152、82
    平均 12、13
    最大值 168, 88
    平均 7、7
    最大 72、48
    平均 7、8
    最大 60、50  
    平均 8、9
    最大值 49、66
    平均 8、8
    最大值 77,105
    复制自 10.1   复制自 10.1  
    lmbench 不适用 不适用

    LAT_ctx-2-128k (us)

    6.01.

    LAT_ctx-2-256k (us)

    15.74

    LAT_ctx-4-128k (us)

    7.02.

    LAT_ctx-4-256k (us)

    10.76

    LAT_ctx-2-128k (us)

    5.12

    LAT_ctx-2-256k (us)

    20.50

    LAT_ctx-4-128k (us)

    7.30

    LAT_ctx-4-256k (us)

    10.17

    LAT_ctx-2-128k (us)

    6.35

    LAT_ctx-2-256k (us)

    19.78

    LAT_ctx-4-128k (us)

    6.93.

    LAT_ctx-4-256k (us)

    3.52(拼写错误)

    LAT_ctx-2-128k (us)

    5.52

    LAT_ctx-2-256k (us)

    19.77

    LAT_ctx-4-128k (us)

    6.16

    LAT_ctx-4-256k (us)

    0.00(拼写错误?)

    LAT_ctx-2-128k (us)

    14.36

    LAT_ctx-2-256k (us)

    32.22

    LAT_ctx-4-128k (us)

    11.99

    LAT_ctx-4-256k (us)

    19.26

    LAT_ctx-2-128k (us)

    10.52(最小值 9.79、最大值 11.79)

    LAT_ctx-2-256k (us)

    25.39(最小 15.41、最大 30.59)

    LAT_ctx-4-128k (us)

    11.98(最小值 11.81、最大值 12.29)

    LAT_ctx-4-256k (us)

    12.54(最小值 6.99、最大值 15.42)

    为什么 SDK 9.1 是“最佳“?

    一般来说、Linux 内核和文件系统上运行的“垃圾“越多、基准测试就越差。 在每个版本的 Linux 中、默认的内核配置在默认情况下会添加越来越多的内容、以启用越来越多的功能。

    在 SDK 9.1 中、我们更新了内核配置、以尽可能删除大量不需要的数据。 这是 SDK 文档中列出的“ti_arm64_prune.config"和“和“ti_rt.config":“: https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/09_02_01_10/exports/docs/linux/sdk.html#using-default-configurations Foundational_Components_Kernel_Users_Guide

    在此处可找到文件:
    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/kernel/configs/ti_rt.config?h=ti-linux-6.12.y-cicd 

    我们继续在后续 SDK 中禁用一些不需要的内容、但听起来我们似乎没有专门时间禁用已添加的所有新内容。 一般而言、在后续的 SDK 中、性能会略有下降。

    那么、这与您的数字有何关系?

    如果应用上述内核配置、您实际上看到的性能急剧下降、低于 SDK 8.6 和 SDK 9.2.1.10。 您能给我详细介绍一下您的测试环境吗?

    另一个可能有所不同的事情(我没有验证)是文件系统的大小。 我怀疑我们在微型文件系统上可能会看到比默认文件系统上更好的性能、而默认文件系统上运行的代码要多得多。

    此致、

    Nick