The new proposed patch: http://pastebin.com/pj5fQTfN
Now both execute_data->Ts and execute_data->CVs are removed and corresponding temporary and compiled variables accessed using "execute_data" as the base pointer. Temporary variables allocate directly before the "execute_data" in reverse order and compiled variables right after. So they can be accessed without any additional computations. The patch reduces the number of executed instructions and number of memory reads (about 8% less). I'm going to commit the patch on Tuesday. Thanks. Dmitry. On Mon, Dec 3, 2012 at 9:47 AM, Dmitry Stogov <dmi...@zend.com> wrote: > Hi Rasmus, > > I'm glad the patch is not a big problem for APC. > BTW: I decided not to commit the patch as is, and implement the similar > optimization for CVs first. > Otherwise I may need to change the way TMP_VAR accessed twice. > I'll probably send the patch for review later today. > > Thanks. Dmitry. > > On Fri, Nov 30, 2012 at 11:48 PM, Rasmus Lerdorf <ras...@lerdorf.com>wrote: > >> On 11/30/2012 09:15 AM, Dmitry Stogov wrote: >> > Hi, >> > >> > The NEWS and UPGRADING explains the details. >> > >> > http://pastebin.com/VC71Y8LV >> > >> > The patch is big, but actually quite simple. >> > I'm going to commit it on Monday or Tuesday (if no objections). >> > >> > I'm going to look into the similar optimization for CVs, but it's going >> to >> > be a bit more difficult. >> >> Looks good to me. I'll commit this change to APC when you commit it: >> >> Index: apc_zend.c >> =================================================================== >> --- apc_zend.c (revision 328577) >> +++ apc_zend.c (working copy) >> @@ -48,7 +48,11 @@ >> static opcode_handler_t *apc_original_opcode_handlers; >> static opcode_handler_t apc_opcode_handlers[APC_OPCODE_HANDLER_COUNT]; >> >> +#if PHP_MAJOR_VERSION >= 6 || PHP_MAJOR_VERSION == 5 && >> PHP_MINOR_VERSION >= 5 >> +#define APC_EX_T(offset) (*EX_TMP_VAR(execute_data, >> offset)) >> +#else >> #define APC_EX_T(offset) (*(temp_variable >> *)((char*)execute_data->Ts + offset)) >> +#endif >> >> And there are a couple of extensions that are going to need similar >> changes because of this. pecl/optimizer, pecl/inclued, pecl/xhprof, >> pecl/operator and xdebug from a quick check. >> >> -Rasmus >> > >