[Crash-utility] [PATCH] runq: make tasks in throttled cfs_rqs/rt_rqs displayed
zhangyanfei
zhangyanfei at cn.fujitsu.com
Wed Nov 7 10:26:53 UTC 2012
于 2012年11月07日 05:30, Dave Anderson 写道:
>
>
> ----- Original Message -----
>
>>>
>>>>
>>>> So I attach the new patch v2 version for runq -g. If you still find
>>>> any bug in your tests or have any suggestion about it, that's very
>>>> helpful.
>>>>
>>>> TODO:
>>>> 1. The help info about the -g option.
>>>> 2. Change rt_rq tasks displayed non-hierarchically.
>>>
>>> Like I mentioned above, the latest patch does not change the default
>>> behavior of runq alone, and "runq -g" is not as verbose as the last
>>> patch, which I presume is your intent.
>>
>>
>> Two patches added. One is the fixed version for v2 and the other is
>> adding the help info for run -g.
>>
>> Thanks
>> Zhang
>
> These latest patches tested OK.
>
> However, I must admit that I don't really understand the details w/respect
> to the difference between the "runq" and "runq -g" output other than the
> two different options essentially find all per-cpu queued tasks coming from
> different rb_root structures. Also, the "runq -g" implementation is remarkably
> complex in comparison to the "runq" alone, making its future maintenance a
> potentially difficult chore because of the huge number of structure.member
> dependencies.
Hmm, runq -g includes tasks in throttled cfs_rqs/rt_rqs. Its implementation is
so complex because when dumping a cfs rb_tree, if one of its node is a also child
cfs rb_tree, we follow the child tree and dump all tasks in it. If the child cfs
rb_tree is throttled, it is dequeued from its parent rb_tree and we lost tasks in
this rb_tree. So when dumping the cfs rb_tree, I checked if there is a child cfs
rb_tree throttled, if so, dumping it.
The same thing is for rt_rq.
Dumping group info, such as group name, is to make it clear that which task is
belong to which group.
>
> Now, for the most part, you have been able to segregate the code, *except*
> for the overloading of the currently-existing dump_tasks_in_cfs_rq() function to
> handle both the "runq" and the "runq -g" commands, i.e., where you've merged in
> the g_flag and depth business. And as a result, it makes the patched "dual-mode"
> dump_tasks_in_cfs_rq() function difficult to understand.
>
> Here is my suggestion/request:
>
> (1) please leave dump_CFS_runqueues() and dump_tasks_in_cfs_rq() as they are now.
> (2) create a new (somewhat redundant) "dump_tasks_in_task_group_rq()" function that is only
> used for "runq -g".
> (3) have your new dump_tasks_by_task_group() function call the new dump_tasks_in_task_group_rq()
> function.
>
> That would completely segregate the implementations of the two options. The worst
> case for doing that it that way is that there will be dump_tasks_in_cfs_rq() and
> and dump_tasks_in_task_group_rq() functions that are somewhat similar. But considering
> the huge amount of code that you are adding for "runq -g", having separate functions is
> hardly a cause for concern. And it should be fairly trivial for you to update your patch
> to do it that way.
>
> And then you could effectively do the same type of code separation for the RT queues.
>
> Does that make sense to you?
ok. I rewrite the patch and they are tested ok in my box.
Thanks
Zhang
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0001-add-g-option-for-runq-v4.patch
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20121107/d24b524c/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0002-add-help-info-for-runq-g.patch
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20121107/d24b524c/attachment-0001.ksh>
More information about the Crash-utility
mailing list