svn commit: r197750 - head/sys/vm

Alan Cox alc at cs.rice.edu
Mon Oct 5 14:17:46 UTC 2009


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.

Alan




More information about the svn-src-head mailing list