I'm glad somebody is working on a patch for this performance problem.
I will test it !
Thanks.
Jean-François Bustarret
eTF1 - Architect
-----Message d'origine-----
De : Masaki Fujimoto [mailto:fujimoto@php.net]
Envoyé : jeudi 6 mai 2004 15:36
À : internals@lists.php.net
Objet : [PHP-DEV] [PATCH] suppressingrealpath()
with APC +
tiny patches
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:
- apply patches to current 4.3 tree, and APC-2.0.3
- buidconf and configure PHP as always with --enable-delayed-fopen
option
- build and install PHP and APC as always
- 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
fujimoto@php.net
Le present message (y compris tous les elements attaches) est confidentiel et est destine a ses seuls destinataires. Si vous
l'avez recu par erreur, merci de l'indiquer a son expediteur par retour et de proceder a sa destruction dans vos systemes.
Toute utilisation ou diffusion non autorisee de son contenu, en totalite ou en partie, est strictement interdite. Les idees et
opinions presentees dans ce message sont celles de son auteur, et ne representent pas necessairement celles de TF1 (et/ou des
entites membres du Groupe TF1).
This message (including any attachments) is confidential and may be privileged. If you have received it by mistake please notify
the sender by return email and delete this message from your system. Any unauthorised use or dissemination of this message in
whole or in part is strictly prohibited. Any views or opinions presented are solely those of its author and do not necessarily
represent those of TF1 (and/or its group companies).