svn commit: r241798 - in user/andre/tcp_workqueue/sys: kern sys
Gleb Smirnoff
glebius at FreeBSD.org
Sun Oct 21 10:22:04 UTC 2012
On Sun, Oct 21, 2012 at 08:46:16AM +0000, Andre Oppermann wrote:
A> Author: andre
A> Date: Sun Oct 21 08:46:15 2012
A> New Revision: 241798
A> URL: http://svn.freebsd.org/changeset/base/241798
A>
A> Log:
A> Make sure that global locks have their own CPU cache line in
A> the .bss section of the kernel and do not end up sharing one
A> by chance or the place they are defined in.
A>
A> Three new macros are added:
A> MTX_GLOBAL(name) defining the mutex
A> MTX_GLOBAL_STATIC(name) defining the mutex as static
A> MTX_GLB(name) accessing the mutex in mtx_lock()
A>
A> This makes global locks cache deterministic. Changes to the
A> .bss layout and ordering due to differences in completely
A> unrelated parts of the kernel can no longer cause global
A> locks to share the same CPU cache line.
A>
A> This is a proof of concept with only one global lock converted.
A>
A> I'm open to suggestions and improvements on the macros and
A> their naming.
My fault, I have confused you yesterday in our discussion. Actually
we don't need to embrace declaration into additional struct.
This code works:
static struct mtx __aligned(CACHE_LINE_SIZE) foo_mtx;
When speaking about embracing, I actually meant that we can embrace
into anonymous struct a mutex and a structures it protects, not a
mutex only.
P.S. Before merging such changes to head we need to do some benchmarking
proving that this isn't a nop.
--
Totus tuus, Glebius.
More information about the svn-src-user
mailing list