We are getting there. With the recent patches from Andrei and Dmitry
here is what it looks like on this AMD test server of mine:
The MySQL test I added is just a simple select query using ext/mysql.
It looks like this: http://www.php.net/~rasmus/mysql.phps
The calltrees with a minimum node weight of 1.5% of the execution time
for 4.4.3 and current 5.1.3 for that MySQL script look like this:
The corresponding raw calltree files that you can load into kcachegrind are:
I reset the counters after server startup this time to get cleaner numbers.
Note that Andrei's latest patch eliminates ap_add_common_vars and
ap_add_cgi_vars that you see in the 443 tree adding up to exactly 9% of
the execution time there. Now in 513 that is replaced by
php_populate_subprocess_env which takes 1.91% which is where Andrei's 7%
speedup claim comes from. We should apply this to 4.4.3 as well.
The only other place I see potentially low-hanging fruit now is in
zend_ini_deactivate. It might be possible to short circuit that
function and have it only restore ini values we know have changed by
keeping track of that in zend_alter_ini_entry. 1.74% of the time spent
there, so perhaps not worth the effort.
Next up, magic compiler tricks to speed up the executor. But that will
take a while longer.