Sander Striker wrote:

Thanks.  If I'm reading the graphs right, they show
that destruction of a leaf SMS with siblings is much
more common than destruction or reset of a non-leaf
SMS with children.  That seems to reinforce the
conclusion I drew from gprof data: we could get better
performance by allocating blocks for a child from
something that isn't the direct parent (like a per-CPU
free list, based on Dean's recommendation).


I want to discuss this some more to be honest. There are several options we can try and I feel it is best to examine more than one, even though one looks like the way to go. A per-CPU free list will be difficult to implement for reasons Justin pointed out. A per thread free list is a lot easier. Actually, if we use an sms like "tracking" instead of "trivial" we get one free list. If we then use the "threads" sms (which I should commit (I'll wait until Davids patch is in)) as the parent sms of all the top level smss in each thread, we get a free list per thread. But, this requires tweaking httpd, which right now is not really an option.

I agree--a per-thread free list with the tracking SMS
is a good, practical alternative.

But stop me if I've misinterpreted the data...


Well, you could read it differently. Look at images 233 to 259, then look at 260. Now why are all those destroyed individually, when one destroy, the one in 260 could take care of them all?

Did these all result from calls to ap_destroy_sub_req?
That would explain the pattern of the graphs.

--Brian




Reply via email to