3

我目前正在使用 ftrace(特别是通过 Android 上的 atrace)来帮助我了解调度程序的线程唤醒流程。然而,下面的行让我感到困惑。它表明当前任务 (ls-4787) 正在自行唤醒 (comm=ls pid=4787)。

为什么或如何会发生这种情况?我想不出当前正在运行的进程(已经在运行队列中!)将自己添加到队列中的任何情况。我读错了吗?感谢您提供的任何帮助!

 kworker/0:0-4692  ( 4692) [000] d..3 52894.176161: sched_switch: prev_comm=kworker/0:0 prev_pid=4692 prev_prio=120 prev_state=S ==> next_comm=ls next_pid=4787 next_prio=120
        adbd-209   (  209) [001] d..3 52894.176192: sched_switch: prev_comm=adbd prev_pid=209 prev_prio=120 prev_state=S ==> next_comm=adbd next_pid=230 next_prio=120
          ls-4787  ( 4787) [000] dN.4 52894.176204: sched_wakeup: comm=kworker/0:0 pid=4692 prio=120 success=1 target_cpu=000
          ls-4787  ( 4787) [000] dN.4 52894.176211: sched_wakeup: comm=ls pid=4787 prio=120 success=1 target_cpu=000
          ls-4787  ( 4787) [000] d..3 52894.176221: sched_switch: prev_comm=ls prev_pid=4787 prev_prio=120 prev_state=R+ ==> next_comm=kworker/0:0 next_pid=4692 next_prio=120

作为附录,这些特殊实例似乎总是与 kworker 事件相结合,但我不确定为什么从调度程序的角度来看这会受到影响。

4

0 回答 0