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

Zhang Yanfei zhangyanfei at cn.fujitsu.com
Thu Aug 30 02:16:43 UTC 2012


于 2012年08月30日 02:30, Dave Anderson 写道:
> 
> 
> ----- Original Message -----
> 
>>> Another question re: your patch -- is it possible to have a "depth" greater
>>> than 1?
>>
>> Yes, "depth" could be greater than 1, see the example below:
>>
>> CPU 0 RUNQUEUE: ffff880028216680
>>   CURRENT: PID: 17085  TASK: ffff880137c63540  COMMAND: "bash"
>>   RT PRIO_ARRAY: ffff880028216808                                        <-- depth = 0
>>      [  0] PID: 17129  TASK: ffff880037aeaaa0  COMMAND: "rtloop99"
>>            PID: 2832   TASK: ffff88013b09cae0  COMMAND: "rtkit-daemon"
>>            PID: 6      TASK: ffff88013d7c6080  COMMAND: "watchdog/0"
>>      [  1] GROUP RT PRIO_ARRAY: ffff88002ca65000                         <-- depth = 1
>>               [  1] GROUP RT PRIO_ARRAY: ffff880015821000                <-- depth = 2
>>                        [  1] PID: 17126  TASK: ffff880135d2a040  COMMAND: "rtloop98"
>>               [ 98] PID: 17119  TASK: ffff88010190d500  COMMAND: "rtloop1"
>>                     PID: 17121  TASK: ffff88013bd27500  COMMAND: "rtloop1"
>>                     PID: 17120  TASK: ffff88010190caa0  COMMAND: "rtloop1"
>>   CFS RB_ROOT: ffff880028216718
> ...
> 
>> Hmm, I think the depth could not be that big. So how do you think this
>> kind of output.
>>
>> The attached patch just changed "CHILD" to "GROUP".
> 
> Interesting -- how did you set up the depth-greater-than-one scenario?

Below is my script to run a number of rt tasks in different cgroups:

#!/bin/bash

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

mkdir /cgroup/cpu/test1/test11
echo 550000 > /cgroup/cpu/test1/test11/cpu.rt_runtime_us

./rtloop98 &
echo $! > /cgroup/cpu/test1/test11/tasks
./rtloop99 &
echo $! > /cgroup/cpu/test1/test11/tasks

./rtloop98 &
./rtloop99 &

> 
> Anyway, given that it is possible, let's at least tighten up the output display
> by changing each "9 * depth" usage to be "6 * depth".  That should alter
> your example output to look like this:
> 
> CPU 0 RUNQUEUE: ffff880028216680
>   CURRENT: PID: 17085  TASK: ffff880137c63540  COMMAND: "bash"
>   RT PRIO_ARRAY: ffff880028216808                                       
>      [  0] PID: 17129  TASK: ffff880037aeaaa0  COMMAND: "rtloop99"
>            PID: 2832   TASK: ffff88013b09cae0  COMMAND: "rtkit-daemon"
>            PID: 6      TASK: ffff88013d7c6080  COMMAND: "watchdog/0"
>      [  1] GROUP RT PRIO_ARRAY: ffff88002ca65000                       
>            [  1] GROUP RT PRIO_ARRAY: ffff880015821000                
>                  [  1] PID: 17126  TASK: ffff880135d2a040  COMMAND: "rtloop98"
>            [ 98] PID: 17119  TASK: ffff88010190d500  COMMAND: "rtloop1"
>                  PID: 17121  TASK: ffff88013bd27500  COMMAND: "rtloop1"
>                  PID: 17120  TASK: ffff88010190caa0  COMMAND: "rtloop1"
>   CFS RB_ROOT: ffff880028216718
>      ...

Hmm, This kind of output looks not that understandable easily...
for example:
  RT PRIO_ARRAY: ffff880028296808
     [  0] GROUP RT PRIO_ARRAY: ffff880103ded800
           [  0] GROUP RT PRIO_ARRAY: ffff88011ae70800
                 [  0] PID: 17127  TASK: ffff8800378f6040  COMMAND: "rtloop99"
                 PID: 17124  TASK: ffff8800a9592ae0  COMMAND: "rtloop99"
           [  1] PID: 17122  TASK: ffff88011aec3500  COMMAND: "rtloop98"
           [ 54] PID: 17123  TASK: ffff88013b414ae0  COMMAND: "rtloop45"
           PID: 10     TASK: ffff88013cc2cae0  COMMAND: "watchdog/1"
           PID: 7      TASK: ffff88013d7ef500  COMMAND: "migration/1"
     [  1] PID: 17128  TASK: ffff880139761540  COMMAND: "rtloop98"

This output looks confusing, it seems that task 10 and 7 are in group
ffff880103ded800

I think we can avoid this by two ways:
1. 6 * depth --> 8 * depth, proper indentation.
     RT PRIO_ARRAY: ffff880028296808
     [  0] GROUP RT PRIO_ARRAY: ffff880103ded800
             [  0] GROUP RT PRIO_ARRAY: ffff88011ae70800
                     [  0] PID: 17127  TASK: ffff8800378f6040  COMMAND: "rtloop99"
                   PID: 17124  TASK: ffff8800a9592ae0  COMMAND: "rtloop99"
             [  1] PID: 17122  TASK: ffff88011aec3500  COMMAND: "rtloop98"
             [ 54] PID: 17123  TASK: ffff88013b414ae0  COMMAND: "rtloop45"
           PID: 10     TASK: ffff88013cc2cae0  COMMAND: "watchdog/1"
           PID: 7      TASK: ffff88013d7ef500  COMMAND: "migration/1"
     [  1] PID: 17128  TASK: ffff880139761540  COMMAND: "rtloop98"

2. print priority for all tasks,
     RT PRIO_ARRAY: ffff880028296808
     [  0] GROUP RT PRIO_ARRAY: ffff880103ded800
           [  0] GROUP RT PRIO_ARRAY: ffff88011ae70800
                 [  0] PID: 17127  TASK: ffff8800378f6040  COMMAND: "rtloop99"
           [  0] PID: 17124  TASK: ffff8800a9592ae0  COMMAND: "rtloop99"
           [  1] PID: 17122  TASK: ffff88011aec3500  COMMAND: "rtloop98"
           [ 54] PID: 17123  TASK: ffff88013b414ae0  COMMAND: "rtloop45"
     [  0] PID: 10     TASK: ffff88013cc2cae0  COMMAND: "watchdog/1"
     [  0] PID: 7      TASK: ffff88013d7ef500  COMMAND: "migration/1"
     [  1] PID: 17128  TASK: ffff880139761540  COMMAND: "rtloop98"

I prefer the second one, how do you think?
And I attached 2 patches, one is for way 1, and the other is for way 2.

> 
> And also, I'd prefer to not create the dangling "static int depth", 
> but rather to add a depth argument to dump_RT_prio_array(), where 
> dump_CFS_runqueues() passes a 0, and dump_RT_prio_array() passes
> "depth+1" to itself: 
> 
> static void
> dump_RT_prio_array(int depth, ulong k_prio_array, char *u_prio_array)
> {

......

> }
> 
> Can you verify that those changes work for you?

OK.

Thanks
Zhang Yanfei

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0001-Fix-rt-not-support-group-sched-bug-print-prio.patch
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20120830/024541d3/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0001-Fix-rt-not-support-group-sched-bug-proper-indent.patch
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20120830/024541d3/attachment-0001.ksh>


More information about the Crash-utility mailing list