Messages in this thread | | | Date | Wed, 21 Dec 2005 13:11:35 -0800 | From | Ravikiran G Thirumalai <> | Subject | Re: [rfc][patch] Avoid taking global tasklist_lock for single threaded process at getrusage() |
| |
On Wed, Dec 21, 2005 at 12:20:20PM -0800, Christoph Lameter wrote: > On Wed, 21 Dec 2005, Ravikiran G Thirumalai wrote: > > > Following patch avoids taking the global tasklist_lock when possible, > > if a process is single threaded during getrusage(). Any avoidance of > > tasklist_lock is good for NUMA boxes (and possibly for large SMPs). We found > > that this optimization reduces the runtime of a certain scientific application > > by half on a 16 cpu NUMA box. > > > > This optimization is similar to the sys_times tasklist_lock optimization. > > The optimization of sys_times is only possible because the "current" > task is running and therefore guarantees that the thread will not be > exiting.
Yes.
> > getrusage and k_getrusage can be called onother tasks than the currently > executing task and in those cases better take the tasklist lock because > the task may exit while getrusage runs.
We did look at that. Cases RUSAGE_CHILDREN and RUSAGE_SELF are always called by the current task, so we can avoid tasklist locking there. getrusage for non-current tasks are always called with RUSAGE_BOTH. We ensure we always take the siglock for RUSAGE_BOTH case, so that the p->signal* fields are protected and take the tasklist_lock only if we have to traverse the tasklist hashlist. Isn't this safe?
Thanks, Kiran - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |