Thread 中讨论的其他器件:SYSBIOS
工具/软件:Code Composer Studio
你好。
我想知道、如果我在这些设置中激活 DIE SYS-BIOS RTOS 负载分析、CPU 总负载将降低~5%。
我预计由于仪表的原因、CPU 负载将增加。 我使用 Load_getCPULoad()函数获取 CPU 负载。
那么、这怎么会发生呢?
谢谢、致以诚挚的问候
Christian
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.
工具/软件:Code Composer Studio
你好。
我想知道、如果我在这些设置中激活 DIE SYS-BIOS RTOS 负载分析、CPU 总负载将降低~5%。
我预计由于仪表的原因、CPU 负载将增加。 我使用 Load_getCPULoad()函数获取 CPU 负载。
那么、这怎么会发生呢?
谢谢、致以诚挚的问候
Christian
尊敬的 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
尊敬的 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