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.

[参考译文] AM263P4-Q1:CPU 负载

Guru**** 2578945 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1573616/am263p4-q1-cpu-load

器件型号:AM263P4-Q1


工具/软件:

尊敬的团队:

我的一个客户尝试使用 TaskP_loadGetTotalCpuLoad() 来估计 CPU 负载。

Exapmles 是;

 - Interrupot 服务例程,每 50us 中断运行 20 μ s 执行时间,单核。

 -  TaskP_loadGetTotalCpuLoad() 返回了 33%的 CPU 负载。

 TaskP_loadGetTotalCpuLoad() 的这种行为是否正确?

此致  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的一位客户正在尝试使用 TaskP_loadGetTotalCpuLoad () 估算 CPU 负载。

    CPU 负载的计算公式如下:

    1. 函数使用 vTaskSuspendAll() 暂停调度程序  
    2. 它使用 TaskP_updateIdleTaskLoad() 更新空闲任务统计信息
    3. 它使用 TaskP_updateTotalRunTime() 更新总运行时间
    4. 它将 CPU 负载计算为 taskP_load_cpu_load_SCALE - idle_percentage
    5. 它使用 xTaskResumeAll() 恢复调度程序

    关键见解: CPU 负载= 100%- idle_count

     TaskP_loadGetTotalCpuLoad () 是否正确?

    是、这是预期行为 、原因如下:

    1. ISR 计量:FREERTOS/SAFERTOS 内核在 CPU 负载计算中没有单独考虑 ISR 时间。 ISR 会从任务中“窃取“时间、这种窃取行为并未完全反映在空闲任务的测量结果中。 API 将计算正在运行的任务的时间以及在后台计算 ISR

    2. 测量方法:API 通过跟踪空闲任务时间来测量 CPU 负载、而不是直接测量所有 CPU 活动

    在 FreeRTOS 中、  即使 ISR 中断空闲任务、也不会将 ISR 中花费的时间归因于空闲任务。 运行时计数器在 ISR 期间继续递增、但这次不会添加到任何特定任务的运行时中。

    因此、当将 CPU 负载计算为 “100%- idle_cpercentage“时、ISR 时间显示为“非空闲“时间、这会正确地报告为 CPU 负载。

    在每次测试中、是否始终报告 33%的 CPU 负载、或者您是否看到了变化? 还要确保在调用 CPU 加载 API 之前调用“TaskP_loadResetAll() 以获得稳定的结果。

    此致、
    Shaunak