Re: Re: MMcache question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, June 25, 2005 3:37 am, Catalin Trifu said:
>     No! You don't have to rewrite your application. What mmacache does is
> to keep a "bytecode" version of the script available so that PHP won't
> have
> to reparse the script every time, which is expensive and also has a nice
> code optimizer.

This is a common misconception about PHP cache systems...

The PHP parser is *NOT* the "big win"

Avoiding the hard disk read is the "big win"

The PHP parser, even in PHP 5, just is NOT that complex.

We're not talking C++ here.

We're not even talking C.

It's PHP!

The entire language fits on a couple web pages for cripes' sake.
[Not all the module/function stuff, just what the PARSER has to figure out]

mmcache, Turck, eaccalerator, Zend Cache, whatever.

They all have this oft-repeated misconception that they make your script
faster because the PHP parser is taken out of the loop.

The PHP parser being taken out of the loop is just gravy -- Something the
cache does just because it's mind-numbingly easy, once you develop a cache
at all.

The true performance win is not having to hit the hard drive to *read* the
PHP script before you parse it.  It's already in RAM.

The Zend Cache will make most applications at least 2 X as fast.
About 1.9 of this speed increase probably comes from the fact that the
script is in RAM.
And maybe only 0.1 from the PHP parser getting bypassed.

I made the 1.9 and 0.1 numbers up out of thin air for illustrative
purposes!!!  They are NOT real numbers. They *ARE* representative of the
imbalance at work here.

The 2 X number ain't made up.  That's what Zend customers routinely
reported in worst-case situations when I worked there (several years ago).
 4 X was often the real world speed-up.

You don't get a 2 X speed-up from the PHP parser not ripping through a
bunch of text.  No way.  No how.

You could (possibly) achieve similar speed-ups just having a RAM disk for
all your PHP code.  Though I think even a RAM disk has significant
overhead in mimicing the file control function calls that is beggared by
the Cache lookup.

There are pathalogical cases where the Cache will do you no good at all,
or even degrade performance.

The most obvious one is if you have *WAY* too many PHP scripts scattered
into *WAY* too many files, and your site has a *LOT* of pages with
widely-distributed viewing.

IE, imagine a site with 10,000 pages, but instead of the home page being
the one everybody hits all the time, that site has everybody deep-linking
to all the pages equally often.

Also imagine that each of the 10,000 pages opens up 10 *different* PHP
include files to generate its output.

[This is an extreme pathalogical example...  But less extreme real-world
cases exist.]

The Cache will end up thrashing and re-loading script after script because
they can't all fit in RAM at once.

I saw one client that literally had snippets of PHP code spread out in
thousands of files, which they were combining to create PHP scripts "on
the fly" from the database in a combinatorial-explosive algorithm.

The Cache they used (not naming names, because it's irrelevent) was
actually slowing down their site, a little bit, due to the overhead
involved.

They would have to have consolidated scripts, thrown *WAY* more RAM at it,
or just completely changed their algorithm to fix it.

I think they ended up doing a little of all that.

Plus throwing more hardware at it.  PHP is a shared-nothing architecture
for a reason. :-)

Most sites have a couple include files that get loaded on every page. 
Those pretty much get loaded into RAM and never move.  And that's where
the cache shines.  No disk read.  Just RAM.  Raw Hardware Speed, baby.

-- 
Like Music?
http://l-i-e.com/artists.htm

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux