On Fri, 23 Jun 2006 15:07:28 -0700Yes.
Jay Lan <jlan@xxxxxxxxxxxx> wrote:
It was due to a loop in fill_tgid() when per-TG stats%ovhd of tgid on over offOh wow. Something's gone quadratic there.
(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
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?
How come?To get the sum of all per-tid data for threads that are currently alive.
Is there some better lock we can use in there? It only has to beThe lock we're holding is the tasklist_lock. To go through all the threads of a thread group
threadgroup-wide rather than kernel-wide.