Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:9765 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 25484 invoked by uid 1010); 9 May 2004 16:08:46 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 25400 invoked from network); 9 May 2004 16:08:44 -0000 Received: from unknown (HELO mail.zend.com) (192.117.235.230) by pb1.pair.com with SMTP; 9 May 2004 16:08:44 -0000 Received: (qmail 10164 invoked from network); 9 May 2004 16:08:38 -0000 Received: from localhost (HELO AndiNotebook.zend.com) (127.0.0.1) by localhost with SMTP; 9 May 2004 16:08:38 -0000 Message-ID: <5.1.0.14.2.20040509190642.035c6940@127.0.0.1> X-Sender: andi@127.0.0.1 X-Mailer: QUALCOMM Windows Eudora Version 5.1 Date: Sun, 09 May 2004 19:08:36 +0300 To: Masaki Fujimoto ,internals@lists.php.net In-Reply-To: <20040506133609.1131FBE40E6@nx.eth.jp> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; format=flowed Subject: Re: [PHP-DEV] [PATCH] suppressing realpath() with APC + tiny patches From: andi@zend.com (Andi Gutmans) References: <20040506133609.1131FBE40E6@nx.eth.jp> 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 >fujimoto@php.net > > >-- >PHP Internals - PHP Runtime Development Mailing List >To unsubscribe, visit: http://www.php.net/unsub.php