Hi Masaki,

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



Reply via email to