Re: [patch 00/10] [RFC] SLUB patches for more functionality, performance and maintenance

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Christoph Lameter <clameter@...>
Cc: Martin Bligh <mbligh@...>, Andi Kleen <andi@...>, <linux-kernel@...>, <linux-mm@...>
Date: Monday, July 9, 2007 - 6:58 pm

* Christoph Lameter (clameter@sgi.com) wrote:

The original publication in which I released the idea was my LTTng paper
at OLS 2006. Outside this, I have not found other paper that talks about
this idea.

The test code is basically just disabling interrupts, reading the TSC
at the beginning and end and does 20000 loops of local_cmpxchg. I can
send you the code if you want it.


Yes.


Yes.


Sure, the idea goes as follow: if you have a per cpu variable that needs
to be concurrently modified in a coherent manner by any context (NMI,
irq, bh, process) running on the given CPU, you only need to use an
operation atomic wrt to the given CPU. You just have to make sure that
only this CPU will modify the variable (therefore, you must disable
preemption around modification) and you have to make sure that the
read-side, which can come from any CPU, is accessing this variable
atomically. Also, you have to be aware that the read-side might see an
older version of the other cpu's value because there is no SMP write
memory barrier involved. The value, however, will always be up to date
if the variable is read from the "local" CPU.

What applies to local_inc, given as example in the local_ops.txt
document, applies integrally to local_cmpxchg. And I would say that
local_cmpxchg is by far the cheapest locking mechanism I have found, and
use today, for my kernel tracer. The idea emerged from my need to trace
every execution context, including NMIs, while still providing good
performances. local_cmpxchg was the perfect fit; that's why I deployed
it in local.h in each and every architecture.

Mathieu

-- 
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[patch 00/10] [RFC] SLUB patches for more functionality, per..., Christoph Lameter, (Sat Jul 7, 11:49 pm)
Re: [patch 00/10] [RFC] SLUB patches for more functionality,..., Christoph Lameter, (Mon Jul 9, 11:50 am)
Re: [patch 00/10] [RFC] SLUB patches for more functionality,..., Mathieu Desnoyers, (Mon Jul 9, 6:58 pm)
Re: [patch 00/10] [RFC] SLUB patches for more functionality,..., Mathieu Desnoyers, (Mon Aug 13, 6:18 pm)
Re: [patch 00/10] [RFC] SLUB patches for more functionality,..., Christoph Lameter, (Mon Aug 13, 6:28 pm)
Re: [patch 00/10] [RFC] SLUB patches for more functionality,..., Mathieu Desnoyers, (Tue Jul 10, 4:27 am)
Re: [patch 00/10] [RFC] SLUB patches for more functionality,..., Mathieu Desnoyers, (Tue Jul 10, 4:59 pm)
Re: [patch 00/10] [RFC] SLUB patches for more functionality,..., Christoph Lameter, (Tue Jul 10, 2:38 pm)
[PATCH] x86_64 - Use non locked version for local_cmpxchg(), Mathieu Desnoyers, (Tue Jul 10, 1:16 am)
Re: [PATCH] x86_64 - Use non locked version for local_cmpxch..., Christoph Lameter, (Tue Jul 10, 4:46 pm)
Re: [patch 00/10] [RFC] SLUB patches for more functionality,..., Christoph Lameter, (Mon Jul 9, 11:45 am)