Re: Re: com php-src: fix CG(empty_string) init in ZTS: Zend/zend.c
| From: | Dmitry Stogov | 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
>
>
>
>
>