[Crash-utility] [PATCH] Fix bugs in runq

Dave Anderson anderson at redhat.com
Mon Aug 27 15:53:59 UTC 2012



----- Original Message -----

> And based on this patch, I made a new patch to solve the problem when
> dumping rt runqueues. Currently dump_RT_prio_array() doesn't support
> rt group scheduler.
> 
> In my test, I put some rt tasks into one group, just like below:
> 
> mkdir /cgroup/cpu/test1
> echo 850000 > /cgroup/cpu/test1/cpu.rt_runtime_us
> 
> ./rtloop1 &
> echo $! > /cgroup/cpu/test1/tasks
> ./rtloop1 &
> echo $! > /cgroup/cpu/test1/tasks
> ./rtloop1 &
> echo $! > /cgroup/cpu/test1/tasks
> ./rtloop98 &
> echo $! > /cgroup/cpu/test1/tasks
> ./rtloop45 &
> echo $! > /cgroup/cpu/test1/tasks
> ./rtloop99 &
> echo $! > /cgroup/cpu/test1/tasks
> 
... [ cut ] ...
> 
> After applying the attached patch, crash seems to work well:
> 
> crash> runq
> CPU 0 RUNQUEUE: ffff880028216680
>   CURRENT: PID: 5125   TASK: ffff88010799d540  COMMAND: "sh"
>   RT PRIO_ARRAY: ffff880028216808
>      [  0] PID: 5136   TASK: ffff8801153cc040  COMMAND: "rtloop99"
>            CHILD RT PRIO_ARRAY: ffff88013b050000
>               [  0] PID: 5133   TASK: ffff88010799c080  COMMAND: "rtloop99"
>               [  1] PID: 5131   TASK: ffff880037922aa0  COMMAND: "rtloop98"
>               [ 98] PID: 5128   TASK: ffff88011bd87540  COMMAND: "rtloop1"
>                     PID: 5130   TASK: ffff8801396e7500  COMMAND: "rtloop1"
>                     PID: 5129   TASK: ffff88011bf5a080  COMMAND: "rtloop1"
>            PID: 6      TASK: ffff88013d7c6080  COMMAND: "watchdog/0"
>            PID: 3      TASK: ffff88013d7ba040  COMMAND: "migration/0"
>      [  1] PID: 5134   TASK: ffff8801153cd500  COMMAND: "rtloop98"
>            PID: 5135   TASK: ffff8801153ccaa0  COMMAND: "rtloop98"
>   CFS RB_ROOT: ffff880028216718
>      [120] PID: 5109   TASK: ffff880037923500  COMMAND: "sh"
>      [120] PID: 5107   TASK: ffff88006eeccaa0  COMMAND: "sh"
>      [120] PID: 5123   TASK: ffff880107a4caa0  COMMAND: "sh"
> 
> CPU 1 RUNQUEUE: ffff880028296680
>   CURRENT: PID: 5086   TASK: ffff88006eecc040  COMMAND: "bash"
>   RT PRIO_ARRAY: ffff880028296808
>      [  0] PID: 5137   TASK: ffff880107b35540  COMMAND: "rtloop99"
>            PID: 10     TASK: ffff88013cc2cae0  COMMAND: "watchdog/1"
>            PID: 2852   TASK: ffff88013bd5aae0  COMMAND: "rtkit-daemon"
>      [ 54] CHILD RT PRIO_ARRAY: ffff880138978000
>               [ 54] PID: 5132   TASK: ffff88006eecd500  COMMAND: "rtloop45"
>   CFS RB_ROOT: ffff880028296718
>      [120] PID: 5115   TASK: ffff8801152b1500  COMMAND: "sh"
>      [120] PID: 5113   TASK: ffff880139530080  COMMAND: "sh"
>      [120] PID: 5111   TASK: ffff88011bd86080  COMMAND: "sh"
>      [120] PID: 5121   TASK: ffff880115a9e080  COMMAND: "sh"
>      [120] PID: 5117   TASK: ffff8801152b0040  COMMAND: "sh"
>      [120] PID: 5119   TASK: ffff880115a9eae0  COMMAND: "sh"
> 
> Is this kind of output for rt runqueues ok? Or do you have any
> suggestion?

Hello Zhang,

I find the output a bit confusing.  When Daisuke added support for
displaying the runnable tasks that are contained within a cgroup's 
task-group scheduling entity, they are simply added to the list
of runnable tasks for a particular priority value.  There is no 
special "CHILD"/indent to differentiate them.  So I'm not sure why
it would be necessary to to do the same thing for RT tasks?  

Also, I'm not clear on what is going on here -- on cpu 0, the
"CHILD RT PRIO DISPLAY" looks like it's a "child" of task 5136:

> crash> runq
> CPU 0 RUNQUEUE: ffff880028216680
>   CURRENT: PID: 5125   TASK: ffff88010799d540  COMMAND: "sh"
>   RT PRIO_ARRAY: ffff880028216808
>      [  0] PID: 5136   TASK: ffff8801153cc040  COMMAND: "rtloop99"
>            CHILD RT PRIO_ARRAY: ffff88013b050000
>               [  0] PID: 5133   TASK: ffff88010799c080  COMMAND: "rtloop99"
>               [  1] PID: 5131   TASK: ffff880037922aa0  COMMAND: "rtloop98"
>               [ 98] PID: 5128   TASK: ffff88011bd87540  COMMAND: "rtloop1"
>                     PID: 5130   TASK: ffff8801396e7500  COMMAND: "rtloop1"
>                     PID: 5129   TASK: ffff88011bf5a080  COMMAND: "rtloop1"
>            PID: 6      TASK: ffff88013d7c6080  COMMAND: "watchdog/0"
>            PID: 3      TASK: ffff88013d7ba040  COMMAND: "migration/0"
>      [  1] PID: 5134   TASK: ffff8801153cd500  COMMAND: "rtloop98"
>            PID: 5135   TASK: ffff8801153ccaa0  COMMAND: "rtloop98"
> ...

whereas on cpu 1, the "CHILD RT PRIO ARRAY" line is on the same line as 
priority 54: 

> CPU 1 RUNQUEUE: ffff880028296680
>   CURRENT: PID: 5086   TASK: ffff88006eecc040  COMMAND: "bash"
>   RT PRIO_ARRAY: ffff880028296808
>      [  0] PID: 5137   TASK: ffff880107b35540  COMMAND: "rtloop99"
>            PID: 10     TASK: ffff88013cc2cae0  COMMAND: "watchdog/1"
>            PID: 2852   TASK: ffff88013bd5aae0  COMMAND: "rtkit-daemon"
>      [ 54] CHILD RT PRIO_ARRAY: ffff880138978000
>               [ 54] PID: 5132   TASK: ffff88006eecd500  COMMAND: "rtloop45"
>   CFS RB_ROOT: ffff880028296718

What is it a "child" of?  Or maybe "CHILD" the wrong terminology here?

Dave





More information about the Crash-utility mailing list