From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> To: Rusty Russell <rusty@rustcorp.com.au> Cc: David Miller <davem@davemloft.net>, rostedt@goodmis.org, akpm@linux-foundation.org, linux-kernel@vger.kernel.org, paulus@samba.org, benh@kernel.crashing.org, linux-ia64@vger.kernel.org, linux-s390@vger.kernel.org, Christoph Lameter <christoph@lameter.com>, "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>, Martin Bligh <mbligh@google.com> Subject: Re: local_add_return Date: Fri, 19 Dec 2008 12:06:27 -0500 [thread overview] Message-ID: <20081219170627.GB1339@Krystal> (raw) In-Reply-To: <200812191624.46580.rusty@rustcorp.com.au> * Rusty Russell (rusty@rustcorp.com.au) wrote: > On Friday 19 December 2008 14:05:14 Mathieu Desnoyers wrote: > > * Rusty Russell (rusty@rustcorp.com.au) wrote: > > But can we turn what you call "nmi_safe_t" into "local_atomic_t" then ? > > Because we have to specify that this type must only be used as part of > > per-cpu data with preemption disabled, and we also specify that it is > > atomic. > > > > Plus, nmi_safe_t does not make much sense on architectures without NMIs, > > where we sometimes disable interrupts to make the modification "atomic" > > wrt all other interrupts that can happen. > > But those archs can use local_t. I don't like either name local_t nor > atomic_local_t, but renaming sucks too. > > OK, how about a different approach? Since there's really only one case > where we need this local_t property outside arch-specific code, how about > we define ARCH_LOCAL_T_TRACE_SAFE for x86? > > Then some trace-specific typedef like "trace_counter_t" which goes to local_t > or atomic_(long?)_t? > > Should be a simple patch and pretty clear. > Hrm, is it me or linking a basic type definition to a single user seems like the wrong approach ? The idea behind declaring new types is, to me, that they should describe as generally as possible what they provide and what they are. If we think of the future, where we might want to use such local atomic types for other purposes than tracing, I think we will end up regretting such specific naming scheme. I don't think the argument "because the type has only one arch-independent user" holds, because the idea behind new types is that they _will_ be used by others eventually. For instance, we've done some work on moving the slub allocator to such local atomic operations last year, and it gave very good results on architectures where disabling interrupt is costly (threefold acceleration of the fastpath). In your trace_counter_t proposal, you don't take into account that (what I call) local_atomic_long_t is a _new_ primitive, which cannot be implemented by a trivalue and differs from atomic_long_t, on more architectures than x86. On mips and powerpc, at least, it can be implemented as an atomic operation without the memory barriers, which improves performances a lot. I think the following scheme would be pretty simple and yet not tied to any specific user : local_long_t - Fast per-cpu counter, not necessarily atomic. Implements long trivalues, or uses local_atomic_long_t. local_atomic_long_t - Fast per-cpu atomic counter. Implements per-cpu atomic counters or uses atomic_long_t. atomic_long_t - Global atomic counter. Implements globally synchronized atomic operations. We could do the same with "int" type for : local_t local_atomic_t atomic_t If we need smaller counters. Mathieu > Thanks, > Rusty. -- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
WARNING: multiple messages have this Message-ID (diff)
From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> To: Rusty Russell <rusty@rustcorp.com.au> Cc: David Miller <davem@davemloft.net>, rostedt@goodmis.org, akpm@linux-foundation.org, linux-kernel@vger.kernel.org, paulus@samba.org, benh@kernel.crashing.org, linux-ia64@vger.kernel.org, linux-s390@vger.kernel.org, Christoph Lameter <christoph@lameter.com>, "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>, Martin Bligh <mbligh@google.com> Subject: Re: local_add_return Date: Fri, 19 Dec 2008 17:06:27 +0000 [thread overview] Message-ID: <20081219170627.GB1339@Krystal> (raw) In-Reply-To: <200812191624.46580.rusty@rustcorp.com.au> * Rusty Russell (rusty@rustcorp.com.au) wrote: > On Friday 19 December 2008 14:05:14 Mathieu Desnoyers wrote: > > * Rusty Russell (rusty@rustcorp.com.au) wrote: > > But can we turn what you call "nmi_safe_t" into "local_atomic_t" then ? > > Because we have to specify that this type must only be used as part of > > per-cpu data with preemption disabled, and we also specify that it is > > atomic. > > > > Plus, nmi_safe_t does not make much sense on architectures without NMIs, > > where we sometimes disable interrupts to make the modification "atomic" > > wrt all other interrupts that can happen. > > But those archs can use local_t. I don't like either name local_t nor > atomic_local_t, but renaming sucks too. > > OK, how about a different approach? Since there's really only one case > where we need this local_t property outside arch-specific code, how about > we define ARCH_LOCAL_T_TRACE_SAFE for x86? > > Then some trace-specific typedef like "trace_counter_t" which goes to local_t > or atomic_(long?)_t? > > Should be a simple patch and pretty clear. > Hrm, is it me or linking a basic type definition to a single user seems like the wrong approach ? The idea behind declaring new types is, to me, that they should describe as generally as possible what they provide and what they are. If we think of the future, where we might want to use such local atomic types for other purposes than tracing, I think we will end up regretting such specific naming scheme. I don't think the argument "because the type has only one arch-independent user" holds, because the idea behind new types is that they _will_ be used by others eventually. For instance, we've done some work on moving the slub allocator to such local atomic operations last year, and it gave very good results on architectures where disabling interrupt is costly (threefold acceleration of the fastpath). In your trace_counter_t proposal, you don't take into account that (what I call) local_atomic_long_t is a _new_ primitive, which cannot be implemented by a trivalue and differs from atomic_long_t, on more architectures than x86. On mips and powerpc, at least, it can be implemented as an atomic operation without the memory barriers, which improves performances a lot. I think the following scheme would be pretty simple and yet not tied to any specific user : local_long_t - Fast per-cpu counter, not necessarily atomic. Implements long trivalues, or uses local_atomic_long_t. local_atomic_long_t - Fast per-cpu atomic counter. Implements per-cpu atomic counters or uses atomic_long_t. atomic_long_t - Global atomic counter. Implements globally synchronized atomic operations. We could do the same with "int" type for : local_t local_atomic_t atomic_t If we need smaller counters. Mathieu > Thanks, > Rusty. -- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
next prev parent reply other threads:[~2008-12-19 17:06 UTC|newest] Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top 2008-12-15 13:47 local_add_return Steven Rostedt 2008-12-16 6:33 ` local_add_return Rusty Russell 2008-12-16 6:57 ` local_add_return David Miller 2008-12-16 7:13 ` local_add_return David Miller 2008-12-16 22:38 ` local_add_return Rusty Russell 2008-12-16 22:50 ` local_add_return Rusty Russell 2008-12-16 23:25 ` local_add_return Luck, Tony 2008-12-16 23:25 ` local_add_return Luck, Tony 2008-12-16 23:43 ` local_add_return Heiko Carstens 2008-12-16 23:43 ` local_add_return Heiko Carstens 2008-12-16 23:59 ` local_add_return Eric Dumazet 2008-12-16 23:59 ` local_add_return Eric Dumazet 2008-12-17 0:01 ` local_add_return Mathieu Desnoyers 2008-12-17 0:01 ` local_add_return Mathieu Desnoyers 2008-12-18 22:52 ` local_add_return Rusty Russell 2008-12-18 22:53 ` local_add_return Rusty Russell 2008-12-19 3:35 ` local_add_return Mathieu Desnoyers 2008-12-19 3:35 ` local_add_return Mathieu Desnoyers 2008-12-19 5:54 ` local_add_return Rusty Russell 2008-12-19 5:54 ` local_add_return Rusty Russell 2008-12-19 17:06 ` Mathieu Desnoyers [this message] 2008-12-19 17:06 ` local_add_return Mathieu Desnoyers 2008-12-20 1:33 ` local_add_return Rusty Russell 2008-12-20 1:45 ` local_add_return Rusty Russell 2008-12-20 1:33 ` local_add_return Rusty Russell 2008-12-22 18:43 ` local_add_return Mathieu Desnoyers 2008-12-22 18:43 ` local_add_return Mathieu Desnoyers 2008-12-24 11:42 ` local_add_return Rusty Russell 2008-12-24 11:54 ` local_add_return Rusty Russell 2008-12-24 18:53 ` local_add_return Mathieu Desnoyers 2008-12-24 18:53 ` local_add_return Mathieu Desnoyers 2008-12-16 16:25 ` local_add_return Mathieu Desnoyers 2008-12-17 11:23 ` local_add_return Rusty Russell
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20081219170627.GB1339@Krystal \ --to=mathieu.desnoyers@polymtl.ca \ --cc=akpm@linux-foundation.org \ --cc=benh@kernel.crashing.org \ --cc=christoph@lameter.com \ --cc=davem@davemloft.net \ --cc=linux-ia64@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-s390@vger.kernel.org \ --cc=mbligh@google.com \ --cc=paulmck@linux.vnet.ibm.com \ --cc=paulus@samba.org \ --cc=rostedt@goodmis.org \ --cc=rusty@rustcorp.com.au \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.