* K.R. Foley <kr@xxxxxxxxxx> wrote:
Could you explain what the attached trace means. It looks to me like
the trace starts in try_to_wake_up when we are trying to wake amlat,
but then before we finish we get a hit on IRQ 8 and run the IRQ
handler??? Or do I somehow have it backwards? :)
amlat-4973 0-h.3 0?s : __trace_start_sched_wakeup (try_to_wake_up)
amlat-4973 0-h.3 1?s : _raw_spin_unlock (try_to_wake_up)
amlat-4973 0-h.2 1?s : preempt_schedule (try_to_wake_up)
amlat-4973 0 2?s : wake_up_process <IRQ 8-677> (0 1):
this portion shows that amlat-4973 woke up IRQ_8-677. Subsequently the scheduler picked it from a list of 5 tasks:
amlat-4973 0-..2 13?s : trace_array (__schedule)
amlat-4973 0 14?s : __schedule <IRQ 8-677> (0 1): amlat-4973 0 14?s+: __schedule <amlat-4973> (1 2): amlat-4973 0 18?s+: __schedule <<unknown-792> (39 3a): amlat-4973 0 21?s : __schedule <<unknown-4> (69 6e): amlat-4973 0 21?s : __schedule <<unknown-4854> (73 78): amlat-4973 0-..2 22?s+: trace_array (__schedule)
IRQ 8-677 0-..2 31?s : __switch_to (__schedule)
IRQ_8's RT priority was 1, amlat's priority was 2, so IRQ-8 got
selected. (there were also other, SCHED_NORMAL tasks with pid 792, 4 and
4854 in the queue but they did not get selected) [ Note that in reality
the O(1) scheduler only considered IRQ_8 when picking the next task,
it's the tracer that listed all runnable tasks, to make it easier to
validate scheduler logic. This 'list all runnable tasks at schedule()
time' tracing is only done if both tracing and rw-deadlock detection is
enabled.]
in this trace you can see the new RT global balancing in the works as
well:
IRQ 8-677 0 32?s : schedule <amlat-4973> (1 0): IRQ 8-677 0-..2 32?s : finish_task_switch (__schedule)
IRQ 8-677 0-..2 33?s : smp_send_reschedule_allbutself (finish_task_switch)
IRQ 8-677 0-..2 33?s : __bitmap_weight (smp_send_reschedule_allbutself)
IRQ 8-677 0-..2 34?s : __send_IPI_shortcut (smp_send_reschedule_allbutself)
here the scheduler noticed that a higher-prio RT task (IRQ_8) preempted
a lower-prio but still RT task (amlat), and sent an IPI (inter-processor
interrupt) to another CPU in the system so that amlat can run on the
other CPU.
Ingo