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
