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.

[参考译文] CCS/TMS320F28377S:SYS-BIOS RTOS 负载分析可降低 CPU 负载

Guru**** 2473260 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/939588/ccs-tms320f28377s-sys-bios-rtos-load-analysis-decreases-cpu-load

器件型号:TMS320F28377S
Thread 中讨论的其他器件:SYSBIOS

工具/软件:Code Composer Studio

你好。

我想知道、如果我在这些设置中激活 DIE SYS-BIOS RTOS 负载分析、CPU 总负载将降低~5%。

我预计由于仪表的原因、CPU 负载将增加。 我使用  Load_getCPULoad()函数获取 CPU 负载。

那么、这怎么会发生呢?

谢谢、致以诚挚的问候

Christian

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

    尊敬的 Christian:

    如何测量前后的 CPU 负载? 具体而言、在这两种情况下.cfg 看起来是什么样的?

    Todd

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

    你(们)好。

    我将使用 Load_getCPULoad()函数进行 CPO 负载测量。 我每500ms 调用一次、并将返回值写入变量。

    我在更改前后都附加了 app.cfg。

    BR

    Christiane2e.ti.com/.../app_5F00_before.cfge2e.ti.com/.../app_5F00_after.cfg

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

    尊敬的 Christian:

    这里有两个不同的东西。

    1.启用/禁用负载模块以收集目标上的 CPU 负载

    2.启用/禁用内核以生成日志记录。  

    在两个.cfg 文件中、您都要启用加载模块(项目1)

    VAR Load = xdc.useModule('ti.sysbios.utils.Load');
    Load.taskEnabled = false; 

    在 app_before.cfg 文件中、您将采用内核日志记录的默认设置。  BIOS.logsEnabled 的默认值为 true。

    在 app_after.cfg 中、您将通过 LoggingSetup.sysbiosTaskLogging = false 关闭内核日志记录。 此外、LoggingSetup.sysbiosSwiLogging 和 LoggingSetup.sysbiosHwiLogging 的默认值为 false。 由于日志记录较少、CPU 负载将会下降。  

    LoggingSetup 旨在使日志配置更简单。 我们不建议使用 LoggingSetup,也不建议使用显式配置记录器和加载(您正在执行的操作)。 基本上是 a)只使用 LoggingSetup (并根据需要调整其中的几个参数)或 b)不使用 LoggingSetup 并显式创建日志程序、设置 Diags mask 等)

    Todd

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

    你(们)好。

    很抱歉、但我没有给你。

    ToddMullanix 说:
    在 app_fter.cfg 中、您将通过 LoggingSetup.sysbiosTaskLogging = false 关闭内核日志记录。 此外、LoggingSetup.sysbiosSwiLogging 和 LoggingSetup.sysbiosHwiLogging 的默认值为 false。 由于日志记录较少、CPU 负载将会下降。  [/报价]

    LoggingSetup.sysbiosTaskLogging = false 是正确的、但 LoggingSetup.sysbiosHwiLogging = true 并且 LoggingSetup.loadTaskLogging 在 app_after.cfg 文件中也是正确的。

    ToddMullanix 说:
    LoggingSetup 旨在简化日志记录的配置。 我们不建议使用 LoggingSetup,也不建议使用显式配置记录器和加载(您正在执行的操作)[/quot]

    我不想同时激活这两个、只想进行总体 CPU 负载测量。 仅性能分析需要详细记录任务、HWI 等、并应在发布的软件中停用。

    我做了更多实验。 随附了两个 cfg 文件、其中唯一的区别是我启用/禁用 loadTaskLogging 和 loadHWILogging 的最后两行。 在最后两行(App2_after.cfg)中启用日志记录后、CPU 负载会降低。

    e2e.ti.com/.../app2_5F00_before.cfg

    e2e.ti.com/.../app2_5F00_after.cfg

    谢谢、BR

    Christian

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

    Christian、

    计算 CPU 负载的方法会因"LoggingSetup.loadTaskLogging"的设置而异。 此配置设置决定了加载模块在运行时使用的方法。

    如果 LoggingSetup.loadTaskLogging = false、则 Load.taskEnabled 将设置为 false。

    如果 LoggingSetup.loadTaskLogging = true、则 Load.taskEnabled 将设置为 true (在没有通过 UIA 进行配置的情况下使用 Load 时是默认值)。

    当 Load.taskEnabled 为 false 时、计算负载的方法基于空闲循环执行的次数(在空闲任务上下文中)以及该循环任何执行的最小执行时间。 当空闲循环的执行时间变化不大时、此方法很好。 但是、当空闲循环中完成的工作发生变化时、它会受到很大的影响。 这在负载模块说明中被描述为"任务负载被禁用和无电源管理"。

    当 Load.taskEnabled 为 true 时、任务挂钩将用于监视单个任务的执行、包括空闲任务。 在这种情况下、空闲任务中花费的时间不被视为 CPU 负载。 这种方法确实会增加执行任务挂钩函数时的一些轻微开销、但当应用程序具有工作负载可变的空闲循环函数时、可以更好地进行测量。 此方法在负载模块说明中被描述为"任务负载启用和无电源管理"。

    在您的应用程序配置文件中有一行:
    idleFxns[0]="&mySysMin_Flush";

    如果此函数确实在空闲循环中执行 SysMIN_flush()操作,并且使用"LoggingSetup.loadTaskLogging= false",则报告的 CPU 负载将会更高,因为刷新操作归因于 CPU 负载。

    当"LoggingSetup.loadTaskLogging = true"时、刷新操作的工作归于空闲任务本身、而不被视为 CPU 负载。

    这是否说明了问题?

    此致、
    Scott

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

    您好、Scott。

    现在更清楚了。

    但是、如果我删除该行:

    idleFxns[0]="&mySysMin_Flush";

    然后、我预计 CPU 会减小、但它不会减小。 空闲任务中的 CPU 还有哪些功耗?

    谢谢

    BR

    Christian

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

    尊敬的 Christian:

    您能否查看应用程序的空闲函数列表以查看循环中正在运行的内容?  在 CCS 中,可以使用“Tools->Runtime Object View”或“Tools->ROV Classic”来查看此内容。  要使用的工具取决于 CCS 和 SYS/BIOS 版本,早期版本使用“ROV Classic”,较新版本使用“运行时对象视图”。

    可以解释您看到的情况的一件事是、如果 Swi 和 Hwi 活动被归因于任务负载。  如果你启用对 Swi 和 Hwi 负载的跟踪、你可能会看到报告的 CPU 负载下降。

    要使用两种不同的方法获得相同的负载监控精度、配置设置应为:

    1) 1)对于不带 UIA 的运行时加载模块:

    VAR Load = xdc.useModule('ti.sysbios.utils.Load');
    load.swiEnabled = true;
    load.hwiEnabled = true;
    load.taskEnabled = true;


    或2)使用 UIA 配置、而不显式配置负载模块:

    VAR LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
    LoggingSetup.sysbiosTaskLogging = false;
    LoggingSetup.loadTaskLogging =真;
    LoggingSetup.loadHwiLogging =真;
    LoggingSetup.loadSwiLogging =真;

    在这两种不同的配置下、您是否会看到相同的结果?

    谢谢、
    Scott

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

    您好、Scott。

    这是空闲任务中的函数列表。 我已经删除了 mySysMinFlush 和 ti_SysBIOS_hal_Hwi_checkStack、但 CPU 负载没有变化。

    [报价 USER="ScottG"]对于这两种不同的配置,您是否能看到相同的结果?[/quot]

    是的、CPU 负载是相同的。

    对我来说、尽可能降低性能非常重要。 因此、如果 CPU 负载降低只是一个衡量"问题"的标准、那么这里就没有什么值得赢得的了。

    感谢你的帮助

    Christian