Re: Re: com php-src: fix CG(empty_string) init in ZTS: Zend/zend.c

From: Date: Mon, 13 Oct 2014 13:38:44 +0000
Subject: Re: Re: com php-src: fix CG(empty_string) init in ZTS: Zend/zend.c
References: 1 2 3 4 5 6 7 8 9 10 11 12 13  Groups: php.cvs php.internals 
Request: Send a blank email to internals+get-77919@lists.php.net to get a copy of this message
bench.php should be faster as well. It must be slower because of not lucky code locality or something like that. Thanks. Dmitry. On Mon, Oct 13, 2014 at 4:40 PM, <anatol.php@belski.net> wrote: > Hi Dmitry, > > thanks for taking a look, > > On Mon, October 13, 2014 13:38, Dmitry Stogov wrote: > > Hi Anatol, > > > > > > At first, I still saw the same big difference on Linux. > > bench.php ZTS - 1.340 sec, native TLS - 1.785 sec. As I understood, it > must > > be related to incomplete changes in build scripts, related to > > ZEND_ENABLE_STATIC_TSRMLS_CACHE. Right? > > > Huh, not sure why the diff you get is so big. I guess it might be so with a > full build. The bench results I was sending previously was done with > --disable-all (actually more than that isn't needed for bench.php) on > opensuse/x64. I have to check this. ZEND_ENABLE_STATIC_TSRMLS_CACHE > conversions isn't complete, that's true. > > > If I get it properly, main PHP binary should be compiled with > > -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 and shared extensions without it. It > > should lead to quite fast code in main PHP binary and statically linked > > extensions, but to slow code in shared extensions. Right? > > > With a small addition it is right. Actually any ext can possibly be > compiled with -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, just in accordance with > the following > > - ext is static, then its SOMEEXT_G should just use ZEND_TSRMG instead of > TSRMG > - ext is shared, then the ext should > - ZEND_TSRMG > - use ZEND_TSRMLS_CACHE_DEFINE > - and ZEND_TSRMLS_CACHE_UPDATE at a proper place (globals ctor is a > good one, maybe there's a better one) > - and possibly it can ZEND_TSRMLS_CACHE_EXTERN in some header to > spread over multiple c files within the same ext > > - ext can be either/or static/shared, then at compile time it need to > catch both cases. I made an exemplary conversion for ext/sockets. It can > already switch to ZEND_TSRM which will use static or function call model > to fetch TSRMLS, but it has to use COMPILE_DL_SOMEEXT && ZTS to check if > it's a separate module (so it has to update it's local TSRMLS itself). > - without -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 and steps above - an ext > will always use TSRMG (so tsrm_get_ls_cache()) to fetch globals, but the > good on that is - nothing will have to be touched and it'll work even if > slower > > > > I built PHP in this way with all extensions linked statically. Now, I see > > small slowdown on bench.php (however according to callgrind it executes > > less instructions and should be faster). Wordpress became 2% faster. > > > > So the patch becomes interesting. :) > > However, many distributions prefer shard extensions, and it would be > great > > to invent some trick to make them fast too. > So you could test it even more, but WP being faster with the current state > is a bit surprising. But well :) Probably I gonna continue with some more > conversions for the remaining exts and SAPIs, will also try to figure out > why it could be possibly slower with bench.php, and then come back again. > > > > I would also prefer to keep the semantic patch small and don't delete all > > FETCH_TSRM() in thousand places (at this point). > > Replacing macro in one place must be easier. > > It's not a problem to remove them on second step if the PoC would really > > work. > > > I think one can apply a partial reverse patch for now, then all those > places should be back. Probably easier than looking for all the > corresponding commits. So I'll do it. > > Regards > > Anatol > > > > >

« previous php.internals (#77919) next »