Or simply use eAccelerator which does not cause those open
    calls.

    Rasmus, is that behaviour by design?  I deinstalled APC
    because of this 'characteristic' last week.  It was killing a
    high-traffic site.  

    - Sascha

On Thu, 2 Feb 2006, Rasmus Lerdorf wrote:

> I think the main hint you need is to never use require_once/include_once with
> an opcode cache.  Those are the only ones that will cause an open() call.  You
> should only be seeing a single stat() call per file under APC (needed to get
> the inode+device hash key for the shared memory lookup).
> 
> -Rasmus
> 
> James M Luedke wrote:
> > Hello:
> >     We have a very high-volume site that runs across a cluster of several
> > machines which needs to have access to our back end storage platform, which
> > needless to say is very busy. I have been given the task of reducing load to
> > the filer. Due to the fact that our application is rather large and includes
> > lots of files which reside on our filer, php would be a good place to cut
> > down load.
> > 
> >     We currently have a rather unique setup. We are running php with
> > fast-cgi support via sapi/cgi/cgi_main.c as well as APC for opcode/user
> > caching**. This allows us to run php as a daemon which reduces system calls
> > and retains persistence with APC. Our setup has been working quite well.
> > However, there is one behavior that is less than optimal.
> >      Whenever one of our pages is accessed, it appears*** that the requested
> > file and all included files are opened, which results in several open calls
> > to our filer. As I mentioned, we are running APC which seems to be doing a
> > nice job of op-code caching. It would be ideal if somehow I could modify php
> > to first check APC cache for the pre-compiled opcode before attempting to
> > open the file. This would be a huge win on our cluster, since each hit
> > currently generates 5-10 open calls.
> > 
> >     Now please bear with me because I am new to the Zend / main tree of the
> > php source. If my understanding is correct, the basic flow of cgi/php goes
> > something like this:                    
> >    request
> >    some variable init.
> >    module_init <-apc overide compile_file w/my_compile_file
> >    php_fopen_primary_script(&file_handle TSRMLS_CC);
> >    php_execute_script(&file_handle TSRMLS_CC);
> >        VCWD_CHDIR_FILE(primary_file->filename);
> >        # i think included_files gets opened here someplace
> >        # i do not understand that magic yet.
> >        zend_execute_scripts()
> >            zend_compile_file()
> >                compile_file || my_compile_file() <-- apc
> >                # it looks like the std compile_file
> >                # may do some zend_open cmds here via
> >                # open_file_for_scaning()
> >            zend_destroy_file_handle() <-- destroy before execute?
> >            zend_execute()
> >        php_request_shutdown()
> >     FCGX_Finish_r;
> > 
> > I have a few questions:
> > 1. When exactly do the files get opened/read? And is this a necessary step
> > if you already have the op-code.
> > 2. Is it possible to check apc_cache before opening files? If it is
> > possible, how/where do you think it could be best implemented? Is there some
> > similar interface to the my_compile_file trick used to override
> > zend_compile_file by apc? Perhaps something like my_open_file, which I could
> > then add support for into the apc module?
> > 3. would changing utility_functions->fopen_function; to point to
> > my_fopen_function in place of zend_open work.
> > 
> > Any input would be greatly appreciated.
> > 
> > -James
> > 
> > ** ( mod_php and the likes are not an option for us as we have our own
> > custom web server which we cannot do without  :)  )
> > 
> > *** when i truss one of the php daemon process i can clearly see that
> > it opens and reads the requested file. It also opens all the
> > included/required files but does not seem read them.
> > 
> 
> -- 
> 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

Reply via email to