Azure VMs – Fix 32-bit VMs Having Only 1GB of Usable RAM

azurevirtual-machines

According to this page:
https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/support-32-bit-operating-systems-virtual-machines

Microsoft Azure now allows users to bring in their 32-bit Windows
Operating systems over to Azure.

I tried to bring my 32-bit images to Azure but they have only 1Gb of usable memory out of total physical memory (depending on the VM size). The image is fresh installation of Windows with only RDP being configured.

Only 1GB usable out of 14

With on-premise Hyper-V I have 3,87 GB of usable memory out of 4 GB which is what I would expect.

I tried different options:

  • Windows 10 x32 image
  • Windows 7 x32 image
  • B2s size machine (2 cores, 4 GB)
  • D2v3 (2 cores, 14 GB)
  • sysprep'ped/non-sysprep'ped images

Nothing helped, I always have 1 GB usable memory out of 14 GB or 4 GB.
An Internet search suggests it might have something to do with BIOS but I don't have access to BIOS of Azure VMs. Is there any resolution or at least explanation to this problem?

P.S. Please do not suggest using 64-bit Windows or nested virtualization as an answer to this question.

Update:
Thanks for the pointers about dynamic memory. But I was still unsuccessful with resolving the issue. I emulated high memory consumption with testlimit (from Sysinternals) and made sure I have dmvsc.sys (Dynamic Memory) driver running but the RAM amount never grew for me.

enter image description here

Update:
Posted the suggestion to fix this issue to the Azure feedback portal. You can vote for it here
https://feedback.azure.com/forums/223579-azure-portal/suggestions/42881949-fix-the-issue-with-1gb-ram-limit-for-32-bit-oses-r

Best Answer

Welcome to the quirks of Hyper-V and dynamic memory.

Hyper-V vm's in azure are all using dynamic memory (except for reserved instances). That means, Hyper-V will be constantly monitoring the demand (as reported by the local kernel) and assign the required physical RAM to the vm. Therefore you will see "1 Gb useable" [at this very moment]. That is the actual ammount of the "real" physical ram mapping (plus a buffer for fast growing apps).

enter image description here

A Windows 10 virtual machine needs (surprisingly) little RAM to function well. In your screenshot, the memory usage is idle at the moment (I would assume). The Memory "demand" is very small, so the buffer assigned to the VM (usually around 15%) to the Hyper-V Machine config is using around 1Gb of the assigned maximum.

The buffer is important: When using dynamic memory and the demand suddenly increases for example due a resource heavy application being launched, it takes time for Hyper-V to assign more RAM to the vm. It is possible that this is very slow (depending on the demand of other machines on this host). The bigger the buffer, the better the vm reacts to increased demand. You see the "minimum" buffer there.

Hint: Dynamic memory should not be used when installing Windows, it can make the time needed for installation somewhat longer. I bet you waited a lot longer for thins to complete than on your local machine.

Generally speaking, Windows 10 x32 uses max 4GB of static RAM for default applications. PAE can expand this, but the only widespread apps that do that are Exchange Server (which does not run under Windows 10) and SQL Server (Enterprise).

Related Topic