Re: lstat call on each directory level
| From: | Amir Hardon | Date: | Wed, 16 Jul 2008 16:14:22 +0000 |
| Subject: | Re: lstat call on each directory level | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-39013@lists.php.net to get a copy of this message | ||
On Wed, 2008-07-16 at 06:45 -0700, Rasmus Lerdorf wrote:
> Arvids Godjuks wrote:
> > Hello.
> >
> > I think this should be optimized.
> > I'm not an expert ofcourse, but as I understood there is only one case
> > witch need a special treatment - require/include _one when a file with
> > equal contents is included from different directories.
> > You can make a switch witch controls if lstat is made or not in these
> > cases. People who know what they are doing will switch it to off and
> > make sure their includes don't result in Fatal error (anyway, to my
> > opinion it is bad desing if such thing happens).
> > Ofcourse open_basedir users will don't have any benefit from it, but
> > that's their choise.
> > So I think you should think it out and make this optimization to 5.3
> > release. It would be great optimization, IMHO.
>
> But all these lstats should be getting cached, so I don't see how it
> would affect performance very much. If you are blowing your realpath
> cache, you need to take a look at why that is happening.
>
> We probably should disconnect clearstatcache() from the realpath_cache,
> and we could perhaps look at doing partial path caches through our own
> realpath implementation. The other thing that can suck is when you have
> an include_path miss. We don't cache misses like this, so if you are
> relying on include_path to find your files and you don't hit it on the
> first try, you are going to see a bunch of stats. But that is again
> something that is easily fixed by not writing crappy code.
>
> I think that breaking code that looks like this:
>
> require_once './a.inc';
> require_once 'a.inc';
> require_once '../a.inc';
> require_once 'includes/a.inc';
>
> when these all refer to the same a.inc file depending on where the
> parent file is and what the coder had for breakfast that morning would
> be a very bad idea.
>
> -Rasmus
>
Since the realpath cache is only relevant for a single request(right?),
removing these lstats
calls will a major benefit.
Before moving our portal dir to the / dir, ~40% of our page requests
were slow on the server side (I'm not sure if my company policies allow
me to expose exactly what is considered slow),
after moving it ~20% of the page requests were slow! this is
significant.
And there are still many lstat calls made inside our portal's directory
tree.
So I think that a php.ini directive for switching off these lstats
which will be off by default,
will be a great thing.
-Amir.