Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:9786 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 21814 invoked by uid 1010); 10 May 2004 09:14:36 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 21749 invoked from network); 10 May 2004 09:14:35 -0000 Received: from unknown (HELO nx.eth.jp) (221.116.84.201) by pb1.pair.com with SMTP; 10 May 2004 09:14:35 -0000 Received: by nx.eth.jp (Postfix, from userid 1003) id B60FABE4059; Mon, 10 May 2004 18:14:34 +0900 (JST) Received: from P398 (nx [127.0.0.1]) by nx.eth.jp (Postfix) with SMTP id 7FA20BE404A; Mon, 10 May 2004 18:14:33 +0900 (JST) Date: Mon, 10 May 2004 18:14:33 +0900 To: Andi Gutmans Cc: internals@lists.php.net In-Reply-To: <5.1.0.14.2.20040509190642.035c6940@127.0.0.1> References: <20040506133609.1131FBE40E6@nx.eth.jp> <5.1.0.14.2.20040509190642.035c6940@127.0.0.1> X-Mailer: Datula version 1.51.09 for Windows Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Message-ID: <20040510091433.7FA20BE404A@nx.eth.jp> X-Bogosity: No, tests=bogofilter, spamicity=0.000000, version=0.15.6 Subject: Re: [PHP-DEV] [PATCH] suppressing realpath() with APC + tiny patches From: fujimoto@php.net (Masaki fujimoto) Hi, I'm glad to hear that:) Actually, my first try was writing an experimental patch to cache realpath() for this problem because perhaps this is the finest and most "transparent" solution as you say. And my experimental patch worked fine , too (though it's too ugly to post here:). Anyway, the reason I chose the "patch with APC" is just because it's the most simple one (so that it could be acceptable for more people...). So, I'm curious about your design and implementation of realpath() cache, like this: - will it be "inter process" or "inter request" caching system? - if so, php will depend on shared memory or something like that? - or, you will take more simple way (like using /tmp/realpath_cache directory to store the cache) ? - and how to determine when to expire each cache? - if not, it won't be enough for me... (although it's true that it will be ok for most of php users) I'd like to hear your idea:) Masaki Fujimoto The Message From Andi Gutmans: > 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 > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php