Hi Rasmus, I made two improvements in 5.1 and run the same bechmarks on Intel Pentium M 1.5GHz 2M cache.
top/top5/top10 php-5.1 740 550 430 req/sec php-4.4 680 440 290 req/sec May be the problem is AMD chip? :) Thanks. Dmitry. > -----Original Message----- > From: Rasmus Lerdorf [mailto:[EMAIL PROTECTED] > Sent: Monday, March 13, 2006 7:34 AM > To: internals > Subject: [PHP-DEV] Calling performance geeks > > > We have a bit of a performance disconnect between 4.4 and 5.1 > still. I > was doing some benchmarking today just as a sanity check on some APC > work I have been doing lately and came up with this: > > http://lerdorf.com/php/bm.html > > You can ignore the apc/eaccelerator stuff. Those numbers are not > surprising. The surprising number to me is how much faster > 4.4 still is. > > The graph labels are slightly off. The 0, 5 and 10 includes should > really be 1, 6 and 11. The actual benchmark code is here: > > http://www.php.net/~rasmus/bm.tar.gz > > Tested on a Linux 2.6 Ubuntu box on an AMD chip (syscalls are cheap > there) with current PHP_4_4 and PHP_5_1 checkouts. Was also testing > 5.1.2 to see the effect of getting rid of that uncached realpath call. > > As far as I can tell auto_globals_jit isn't working at all, but I > eliminated that by doing variables_order = GP for these benchmarks. > Even so, the request_startup is significantly more expensive in 5.1. > > Here are callgrind dumps for each. Load them up with kcachegrind and > browse around: > > PHP 4.4 http://www.php.net/~rasmus/callgrind.out.1528.gz > PHP 5.1 http://www.php.net/~rasmus/callgrind.out.1488.gz > > Each of these is 1000 requests against the top.php and > 4top.php scripts. > from bm.tar.gz. If you start at the > > The script is trivial and looks like this: > > <html> > <?php > $base_dir = '/var/www/bm/'; > include $base_dir . 'config.inc'; > > function top_func($arg) { > $b = $arg.$arg; > echo $b; > } > class top_class { > private $prop; > function __construct($arg) { > $this->prop = $arg; > } > function getProp() { > return $this->prop; > } > function setProp($arg) { > $this->prop = strtolower($arg); > } > } > > top_func('foo'); > $a = new top_class('bar'); > echo $a->getProp(); > $a->setProp("AbCdEfG"); > echo $a->getProp(); > echo <<<EOB > The database is {$config['db']} > and the user is {$config['db_user']} > > EOB; > ?> > </html> > > and config.inc is: > > <?php > $config = array( > 'db' => 'mysql', > 'db_user' => 'www', > 'db_pwd' => 'foobar', > 'config1' => 123, > 'config2' => 456, > 'config3' => 789, > 'sub1' => array(1,2,3,4,5,6,7,8,9,10), > 'sub2' => > array("abc","def","ghi","jkl","mno","pqr","stu","vwx","yz") > ); > ?> > > 4top.php is identical except for the class definition being > PHP 4-style > instead. As in no private and a PHP 4 constructor. Otherwise it is > identical. > > I have some ideas for things we can speed up in 5.1. Like, > for example, > we should add the ap_add_common_vars() and ap_add_cgi_vars() > to the jit > mechanism. There isn't much point filling these in unless the script > tries to get them. the ap_add_common_vars() call is > extremely expensive > since it does a qsort with a comparison function that uses > strcasecmp. > Of course, this same optimization can be done in 4.4. > > If you know your way around kcachegrind, load up the two > callgrind files > and see what stands out for you. As far as I can tell, while > we can do > some tricks to speed up various helper bits, the slowdown is > coming from > the executor trashing its cache lines. > > -Rasmus > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php