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.

> 
> Thanks
> 
> Anatol
> 

Reply via email to