Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:39999 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 26330 invoked from network); 18 Aug 2008 23:18:22 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 18 Aug 2008 23:18:22 -0000 Authentication-Results: pb1.pair.com smtp.mail=arnaud.lb@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=arnaud.lb@gmail.com; sender-id=pass; domainkeys=bad Received-SPF: pass (pb1.pair.com: domain gmail.com designates 66.249.92.175 as permitted sender) DomainKey-Status: bad X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: arnaud.lb@gmail.com X-Host-Fingerprint: 66.249.92.175 ug-out-1314.google.com Received: from [66.249.92.175] ([66.249.92.175:25635] helo=ug-out-1314.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 8F/36-25897-C330AA84 for ; Mon, 18 Aug 2008 19:18:21 -0400 Received: by ug-out-1314.google.com with SMTP id c2so315093ugf.37 for ; Mon, 18 Aug 2008 16:18:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:subject:date :user-agent:cc:references:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:message-id; bh=mqK7NIqcv4FfQPDWwJMhRsR1eAFRVUzXz0UxVnVL8sk=; b=dmchTTzxe59rapkQGUlnQOhNzO5XwUr64MjDoNx6nUhQI5dfYOxj3wvPZpSt+n5B39 lexkfp6nUl9Tq608vIIGmXUNDeLDc05FePuyBBFoCBWZ2n7Rf+fo6aIAIZ9ArJMfZ4QR REd4k/He4Q8+mYh7LBTcDJbOBf8yHaQuzQ/F8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:subject:date:user-agent:cc:references:in-reply-to :mime-version:content-type:content-transfer-encoding :content-disposition:message-id; b=eR33jinPNHhMYSYs7xJbh95hlGs5c6u5c7f4sGpcNmp8fyn0c8w5XxXG6xajfKjYQX awdQAzh8Ztff1A4hfg4bUaVR/rNrYDOIPYc0+TTWSE+BZVzZ0YrjZxobo4XHypT96esT i24m5ty46R2Fb0Ak2MjtF+65oAYsibS44HJFs= Received: by 10.103.179.17 with SMTP id g17mr4313724mup.119.1219101496674; Mon, 18 Aug 2008 16:18:16 -0700 (PDT) Received: from 207-177-41-213.getmyip.com ( [213.41.177.207]) by mx.google.com with ESMTPS id t10sm4188552muh.16.2008.08.18.16.18.14 (version=SSLv3 cipher=RC4-MD5); Mon, 18 Aug 2008 16:18:15 -0700 (PDT) To: Dmitry Stogov Date: Tue, 19 Aug 2008 01:16:04 +0200 User-Agent: KMail/1.10.0 (Linux/2.6.26-noch; KDE/4.1.0; i686; ; ) Cc: PHP Development , Stanislav Malyshev , Andi Gutmans References: <200808170419.11153.arnaud.lb@gmail.com> <48A9B586.6000409@zend.com> In-Reply-To: <48A9B586.6000409@zend.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-ID: <200808190116.04713.arnaud.lb@gmail.com> Subject: Re: [PHP-DEV] [PATCH] ZTS as fast as non-ZTS From: arnaud.lb@gmail.com (Arnaud Le Blanc) Hi, On Monday 18 August 2008 19:46:46 Dmitry Stogov wrote: > Hi Arnaud, > > The patch looks very interesting. > I think it may be committed to the HEAD in the nearest future. > I don't have time to look into all details in the moment. > > Could you explain why --with-tsrm-full-__thread-tls doesn't work with > dlopen() however --with-tsrm-__thread-tls does? That's due to the way TLS works internally. Actually I need further reading on that. > > Did you test the patch with DSO extensions? I will, but I guess that will be behaves like another shared library dlopen()ed by Apache. > > It would be interesting to try the same idea on Windows with VC. I will try too. > > Thanks. Dmitry. > > Arnaud Le Blanc wrote: > > Hi, > > > > Currently the way globals work forces to pass a thread-local-storage pointer > > across function calls, which involves some overhead. Also, not all functions > > get the pointer as argument and need to use TSRMLS_FETCH(), which is slow. For > > instance emalloc() involves a TSRMLS_FETCH(). An other overhead is accessing > > globals, using multiple pointers in different locations. > > > > The following patch caches each global address in a native TLS variable so > > that accessing a global is as simple as global_name->member. This removes the > > requirement of passing the tls pointer across function calls, so that the two > > major overheads of ZTS builds are avoided. > > > > Globals can optionally be declared statically, which speeds up things a bit. > > > > Results in bench.php: > > non-ZTS: 3.7s > > ZTS unpatched: 5.2s > > ZTS patched: 4.0s > > ZTS patched and static globals: 3.8s > > > > The patch introduces two new macros: TSRMG_D() (declare) and TSRMG_DH() > > (declare, for headers) to declare globals, instead of the current "ts_rsrc_id > > foo_global_id". These macros declare the global id, plus the __thread pointer > > to the global storage. > > > > ts_allocate_id now takes one more callback function as argument to bind the > > global pointer to its storage. This callback is declared in TSRMG_D[H](). > > > > As all TSRMLS_* macros now does nothing, it is needed to call ts_resource(0) > > explicitly at least one time in each thread to initialize its storage. A new > > TSRMLS_INIT() macro as been added for this purpose. > > > > All this is disabled by default. --with-tsrm-__thread-tls enables the features > > of the patch, and --with-tsrm-full-__thread-tls enables static declaration of > > globals. > > > > It as been tested on Linux compiled with --disable-all in CLI and a bit in > > Apache2 with the worker MPM. Known issues: > > - Declaring globals statically (--with-tsrm-full-__thread-tls) causes troubles > > to dlopen(), actually Apache wont load the module at runtime (it works with > > just --with-tsrm-__thread-tls). > > - The patch assumes that all resources are ts_allocate_id()'ed before any > > other thread calls ts_allocate_id or ts_resource_ex(), which is possibly not > > the case. > > > > The patch needs some tweaks and does not pretend to be included in any branch, > > but I would like to have some comments on it. > > > > The patch: http://arnaud.lb.s3.amazonaws.com/__thread-tls.patch > > > > Regards, > > > > Arnaud > > > > > Regards, Arnaud