Virtual Machine memory usage not appearing in TaskManager
There's something about Windows memory management and it's relationship to TaskManager that I don't understand and I'm hoping someone can enlighten me.
If I'm running a virtual machine (doesn't matter if it's Virtual PC 2007, Virtual Server 2005, or VirtualBox since they act the same way) and bring up TaskManager I can see on the processes tab some entries for the VM but the memory values are fairly small (around 30 MB). Obviously it's not including the memory actually being consumed by the VM itself. None of the various Memory-related columns you can make visible appear to work differently. The Memory usage on the Performance tab appears to be correct for total memory usage including the VM.
So my question is why doesn't the VM's memory usage (which will be 100's of MB) show up on the Processes tab?
VirtualPC, HyperV and probably similar products use something called driver locked memory, which is not visible in Process Explorer, Task Manager, etc. RAMMap will show you driver locked memory used by a process.
To view the amount of memory in use by a VM, you need to ensure that you have the Working Set column visible in your Task Manager. Often only the Private Set is visible.
To enable this column:
1) Start Task Manager
2) Go to Processes tab
3) View > Select Columns
4) Ensure that "Memory - Working Set" is ticked
For example, the Private Set of the VM I have running at the moment is 43mb, whereas the Working Set is 2.3Gb
Any hosted virtualization system like the ones you listed will include a device driver which runs within the host OS's kernel. This is necessary as user-mode programs can't issue the instructions necessary to create a virtual machine.
The reason that you don't see the memory in task manager is that you're looking at memory for the user-mode programs associated with the virtual machines, and not the kernel-mode device driver which actually allocated the memory for the VMs.