Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755850AbcDGJBl (ORCPT ); Thu, 7 Apr 2016 05:01:41 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41091 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755820AbcDGJBf (ORCPT ); Thu, 7 Apr 2016 05:01:35 -0400 Subject: Re: [RFC PATCH v6 1/5] Thread-local ABI system call: cache CPU number of running thread To: Peter Zijlstra References: <1459789313-4917-1-git-send-email-mathieu.desnoyers@efficios.com> <1459789313-4917-2-git-send-email-mathieu.desnoyers@efficios.com> <5702A037.60200@zytor.com> <492303698.44994.1459799188052.JavaMail.zimbra@efficios.com> <856357054.45028.1459802903401.JavaMail.zimbra@efficios.com> <5703E191.2040707@redhat.com> <20160405164722.GB3430@twins.programming.kicks-ass.net> Cc: Mathieu Desnoyers , "H. Peter Anvin" , Andrew Morton , Russell King , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-api , Paul Turner , Andrew Hunter , Andy Lutomirski , Andi Kleen , Dave Watson , Chris Lameter , Ben Maurer , rostedt , "Paul E. McKenney" , Josh Triplett , Linus Torvalds , Catalin Marinas , Will Deacon , Michael Kerrisk , Boqun Feng From: Florian Weimer X-Enigmail-Draft-Status: N1110 Message-ID: <570621E5.7060306@redhat.com> Date: Thu, 7 Apr 2016 11:01:25 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <20160405164722.GB3430@twins.programming.kicks-ass.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Thu, 07 Apr 2016 09:01:34 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1942 Lines: 50 On 04/05/2016 06:47 PM, Peter Zijlstra wrote: > On Tue, Apr 05, 2016 at 06:02:25PM +0200, Florian Weimer wrote: >> On 04/04/2016 10:48 PM, Mathieu Desnoyers wrote: >> >>> Moreover, the feature set that the application knows about, glibc >>> knows about, and the kernel knows about are three different things. >>> My intent here is to have glibc stay out of the way as much as possible, >>> since this is really an interface between various applications/libraries >>> and the kernel. >> >> Surely glibc can allocate the space based on what is advertised as >> needed by the kernel? Why would it limit itself to what is supported by >> the kernel headers it is compiled against if the actual size can be >> queried from the kernel? > > I guess the question is; can we do thread local variable arrays like: > > __thread uint32_t[x]; /* with x being a runtime constant */ > > Because then we can do: > > __thread struct thread_local_abi tla; > > where sizeof(struct thread_local_abi) is a runtime variable. It's slightly complicated. ELF TLS in the GNU ABI will give you a static offset only with static linking. > Without that we cannot have this thread-local-abi structure be part of > the immediately addressable TLS space. That is, we then need a pointer > like: > > __thread struct thread_local_abi *tla; > > and every usage will need the extra pointer deref. The offset relative to the base will be dynamic anyway and need an extra load (which can be hoisted out of loops etc., but it's still there in some case). > Because ideally this structure would be part of the initial (glibc) TCB > with fixed offset etc. This is not possible because we have layering violations and code assumes it knows the precise of the glibc TCB. I think Address Sanitizer is in this category. This means we cannot adjust the TCB size based on the kernel headers used to compile glibc, and there will have to be some indirection. Florian