ID: 40970 User updated by: php at edwardk dot info Reported By: php at edwardk dot info Status: Bogus Bug Type: Performance problem Operating System: Windows 2003 PHP Version: 5.2.1 New Comment:
I have new information, the slowness is present only when safe mode is on. (for 1000 iterations) For PHP 4.4.6 ----- G:\>C:\php4\php.exe -n -d safe_mode=On filemtime.php X-Powered-By: PHP/4.4.6 Content-type: text/plain Took 7.451ms G:\>C:\php4\php.exe -n -d safe_mode=Off filemtime.php X-Powered-By: PHP/4.4.6 Content-type: text/plain Took 0.152ms G:\> For PHP 5.2.1 ----- G:\>C:\php5\php-cgi.exe -n -d safe_mode=On filemtime.php X-Powered-By: PHP/5.2.1 Content-type: text/plain Took 12.172ms G:\>C:\php5\php-cgi.exe -n -d safe_mode=Off filemtime.php X-Powered-By: PHP/5.2.1 Content-type: text/plain Took 0.108ms G:\> Additionally, I checked with FileMon, and the requests made are different for each version (Safe mode On). PHP 4.4.6 6:03:02.751 AM php.exe:2344 OPEN G:\ SUCCESS Options: Open Directory Access: 00100001 6:03:02.751 AM php.exe:2344 DIRECTORY G:\ SUCCESS FileBothDirectoryInformation: filemtime.php 6:03:02.751 AM php.exe:2344 CLOSE G:\ SUCCESS PHP 5.2.1 6:03:04.158 AM php-cgi.exe:2216 QUERY INFORMATION G:\filemtime.php SUCCESS Attributes: A 6:03:04.158 AM php-cgi.exe:2216 OPEN G:\ SUCCESS Options: Open Directory Access: 00100001 6:03:04.158 AM php-cgi.exe:2216 DIRECTORY G:\ SUCCESS FileBothDirectoryInformation: filemtime.php 6:03:04.158 AM php-cgi.exe:2216 CLOSE G:\ SUCCESS note the additional "QUERY INFORMATION" access. I've tried disabling safe mode and though performance has improved, it is still slower than the PHP4 version on my script when run under an apache module. The stats are now: ~40ms safe mode on (PHP5) ~15ms safe mode off (PHP5) ~5.5ms safe mode on (PHP4) ~0.7ms safe mode off (PHP4) Previous Comments: ------------------------------------------------------------------------ [2007-04-02 20:38:07] php at edwardk dot info One thing I have noticed is that when the PHP5 version runs, Apache2's kernel CPU time shoots up (measured in (Process Explorer) while processing the request where as in PHP4, CPU use remains low. ------------------------------------------------------------------------ [2007-04-02 20:32:03] php at edwardk dot info Here's the new code: <? header('Content-type: text/plain'); function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } $time_start = microtime_float(); $c = 0; foreach (glob("*.torrent") as $filename) { $blah = stat($filename); $c++; } $time_end = microtime_float(); $time = $time_end - $time_start; echo 'Took '.round(($time*100),3).'ms for '.$c.' files'; ?> and the results: PHP 4.4.6 Took 5.232ms for 481 files PHP 5.2.1 Took 107.762ms for 481 files ------------------------------------------------------------------------ [2007-04-02 20:13:21] [EMAIL PROTECTED] Might be related to stat cache usage... Try to see if you see the difference stat'ing a set of files in random order, not the same file repeatedly. ------------------------------------------------------------------------ [2007-04-01 20:42:47] php at edwardk dot info I have modified the code to use, $blah = stat('.htaccess'); This file does exist, it is 161 bytes on NTFS. PHP 4.4.6: 1.641ms PHP 5.1.2: 108.29ms Normally, I would be using the commands on many small files (400ish) in the current folder to determine if any of them had changed. This was fast enough on PHP4, but on PHP5, the same code takes much longer. ------------------------------------------------------------------------ [2007-04-01 14:44:02] [EMAIL PROTECTED] This is only the case when stat() fails. If you change stat('.'); to stat('<some file>'); you will se that PHP5 is faster than php4. Almost 2x. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/40970 -- Edit this bug report at http://bugs.php.net/?id=40970&edit=1