httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Darryl Miles <>
Subject Re: one word syncronize once more
Date Fri, 20 Jul 2007 17:46:53 GMT
Greg Ames wrote:
> please see rev. 558039.  requests_this_child does not need to be 100% accurate.  the
cure below is worse than the disease.
> Greg
> -        requests_this_child--; /* FIXME: should be synchronized - aaron */
> +        apr_atomic_dec32(&requests_this_child); /* much slower than important */

Maybe someone could reconfirm to the list what exactly the disease is ?

If this counter is not accurate (meaning it may loose 
increments/decrements) does the end the world cave in ?  Maybe someone 
could explain how and where this particular variable 
"requests_this_child" is used.

For example if its just to provide guideline information to allow 
termination after 10000 requests then thats less of a problem than if 
someone configured it to terminate after 2 requests.  Being 0.0001% out 
is less of a problem than 100% out.

For example if the counter is used in some way to allow apache to 
restart/logrotate and if it does not come back to zero reliabily then 
apache will remain hung trying to shutdown (as it often the case in my 
real world experience) then the disease would be a hung webserver during 
shutdown and taking.  This is much more fatal.

I'm not suggesting this particular counter "requests_this_child" has a 
direct cause with hung apache instances but I'm asking those that 
understand the disease(s) if they could explain exactly what they are.

I'm not familiar with the apr_atomic_dec32() API, is this correctly 
optimized to a single asm instruction "lock decl 0xaddr32" on Intel IA32 
?  How many clock cycles do you think that operations takes, what 
technical understanding makes you think such a "cure" should be utilized 
with caution ?

My understanding of the cure is that its very very light weight so light 
weight I'd challenge you to prove the mythical performance issue in the 
situation its being used in apache.

To give this some weight, I'm was recently involved in an multi-threaded 
ethernet packet processing application dealing with 100's of mbit and 
each packet that came updated multiple counters using the IA32 "LOCK" 
prefix but there was zero noticeable contention.  Indeed this is the 
purpose of the assembly primitive to implement something in hardware 
that is most efficiently done there.


View raw message