pages were 4KB, so finding 4KB pages now with the same content across
operating systems is quite possible, and therefore physical memory space will be
saved. Processors have supported large memory pages for a long time now, and a
2MB memory page size is commonly recommended, which is what Windows Vista
and Windows Server 2008 and above use by default (along with newer Linux
operating systems). The chances of finding duplicate 2MB memory pages is slight,
which is why as operating systems adopt large memory pages, memory sharing
technologies lose their benefit.
Another factor is that Windows Vista and above use address space load
randomization, a security technology that loads key components of the Windows
kernel and user space into 1 of 256 possible locations. This makes it harder for
malware to attack the kernel based on the components’ location in memory,
because the locations will vary on different instances of the OS and at each
reboot. Duplicate instances of the same operating system will not have the same
content in the same locations for this memory content, which will minimize the
effectiveness of page sharing, but this is only for a small part of the operating
system content.
Runtime Memory Resize
Dynamic Memory is a powerful feature that is the perfect solution for many scenarios
in which the memory assigned to a VM should vary based on the actual utilization
within the guest operating system. In some instances, however, this fluctuating
memory assignment is not appropriate. Consider a hosting provider that has to plan
resource allocation carefully and bill based on certain resources provisioned to
customers. A VM whose memory allocation constantly changed would make planning
difficult and billing complicated. At the same time, the flexibility for customers to
change the memory of a VM as required without a restart of the VM is beneficial. This
is just one example where this functionality is useful; there are many others, but the
key point is to give more control and granularity of memory configuration.
Windows Server 2016 introduces the Runtime Memory Resize capability, also known
as hot-add/remove memory. As the name suggests, it is the ability to add and remove
memory for a running VM completely separate from Dynamic Memory. In fact,
Dynamic Memory and runtime memory resize are mutually exclusive. If you utilize
Dynamic Memory, you cannot manually adjust the assigned memory for a VM via
runtime memory resize. The requirements for runtime memory resize are as follows:
The guest must be running Windows 10 or Windows Server 2016 with Linux
support for hot-add of memory for most recently released distributions but not
hot-remove. Changes to the kernel mode memory manager in Windows 10/2016
enable memory to be removed (unplugged) or added (plugged) from an operating
system that is not present pre-Windows 10/2016.
Dynamic Memory is not used for the VM.