> -----Original Message-----
> From: Dmitry Stogov <dmi...@zend.com>
> Sent: Thursday, February 14, 2019 11:21 PM
> To: Anatol Belski <a...@php.net>; Nikita Popov <nikita....@gmail.com>
> Cc: Joe Watkins <krak...@gmail.com>; Bob Weinand <bwo...@php.net>;
> Nikita Popov <ni...@php.net>; z...@php.net; PHP internals
> <internals@lists.php.net>
> Subject: Re: ZTS improvement idea
> 
> 
> 
> On 2/14/19 8:55 PM, Anatol Belski wrote:
> > Hi Nikita,
> >
> >> -----Original Message-----
> >> From: Nikita Popov <nikita....@gmail.com>
> >> Sent: Wednesday, February 13, 2019 1:02 AM
> >> To: Dmitry Stogov <dmi...@zend.com>
> >> Cc: Joe Watkins <krak...@gmail.com>; Bob Weinand
> <bwo...@php.net>;
> >> Nikita Popov <ni...@php.net>; Anatol Belski (a...@php.net)
> >> <a...@php.net>; z...@php.net; PHP internals <internals@lists.php.net>
> >> Subject: Re: ZTS improvement idea
> >>
> >> On Wed, Feb 13, 2019 at 9:26 AM Dmitry Stogov <dmi...@zend.com
> >> <mailto:dmi...@zend.com> > wrote:
> >>
> >>
> >>    Hi,
> >>
> >>
> >>
> >>
> >>    After JIT+ZTS related discussion with Joe and Bob, and some related
> >> analyzes.
> >>
> >>    I came to more or less formed design idea and described it at
> >> https://wiki.php.net/zts-improvement
> >>
> >>    This is not an RFC and I'm not sure, if I like to implement TSRM
> >> changes myself now.
> >>
> >>
> >>
> >>
> >>    Comments are welcome.
> >>
> >>
> >> Hi Dmitry,
> >>
> >> Thanks for looking into this issue. As a possible alternative I would
> >> like to suggest the use of ZEND_TLS (__thread) for the EG/CG/BG etc
> >> globals on Linux (on Windows this is not possible due to DLL linkage
> restrictions).
> >> __thread generates very good code (single load over %fs segment with
> >> constant address) if the global is defined and used in an executable.
> >> I'm not sure what kind of code it generates when TLS is declared in
> >> an executable and used in a shared object, but as direct access from
> >> extensions to the engine globals shouldn't be common, it's probably
> >> okay even if it uses __tls_get_addr.
> >>
> > TLS data available across shared objects is a GNU extension and AFAIK
> > there's a lot of black magic behind it. Thread local storage should be
> > indeed local to some scope, be it a function or a binary unit, as per
> > design. Like for C++11 as well, it's thread_local we currently use.
> > It'd hurt the portability and likely introduce issues in the future,
> > as it might affect any non GNU systems which we rarely test.
> > Otherwise, of course it would be easy to say, we add ZEND_TLS to the
> > definition, and be good :)
> 
> In two words, if we make executor_glabal to be "__thread", we will get
> troubles accessing it from DSO extensions. Right?
> 
> Thanks. Dmitry.
> 
Exactly. Plus, it might introduce issues with C++ compatibility.

Thanks

Anatol

Reply via email to