I would like to fix this using a realpath() cache. I plan on working on this in the next few weeks and this will hopefully solve the problem everywhere in PHP and be pretty much transparent.
Andi
At 10:36 PM 5/6/2004 +0900, Masaki Fujimoto wrote:
Hello,
These days I've been working on some tasks to reduce I/O system calls (lstat64, stat64, open and so on) of PHP for some reasons and as the result of it, I noticed that with the APC + very small two pathes we can suppress most of realpath() calls (although currently I'm not sure this is the correct method or not...):
http://eth.jp/php-cvs-20040506-delayed-fopen.patch.txt (patch against current 4.3 tree, because APC is not yet fully compatible with PHP 5) http://eth.jp/apc-2.0.3-delayed-fopen.patch.txt (patch against APC-2.0.3, current CVS-HEAD is somehow unstable...)
So please try and review if you're curious about suppressing realpath() calls:)
Usage: 1) apply patches to current 4.3 tree, and APC-2.0.3 2) buidconf and configure PHP as always with --enable-delayed-fopen option 3) build and install PHP and APC as always 4) add "delayed_fopen=1" entry to your php.ini
And details are as follows:
As the recent thread and some other threads show (which listed below), PHP requires quite a few I/O system calls especially when large number of scripts are include_once()ed. And these are not ignorable for the websites with more than 1 million hits per hour although it has nothing to do with small sites.
[Performance Consideration of 1 class per file] http://marc.theaimsgroup.com/?l=php-dev&m=108279256414391&w=2
[Performance degradation] http://www.phpbuilder.com/lists/php-developer-list/2003022/0226.php
The main concern here is the lstat64() by realpath(), and open() by searching for include_paths (when many include_paths are set).
I think suppressing open() (which will result in ENOENT) is not so easy (because we need some other new caching system for include_paths), but perhaps we can easily reduce realpath() for included scritpts with APC, because APC does not use an opned file handle when cache hits.
So, my patch skips zend_open() until open_file_scanning() is called inside zend_compile_file() when include_once() or require_once() is called, so that zend_open() is not called when the target script is cached in APC. As a result of this, we can reduce most of realpath() calls by include_once() and required_once().
These patches are not yet verified well so comments are welcome!
Best regards, Masaki Fujimoto [EMAIL PROTECTED]
-- 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