This is an automated email from the ASF dual-hosted git repository.

linguini pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new d5b02b6954e sched/critmon: Fix CPU load stats incorrect when using 
SCHED_CPULOAD_CRITMONITOR
d5b02b6954e is described below

commit d5b02b6954ec8d58815ede4a69ccad9365a4b4bc
Author: chao an <[email protected]>
AuthorDate: Tue Mar 3 17:04:30 2026 +0800

    sched/critmon: Fix CPU load stats incorrect when using 
SCHED_CPULOAD_CRITMONITOR
    
    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 <[email protected]>
---
 sched/sched/sched_critmonitor.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sched/sched/sched_critmonitor.c b/sched/sched/sched_critmonitor.c
index 94c944b79c2..c4c3f213e1f 100644
--- a/sched/sched/sched_critmonitor.c
+++ b/sched/sched/sched_critmonitor.c
@@ -375,6 +375,7 @@ void nxsched_switch_critmon(FAR struct tcb_s *from, FAR 
struct tcb_s *to)
 #ifdef CONFIG_SCHED_CPULOAD_CRITMONITOR
   clock_t tick = elapsed * CLOCKS_PER_SEC / perf_getfreq();
   nxsched_critmon_cpuload(from, current, tick);
+  to->run_start = current;
 #endif
 
 #if CONFIG_SCHED_CRITMONITOR_MAXTIME_THREAD >= 0

Reply via email to