Re vkernel and all
Matthew Dillon
dillon at apollo.backplane.com
Tue Jan 23 15:42:36 PST 2007
:A few (dumb) questions, just out of curiosity ...
:
:When I start a qemu virtual machine with, say, 128 MB of
:RAM, then that memory is allocated to the qemu process in
:a normal way, i.e. it can also be paged to swap.
:
:If I understand you correctly, then DF's virtual kernels
:work differently: they delegate the allocations to the
:real kernel. Right? I guess that means that the memory
:of user processes running in the vkernel can be paged to
:swap, while the pages of the vkernel (its virtual KVM,
:so to speak) are locked to physical RAM, just like the
:real kernel. Is that correct?
The virtual kernel's 'memory' is just file-backed memory
from the point of view of the real kernel. The virtual kernel
accesses it via mmap(). This means the real kernel is free
to page-out the virtual kernel's 'memory'.
But it isn't a good idea to overallocate your memory, because
the virtual kernel *WILL* try to use all the memory you tell it
has to use.
:What about the cache (VM cache, buffer cache, whatever).
:During normal operation, a kernel tends to use almost all
:free RAM for the cache, i.e. there is almost zero free
:RAM. Do the virtual kernels behave the same? Do they
:even have their own caches?
Virtual kernels behave exactly the same. They do have their
own caches... their own VM page cache, buffer cache, etc.
You can even give a virtual kernel its own swap space (from
the point of the virtual kernel).
A virtual kernel *IS* a real kernel for all intents and
purposes, just one that happens to run as a self contained
user process.
In tests I can easily thrash a virtual kernel by running a
large parallel buildworld inside the virtual kernel, and yet
not thrash the real kernel the virtual kernel is running
under. It's a weird sight to see but it is one of the cooler
features... total control over resources. We could even
easily add features to the virtual kernel's drivers to
control disk and network bandwidth.
:I guess what I'm really trying to ask is this: If I
:start 4 vkernels, each with 256 MB RAM, will they
:use 1 GB of real memory, even if only a few small
:processes run inside them?
Pretty much yes. This is primarily going to be due to the
VM page cache. It works the same in the virtual kernel as it
does in a real kernel.
Is it possible to make the virtual kernel free backing store
and be more friendly to the real kernel? Yes, it is, but some
work would have to be done to get the expected results:
* VM system would have to be told to be more aggressive at freeing
pages.
* We would have to add a new mcontrol() feature that allows the
virtual kernel to tell the real kernel what pages can be freed,
aka MADV_FREE (MADV_FREE doesn't work on MAP_VPAGETABLE
mmap()'s because their is no way to specify the physical offset).
Then when the virtual kernel does a vm_page_free() it could
use the new call to tell the real kernel to throw away the
contents as well.
:Unfortunately I currently don't have a spare machine to
:install -preview and play with vkernels myself. :-(
:
:Best regards
: Oliver
-Matt
Matthew Dillon
<dillon at backplane.com>
More information about the Kernel
mailing list