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

Reply via email to