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
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to