Re: Run Time Cache RFC

From: Date: Fri, 21 May 2010 06:17:57 +0000
Subject: Re: Run Time Cache RFC
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-48368@lists.php.net to get a copy of this message
Hi Jones, Christopher Jones wrote:
Dmitry Stogov wrote: Hi, I'm proposing another optimisation technique implementation for PHP which makes up to 20% speed up on synthetic tests and up to 8% speed up on real-life applications. The technique is similar to "inline caches" which is very popular in JIT compilers for object oriented languages. http://wiki.php.net/rfc/runtimecache The patch breaks binary and source compatibility but it's not hard to adopt extensions to use it. I'm going to commit the patch on next week in case of no objections. Thanks. Dmitry. Hi Dmitry, Can update the RFC to explain the breakage and
It's clear from the patch. The same is explained in RFC in human language, but it's not so exact :) Index: Zend/zend.h =================================================================== --- Zend/zend.h (revision 299422) +++ Zend/zend.h (working copy) @@ -298,6 +298,7 @@ typedef struct _zend_object { zend_class_entry *ce; HashTable *properties; + zval **properties_table; HashTable *guards; /* protects from __get/__set ... recursion */ } zend_object; @@ -468,11 +469,13 @@ zend_uint ce_flags; HashTable function_table; - HashTable default_properties; HashTable properties_info; - HashTable default_static_members; - HashTable *static_members; + zval **default_properties_table; + zval **default_static_members_table; + zval **static_members_table; HashTable constants_table; + int default_properties_count; + int default_static_members_count; const struct _zend_function_entry *builtin_functions; union _zend_function *constructor;
give the required or suggested best-practice changes for extensions?
Most affected php extensions already fixed with the same patch. It usually requires just one line change. Index: ext/dom/php_dom.c =================================================================== --- ext/dom/php_dom.c (revision 299422) +++ ext/dom/php_dom.c (working copy) @@ -1053,7 +1053,6 @@ static dom_object* dom_objects_set_class(zend_class_entry *class_type, zend_bool hash_copy TSRMLS_DC) /* {{{ */ { zend_class_entry *base_class; - zval *tmp; dom_object *intern; if (instanceof_function(class_type, dom_xpath_class_entry TSRMLS_CC)) { @@ -1075,7 +1074,7 @@ zend_object_std_init(&intern->std, class_type TSRMLS_CC); if (hash_copy) { - zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); + object_properties_init(&intern->std, class_type); } return intern; The complete patch is attached to RFC, and in case anyone likes to understand it, they have to look into the patch itself. Thanks. Dmitry.
Thanks, Chris


« previous php.internals (#48368) next »