Re: more on exit performance

David Laight <[email protected]>
Newsgroups gmane.os.netbsd.devel.performance
Message-ID <[email protected]>
On Sun, Nov 02, 2003 at 11:59:10AM +0100, Jaromir Dolecek wrote:
> David Laight wrote:
> > >  (2) for (pid == -1), we can keep the stopped and dead children on
> > >      separate lists, and only look at the list(s) that we care about.
> > 
> > Why not just requeue a stopped child at the top of the sibling list?
> > It will save all the extra pointers (and data structures to get wrong!).
> > I don't know how how many children the benchmark process has, but I
> > suspet it is a lot!  Even then this gains <10%, for a normal process
> > (and system workload) it must be noise.
> 
> It would be very easy to optimize the WAIT_ANY zombie lookup by looking
> at zombproc - that list should be mostly empty and the lookup
> should be faster than loop over children.

Except that most shells look for stopped processes as well.
I also have a long-term plan to kill the 'allproc' and 'zombproc' lists.
(scan pid_table if truly necessary).

> > 	David
> > 
> > Index: kern_exit.c
> > ===================================================================
> > RCS file: /cvsroot/src/sys/kern/kern_exit.c,v
> > retrieving revision 1.124
> > diff -u -p -r1.124 kern_exit.c
> > --- kern_exit.c	2003/09/16 13:46:24	1.124
> > +++ kern_exit.c	2003/11/02 10:39:49
> > @@ -718,10 +727,16 @@ find_stopped_child(struct proc *parent, 
> >  	for (;;) {
> >  		c_found = 0;
> >  		LIST_FOREACH(child, &parent->p_children, p_sibling) {
> > -			if (pid != WAIT_ANY &&
> > -			    child->p_pid != pid &&
> > -			    child->p_pgid != -pid)
> > -				continue;
> > +			if (pid >= 0) {
> > +				if (child->p_pid != pid) {
> > +					child = pfind(pid);
> > +					if (child == NULL
> > +					    || child->p_parent != parent)
> > +						break;
> 
> This should be outside the LIST_FOREACH() loop. Also, this only
> optimizes asleep child lookup, not zombie lookup. Given that
> more frequent operation is wait for deceased child, we should
> optimize that operation too.

The logic of the function needs it to be inside the loop!

Mmm pfind() needs some flags - for locking as well as finding zombies.

	David

-- 
David Laight: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.