* 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 -
| Greg Kroah-Hartman | [PATCH 004/196] Chinese: add translation of SubmittingPatches |
| Alan Stern | Re: 2.6.22-rc2-mm1 |
| Satyam Sharma | Re: [PATCH 0/24] make atomic_read() behave consistently across all architectures |
| William Lee Irwin III | Re: [Announce] [patch] Modular Scheduler Core and Completely Fair Scheduler [CFS] |
git: | |
| Dale Farnsworth | Re: [PATCH 03/39] mv643xx_eth: shorten reg names |
| Jarek Poplawski | Re: HTB accuracy for high speed |
| Gerrit Renker | [PATCH 15/37] dccp: Set per-connection CCIDs via socket options |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
