mirror of
https://github.com/apache/nuttx.git
synced 2026-10-08 23:05:20 +00:00
Fix the abnormal CPU usage statistics issue caused by missing update
of run_start timestamp in the target task (to) TCB when the CPU load
counting mode is SCHED_CPULOAD_CRITMONITOR.
Before this fix, the to->run_start was not set when switching context,
leading to incorrect CPU usage calculation (e.g., Idle_Task showed 52.9%
CPU usage instead of 100%, and running tasks had wrong non-zero values).
After fixing, the CPU statistics return to normal: Idle_Task correctly
shows 100% usage, and non-running tasks show 0% as expected.
Enable:
+CONFIG_SCHED_CPULOAD_CRITMONITOR=y
+CONFIG_SCHED_CRITMONITOR=y
Before:
nsh> ps
TID PID PPID PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK CPU COMMAND
0 0 0 0 FIFO Kthread - Ready 0000000000000000 0069584 52.9% Idle_Task
1 0 0 224 FIFO Kthread - Waiting Semaphore 0000000000000000 0067456 0.0% sim_loop_wq 0x7b4417a003f0 0x7b4417a00470
2 0 0 224 FIFO Kthread - Waiting Semaphore 0000000000000000 0067464 17.6% hpwork 0x4014dba0 0x4014dc20
3 3 0 100 FIFO Task - Running 0000000000000000 0067496 36.8% nsh_main
After:
nsh> ps
TID PID PPID PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK CPU COMMAND
0 0 0 0 FIFO Kthread - Ready 0000000000000000 0069584 100.0% Idle_Task
1 0 0 224 FIFO Kthread - Waiting Semaphore 0000000000000000 0067456 0.0% sim_loop_wq 0x7646932003f0 0x764693200470
2 0 0 224 FIFO Kthread - Waiting Semaphore 0000000000000000 0067464 0.0% hpwork 0x4014dba0 0x4014dc20
3 3 0 100 FIFO Task - Running 0000000000000000 0067496 0.0% nsh_main
This issue was introduced by PR #17075, where the run_start update for the
target task was omitted in the SCHED_CPULOAD_CRITMONITOR branch.
Signed-off-by: chao an <anchao.archer@bytedance.com>
|
||
|---|---|---|
| .. | ||
| CMakeLists.txt | ||
| Make.defs | ||
| nxsched_checkstackoverflow.c | ||
| queue.h | ||
| sched.h | ||
| sched_addblocked.c | ||
| sched_addreadytorun.c | ||
| sched_backtrace.c | ||
| sched_cpuload.c | ||
| sched_cpuload_oneshot.c | ||
| sched_cpuload_period.c | ||
| sched_critmonitor.c | ||
| sched_dumponexit.c | ||
| sched_foreach.c | ||
| sched_get_stackinfo.c | ||
| sched_get_stateinfo.c | ||
| sched_get_tls.c | ||
| sched_getaffinity.c | ||
| sched_getcpu.c | ||
| sched_getfiles.c | ||
| sched_getparam.c | ||
| sched_getscheduler.c | ||
| sched_gettcb.c | ||
| sched_idletask.c | ||
| sched_lock.c | ||
| sched_lockcount.c | ||
| sched_mergepending.c | ||
| sched_process_delivered.c | ||
| sched_processtick.c | ||
| sched_processtickless.c | ||
| sched_profil.c | ||
| sched_releasetcb.c | ||
| sched_removeblocked.c | ||
| sched_removereadytorun.c | ||
| sched_reprioritize.c | ||
| sched_reprioritizertr.c | ||
| sched_roundrobin.c | ||
| sched_rrgetinterval.c | ||
| sched_self.c | ||
| sched_setaffinity.c | ||
| sched_setparam.c | ||
| sched_setpriority.c | ||
| sched_setscheduler.c | ||
| sched_sleep.c | ||
| sched_smp.c | ||
| sched_sporadic.c | ||
| sched_suspend.c | ||
| sched_switchcontext.c | ||
| sched_sysinfo.c | ||
| sched_unlock.c | ||
| sched_verifytcb.c | ||
| sched_wait.c | ||
| sched_waitid.c | ||
| sched_waitpid.c | ||
| sched_yield.c | ||