[Crash-utility] patch for slight modification to runq -g command

Dave Anderson anderson at redhat.com
Thu Nov 7 21:13:42 UTC 2013



----- Original Message -----
> Hi Dave,
> 
> I have cleaned up the code and added another change. 

OK thanks -- the patch runs through my sample set of vmcores with no problem.

> The current running task is not in the rb tree (rb_root), so run -q displays it like:
> 
>   CURRENT: PID: 9048   TASK: ffff8808b07e4200  COMMAND: "actmain"
>   TASK_GROUP RT_RQ: ffff880002493820
>   RT PRIO_ARRAY: ffff880002493820
>      [no tasks queued]
>   TASK_GROUP CFS_RQ: ffff8800024936e0
>   CFS RB_ROOT: ffff880002493710
>      GROUP CFS RB_ROOT: ffff882d609ce830 <TDAT>
>         GROUP CFS RB_ROOT: ffff883f0bcbfa30 <User>
>                [no tasks queued]
> 
> I can understand why the current running task is not displayed.
> However, the "-g" option displays all the task_groups the task
> belongs to but at the end it shows "[no tasks queued]". That is
> just strange.  The new change is to display the task that is running like:
> 
>   CURRENT: PID: 9048  CFS: ffff88039351a800 TASK: ffff8808b07e4200  COMMAND: "actmain"
>   TASK_GROUP RT_RQ: ffff880002493820
>   RT PRIO_ARRAY: ffff880002493820
>      [no tasks queued]
>   TASK_GROUP CFS_RQ: ffff8800024936e0
>   CFS RB_ROOT: ffff880002493710
>      GROUP: ffff884052bc9800 CFS_RQ: ffff882d609ce800 RB_ROOT: ffff882d609ce830 <TDAT> nr_running: 1 h_nr_running: 1
>         GROUP: ffff884058f1d000 CFS_RQ: ffff883f0bcbfa00 RB_ROOT: ffff883f0bcbfa30 <User> nr_running: 1 h_nr_running: 1
>               [120] PID: 9048   TASK: ffff8808b07e4200  COMMAND: "actmain"

OK -- I guess I understand why it probably makes sense to duplicate the 
CURRENT task underneath its own GROUP list -- but if that is done, then 
why clutter the CURRENT line with the CFS_RQ address?  And it's not clear
to me why in your example above, the CFS address of ffff88039351a800
doesn't show up as the CFS_RQ address above the "actmain" line?

Taking a simple example, I see this:

 crash> runq -g
 CPU 0
   CURRENT: PID: 0     CFS: ffff88000c7d6aa8 TASK: ffffffff8178ba60  COMMAND: "swapper"
   TASK_GROUP RT_RQ: ffff88000c7d6b58
   RT PRIO_ARRAY: ffff88000c7d6b58
      [no tasks queued]
   TASK_GROUP CFS_RQ: ffff88000c7d6aa8
   CFS RB_ROOT: ffff88000c7d6ad0
      [no tasks queued]
 
 CPU 1
   CURRENT: PID: 1268  CFS: ffff88000c9b5aa8 TASK: ffff88002f11c620  COMMAND: "bash"
   TASK_GROUP RT_RQ: ffff88000c9b5b58
   RT PRIO_ARRAY: ffff88000c9b5b58
      [no tasks queued]
   TASK_GROUP CFS_RQ: ffff88000c9b5aa8
   CFS RB_ROOT: ffff88000c9b5ad0
      [120] PID: 1268   TASK: ffff88002f11c620  COMMAND: "bash"

 crash>
  
Where the newly-interspersed CFS address redundantly shows the TASK_GROUP CFS_RQ
below.  But adding the CFS address to the "swapper" line doesn't seem to make
much sense, or help in any way, since the idle task is a special case that never
gets queued.  And since the CFS address in the "bash" line is redundant with the
TASK_GROUP CFS_RQ below, why bother showing it?

And in a more complicated example, with your patch, the "qemu-kvm" task also 
shows up underneath its group:

 CPU 0
   CURRENT: PID: 3144  CFS: ffff88022aab2600 TASK: ffff88022a446040  COMMAND: "qemu-kvm"
   TASK_GROUP RT_RQ: ffff880133c16148
   RT PRIO_ARRAY: ffff880133c16148
      [no tasks queued]
   TASK_GROUP CFS_RQ: ffff880133c16028
   CFS RB_ROOT: ffff880133c16058
      GROUP: ffff88012b880800 CFS_RQ: ffff88022ac8f000 RB_ROOT: ffff88022ac8f030 <libvirt> nr_running: 1 h_nr_running: 1
         GROUP: ffff88012c078000 CFS_RQ: ffff88022c075000 RB_ROOT: ffff88022c075030 <qemu> nr_running: 1 h_nr_running: 1
            GROUP: ffff88012b0fb400 CFS_RQ: ffff88022af94c00 RB_ROOT: ffff88022af94c30 <guest1> nr_running: 1 h_nr_running: 1
               GROUP: ffff88022c6bbc00 CFS_RQ: ffff88022aab2600 RB_ROOT: ffff88022aab2630 <vcpu1> nr_running: 1 h_nr_running: 1
                  [120] PID: 3144   TASK: ffff88022a446040  COMMAND: "qemu-kvm"

And note that its interspersed CFS address of ffff88022aab2600 is redundantly shown
as the CFS_RQ of its GROUP down below.

So I don't understand why your example shows different CFS addresses in the
CURRENT line vs. the GROUP CFS_RQ address above the queued "acctmain" task:

>   CURRENT: PID: 9048  CFS: ffff88039351a800 TASK: ffff8808b07e4200  COMMAND: "actmain"
>   TASK_GROUP RT_RQ: ffff880002493820
>   RT PRIO_ARRAY: ffff880002493820
>      [no tasks queued]
>   TASK_GROUP CFS_RQ: ffff8800024936e0
>   CFS RB_ROOT: ffff880002493710
>      GROUP: ffff884052bc9800 CFS_RQ: ffff882d609ce800 RB_ROOT: ffff882d609ce830 <TDAT> nr_running: 1 h_nr_running: 1
>         GROUP: ffff884058f1d000 CFS_RQ: ffff883f0bcbfa00 RB_ROOT: ffff883f0bcbfa30 <User> nr_running: 1 h_nr_running: 1
>               [120] PID: 9048   TASK: ffff8808b07e4200  COMMAND: "actmain"

Am I missing something?  Or is there cut-and-paste error?

Dave




More information about the Crash-utility mailing list