Date: Mon, 05 Oct 2009 11:21:45 -0400 From: John Baldwin <jhb@FreeBSD.org> To: Alan Cox <alc@cs.rice.edu> Cc: Alan Cox <alc@FreeBSD.org>, svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r197750 - head/sys/vm Message-ID: <4ACA0F09.2010808@FreeBSD.org> In-Reply-To: <4ACA0000.2080005@cs.rice.edu> References: <200910041853.n94IrAf7082338@svn.freebsd.org> <4AC9F4F4.4030008@FreeBSD.org> <4ACA0000.2080005@cs.rice.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
Alan Cox wrote: > John Baldwin wrote: >> Alan Cox wrote: >>> Author: alc >>> Date: Sun Oct 4 18:53:10 2009 >>> New Revision: 197750 >>> URL: http://svn.freebsd.org/changeset/base/197750 >>> >>> Log: >>> Align and pad the page queue and free page queue locks so that the >>> linker >>> can't possibly place them together within the same cache line. >>> MFC after: 3 weeks >>> >>> Modified: >>> head/sys/vm/vm_page.c >>> head/sys/vm/vm_page.h >>> >>> Modified: head/sys/vm/vm_page.c >>> ============================================================================== >>> >>> --- head/sys/vm/vm_page.c Sun Oct 4 17:22:51 2009 (r197749) >>> +++ head/sys/vm/vm_page.c Sun Oct 4 18:53:10 2009 (r197750) >>> @@ -135,8 +135,8 @@ __FBSDID("$FreeBSD$"); >>> */ >>> >>> struct vpgqueues vm_page_queues[PQ_COUNT]; >>> -struct mtx vm_page_queue_mtx; >>> -struct mtx vm_page_queue_free_mtx; >>> +struct vpglocks vm_page_queue_lock; >>> +struct vpglocks vm_page_queue_free_lock; >> >> I think you can do this by just: >> >> struct mtx vm_page_queue_mtx __aligned(CACHE_LINE_SIZE); >> >> without the need for a wrapper structure. >> > > Unfortunately, no. When I compile the following example: > > int a; > int b __attribute__((aligned(16))); > int x; > int y; > int z; > > int > main(void) > { > > return (0); > } > > I get the following: > > 080495b4 A __bss_start > 080495b4 A _edata > 080495c0 b completed.4860 > 080495c4 B environ > 080495d0 B b > 080495d4 B x > 080495d8 B z > 080495dc B y > 080495e0 B a > 080495e4 A _end > > Thus, "b" is aligned as specified, but not padded to 16 bytes. Do you care what is in the padding in this case or more about just having each mutex on a separate cache line? __aligned() is fine if you don't mind the padding getting reused for something else. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4ACA0F09.2010808>