Re: [Patch][RFC] Disabling per-tgid stats on task exit in taskstats

Shailabh Nagar
2006-06-24T02:59:08Z

Andrew Morton wrote:

>On Fri, 23 Jun 2006 15:07:28 -0700
>Jay Lan <jlan@engr.sgi.com> wrote:
>
>
>
>>>> %ovhd of tgid on over off
>>>> (higher is worse)
>>>>
>>>>Exit User Sys Elapsed
>>>>Rate Time Time Time
>>>>
>>>>2283 25.76 649.41 -0.14
>>>>1193 -10.53 88.81 -0.12
>>>>963 -11.90 3.28 -0.10
>>>>806 -8.54 -0.84 0.16
>>>>694 -4.41 2.38 0.03
>>>>
>>>>
>>>>
>>>Oh wow. Something's gone quadratic there.
>>>
>>>
>>>
>>It was due to a loop in fill_tgid() when per-TG stats
>>data are assembled for netlink:
>> do {
>> rc = delayacct_add_tsk(stats, tsk);
>> if (rc)
>> break;
>>
>> } while_each_thread(first, tsk);
>>
>>and it is executed inside a lock.
>>Fortunately single threaded appls do not hit this code.
>>
>>
>
>Am I reading this right? We do that loop when each thread within the
>thread group exits?
>
Yes.

> How come?
>
>
To get the sum of all per-tid data for threads that are currently alive.
This is returned to userspace with each thread exit.

>Is there some better lock we can use in there? It only has to be
>threadgroup-wide rather than kernel-wide.
>
>
The lock we're holding is the tasklist_lock. To go through all the
threads of a thread group
thats the only lock that can protect integrity of while_each_thread afaics.

--Shailabh