工具/软件:
尊敬的团队:
我的一个客户尝试使用 TaskP_loadGetTotalCpuLoad() 来估计 CPU 负载。
Exapmles 是;
- Interrupot 服务例程,每 50us 中断运行 20 μ s 执行时间,单核。
- TaskP_loadGetTotalCpuLoad() 返回了 33%的 CPU 负载。
TaskP_loadGetTotalCpuLoad() 的这种行为是否正确?
此致
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.
工具/软件:
尊敬的团队:
我的一个客户尝试使用 TaskP_loadGetTotalCpuLoad() 来估计 CPU 负载。
Exapmles 是;
- Interrupot 服务例程,每 50us 中断运行 20 μ s 执行时间,单核。
- TaskP_loadGetTotalCpuLoad() 返回了 33%的 CPU 负载。
TaskP_loadGetTotalCpuLoad() 的这种行为是否正确?
此致
我的一位客户正在尝试使用 TaskP_loadGetTotalCpuLoad () 估算 CPU 负载。
CPU 负载的计算公式如下:
关键见解: CPU 负载= 100%- idle_count
TaskP_loadGetTotalCpuLoad () 是否正确?
是、这是预期行为 、原因如下:
ISR 计量:FREERTOS/SAFERTOS 内核在 CPU 负载计算中没有单独考虑 ISR 时间。 ISR 会从任务中“窃取“时间、这种窃取行为并未完全反映在空闲任务的测量结果中。 API 将计算正在运行的任务的时间以及在后台计算 ISR
测量方法:API 通过跟踪空闲任务时间来测量 CPU 负载、而不是直接测量所有 CPU 活动
在 FreeRTOS 中、 即使 ISR 中断空闲任务、也不会将 ISR 中花费的时间归因于空闲任务。 运行时计数器在 ISR 期间继续递增、但这次不会添加到任何特定任务的运行时中。
因此、当将 CPU 负载计算为 “100%- idle_cpercentage“时、ISR 时间显示为“非空闲“时间、这会正确地报告为 CPU 负载。
在每次测试中、是否始终报告 33%的 CPU 负载、或者您是否看到了变化? 还要确保在调用 CPU 加载 API 之前调用“TaskP_loadResetAll() 以获得稳定的结果。
此致、
Shaunak