I have been given an x64 windows 2003 server, on which I have installed M$ Virtual server 2005 R2. I then created an image that is running Server 2008 R2. It was running very slowly so i did a bit of digging through the event logs and ended up finding this article: http://support.microsoft.com/kb/925477.

I have been into the BIOS of the host server and changed the Memory Operating Mode to Optimizer Mode and the Node Interleaving to Enabled. Happily the guest operating system now runs a good lump faster (in my perception, no real concrete testing).

So that's the setup, my question is simple. What did I just do? The more I read into the memory management docs, the less I understand. Could someone please explain what the Memory Operating Mode is and what the different settings really mean.


Looks like you have a Dell server there! Some Docs:

http://support.dell.com/support/edocs/systems/pem/en/hom/html/syssetup.htm

Optimizer mode: "When set to Optimizer Mode, the two memory controllers run in parallel 64-bit mode for improved memory performance.

Memory Interleaving: "If set to Disabled (default), NUMA is employed. If Enabled, memory interleaving is implemented.

What you did with these settings was two things:

  1. Configure the Memory controller for increased parallelism.
  2. Configure memory to not use NUMA (processor-specific memory banks) and instead use all memory as if it were local.

That may be Aramaic to you, so some background on what that means. New servers are configured with per-processor memory banks which allow something called NUMA (non-uniform memory architecture (link)). This allows individual processors to have different amounts of local memory, and enables the Operating System (if it supports NUMA) to structure running processes to take advantage of memory local to each processor.

Quick example, take a dual quad-core server. Each quad-core processor has 8GB of RAM associated with it, for a total of 16GB in the system. In a NUMA system, the operating system knows that processes running on one quad-core processor has local memory (faster fetches), and that moving processes between individual cores on the one processor will not impact memory access speeds. It also knows that if a process has to access memory on the other processor's local memory bank it will cost a certain amount of time.

What you've done with your BIOS setting was to, in essence, turn off NUMA. Interleaving memory means that memory processor affinity is not preserved, so all memory accesses will be expensive. This is compensated by turning on Optimizer Mode, which means that memory accesses can be handled in parallel so that interleaved memory will be serviced much faster that serial accesses would allow.

I hope this helps.