Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:40012 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 96027 invoked from network); 20 Aug 2008 06:04:28 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 20 Aug 2008 06:04:28 -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.174 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.174 ug-out-1314.google.com Received: from [66.249.92.174] ([66.249.92.174:21326] helo=ug-out-1314.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 9F/26-51571-AE3BBA84 for ; Wed, 20 Aug 2008 02:04:28 -0400 Received: by ug-out-1314.google.com with SMTP id c2so670850ugf.37 for ; Tue, 19 Aug 2008 23:04:23 -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=dpd+oSR1ilXB7w8upoqURc/Cchi/X2+avrR4UqUwbR8=; b=BdaJ7niuZ7iGmAdRPR+RMtpPZTS4Ph+3Oy4n5FAMP8W9LGOgd8ZygUAt/EPYrBzioe hMLQJsEHsMcdVm7AtLjonCBXTTeArzs+EDkAL1btwhASGPRQZoJdaiF/DCb5uZrgJIAq NNiz9bXpk16TaUmfNYUt8MFVtCfAWtrXfSvkE= 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=L9ZiO0Uk6pwlNc12N0mcGfUUIOFphWW5YrfHdSpZEcHnK0AQwR9R4A+h950DOu2LDA woaeGX4mNZop0KaVJ36qeOymiGQp33Z8yAMNHVqkAUPCajiJtwvUQTlkvrIeVYr15zJ+ rw4q/ETHp/eiNAb3SkFj3/0XvqyI+Zq4q5MSM= Received: by 10.103.247.5 with SMTP id z5mr5417010mur.24.1219212263485; Tue, 19 Aug 2008 23:04:23 -0700 (PDT) Received: from 207-177-41-213.getmyip.com ( [213.41.177.207]) by mx.google.com with ESMTPS id s10sm1630791muh.12.2008.08.19.23.04.21 (version=SSLv3 cipher=RC4-MD5); Tue, 19 Aug 2008 23:04:22 -0700 (PDT) To: "Uwe Schindler" Date: Wed, 20 Aug 2008 08:02:19 +0200 User-Agent: KMail/1.10.0 (Linux/2.6.26-noch; KDE/4.1.0; i686; ; ) Cc: "'Andi Gutmans'" , "'PHP Development'" References: <200808170419.11153.arnaud.lb@gmail.com> <200808190700.30255.arnaud.lb@gmail.com> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-ID: <200808200802.19732.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 Tuesday 19 August 2008 09:52:24 Uwe Schindler wrote: > I do not know exactly how this will behave with other web servers. I do the > module for Sun Java System Webservers (NSAPI) which normally uses pthreads > (on Solaris, Linux) but not on AIX (this is why PHP as NSAPI module does not > work on AIX). > > The correct way for this webserver would be to use the macros/functions from > the NSAPI library to handle threads, which is implemented in TSRM [see > #ifdef NSAPI], but never used, because when compiling PHP the "NSAPI" > defines are only known to the NSAPI module, but not to the whole source tree > - so TSRM uses pthreads (which is clear then). The parallel CLI version of > PHP compiled with NSAPI threads would not work, too (if not using pthreads). > > But for newer SJSWS servers, this is not a problem, if PHP's NSAPI always > uses pthreads - only AIX is broken (but this since years). > > So: may there be issues with this server, too? I would like to test it, too, > but I need to eventually add code to sapi/nsapi, you may help me :) I think there will be nothing to change in SAPIs to work with that as long as the platform supports __thread. I think the patch should work as-is on Linux (with PHP compiled with --with-pic). It seems Solaris has an implementation very close to the one used on Linux, so it should work on Solaris too. Regards, Arnaud > > ----- > Uwe Schindler > thetaphi@php.net - http://www.php.net > NSAPI SAPI developer > Bremen, Germany > > > -----Original Message----- > > From: Arnaud Le Blanc [mailto:arnaud.lb@gmail.com] > > Sent: Tuesday, August 19, 2008 7:00 AM > > To: Andi Gutmans > > Cc: PHP Development > > Subject: Re: [PHP-DEV] [PATCH] ZTS as fast as non-ZTS > > > > Hi, > > > > Yes, I have looked for the issue with --with-tsrm-full-__thread-tls and > > there > > are effectively some issues. > > > > When building PIC code, the used TLS model is a static model which does > > not > > allow modules to be loaded at run-time. glibc's dlopen() sometimes allow > > such > > code to be loaded at runtime when it finds some free memory, that's why -- > > with- > > tsrm-__thread-tls works, but it is not expected to always work. > > > > So when building PIC code that's expected to work only when the > > server/application links the PHP module, or when using LD_PRELOAD, etc. > > > > Building non-PIC code allows to use a dynamic TLS model, which allows to > > load > > modules a run-time, but it is less efficient (4.8s in bench.php, still > > faster > > than unpatched version, even non-PIC, but less efficient). > > > > Regards, > > > > Arnaud > > > > On Tuesday 19 August 2008 06:18:51 Andi Gutmans wrote: > > > Hi Arnaud, > > > > > > I remember that at the time we looked at thread local storage and there > > > were some real issues with it. I can't remember what as it was about 7+ > > > years ago. > > > I will ask Zeev if he remembers and if not search my archives (don't > > > have years prior to 2007 indexed :'( ). > > > > > > Andi > > > > > > > > > > > > > > > > -----Original Message----- > > > > From: Arnaud Le Blanc [mailto:arnaud.lb@gmail.com] > > > > Sent: Saturday, August 16, 2008 7:19 PM > > > > To: PHP Development > > > > Subject: [PHP-DEV] [PATCH] ZTS as fast as non-ZTS > > > > > > > > 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 > > > > > > > > > > > > -- > > > > PHP Internals - PHP Runtime Development Mailing List > > > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > > > > > > > -- > > PHP Internals - PHP Runtime Development Mailing List > > To unsubscribe, visit: http://www.php.net/unsub.php > > >