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

Zhang Yanfei zhangyanfei at cn.fujitsu.com
Tue Aug 28 01:49:39 UTC 2012


于 2012年08月27日 23:53, Dave Anderson 写道:
> 
> 
> ----- 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:
> 

Hmm, may be confusing here...

>> 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?


Now, the scheduler is not limited to schedule processes, but can also
work with larger entities. This allows for implementing group scheduling.

So for every RT PRIO_ARRAY, each linked list for each priority has
its element embedded in a structure "sched_entity". This "sched_entity"
could represent two things: a process or a child rt runqueue.

for example, in cpu0, array[0] has four linked elements:
    1. task 5136
    2. a child rt rq
    3. task 6
    4. task 3
and the child rt rq has its own runqueue array with 5 tasks in it:
task 5133 with a priority of 0, task 5131 with a priority of 1, and the
last three tasks -- 5128, 5230, 5129 with a priority of 98.

Thanks
Zhang Yanfei




More information about the Crash-utility mailing list