diff options
author | Christoph Lameter <cl@linux.com> | 2010-12-14 10:28:47 -0600 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2010-12-18 15:54:04 +0100 |
commit | 8270137a0d50507a5b40f880db636527045b8466 (patch) | |
tree | 3490a31fcbea09ab5fffb6b2f4330dc92896f413 /mm/vmstat.c | |
parent | 7296e08abac0a22a2534a4f6e493c764f2c77583 (diff) |
cpuops: Use cmpxchg for xchg to avoid lock semantics
Use cmpxchg instead of xchg to realize this_cpu_xchg.
xchg will cause LOCK overhead since LOCK is always implied but cmpxchg
will not.
Baselines:
xchg() = 18 cycles (no segment prefix, LOCK semantics)
__this_cpu_xchg = 1 cycle
(simulated using this_cpu_read/write, two prefixes. Looks like the
cpu can use loop optimization to get rid of most of the overhead)
Cycles before:
this_cpu_xchg = 37 cycles (segment prefix and LOCK (implied by xchg))
After:
this_cpu_xchg = 11 cycle (using cmpxchg without lock semantics)
Signed-off-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'mm/vmstat.c')
0 files changed, 0 insertions, 0 deletions