Default to not performing the early-boot memory tests when we detect we

are booting inside a VM.  There are three reasons to disable this:

o  It causes the VM host to believe that all the tested pages or RAM are
   in use.  This in turn may force the host to page out pages of RAM
   belonging to other VMs, or otherwise cause problems with fair resource
   sharing on the VM cluster.
o  It adds significant time to the boot process (around 1 second/Gig in
   testing)
o  It is unnecessary - the host should have already verified that the
   memory is functional etc.

Note that this simply changes the default when in a VM - it can still be
overridden using the hw.memtest.tests tunable.

MFC after:	4 weeks
This commit is contained in:
gavin 2011-12-31 13:24:53 +00:00
parent 21c9c8f9bc
commit 596f1a19e7
2 changed files with 10 additions and 4 deletions

View File

@ -1401,10 +1401,13 @@ getmemsize(caddr_t kmdp, u_int64_t first)
Maxmem = atop(physmem_tunable);
/*
* By default keep the memtest enabled. Use a general name so that
* By default enable the memory test on real hardware, and disable
* it if we appear to be running in a VM. This avoids touching all
* pages unnecessarily, which doesn't matter on real hardware but is
* bad for shared VM hosts. Use a general name so that
* one could eventually do more with the code than just disable it.
*/
memtest = 1;
memtest = (vm_guest > VM_GUEST_NO) ? 0 : 1;
TUNABLE_ULONG_FETCH("hw.memtest.tests", &memtest);
/*

View File

@ -2369,10 +2369,13 @@ physmap_done:
Maxmem = atop(physmap[physmap_idx + 1]);
/*
* By default keep the memtest enabled. Use a general name so that
* By default enable the memory test on real hardware, and disable
* it if we appear to be running in a VM. This avoids touching all
* pages unnecessarily, which doesn't matter on real hardware but is
* bad for shared VM hosts. Use a general name so that
* one could eventually do more with the code than just disable it.
*/
memtest = 1;
memtest = (vm_guest > VM_GUEST_NO) ? 0 : 1;
TUNABLE_ULONG_FETCH("hw.memtest.tests", &memtest);
if (atop(physmap[physmap_idx + 1]) != Maxmem &&