On Thu, Feb 11, 2016 at 01:28:47PM +0300, Pavel Fedin wrote:
Hello!
vhost-user has a small limitation: guest memory must be shared. However, this simple
requirement is satisfied by Libvirt only in
very complicated case:
1. We have to specify NUMA configuration, because we can have "shared"
attribute only for node descriptors inside "NUMA" section.
2. We have to specify huge page size, because memory-backend-file is used only in this
case.
Isn't it a problem? In order to do a simple thing (use vhost-user) we have to add
two more quote unobvious things, making the whole
stuff significantly more complicated. This creates even more problems on the level above,
for example in order to get OpenStack
working with userspace networking, we have to edit all flavors and rebuild all instances.
And no single documentation mentions it.
Shouldn't Libvirt simply detect usage of vhost-user, and build some minimal
configuration with shared memory? For example, it could
be memory-backend-file on /dev/mem.
If the community agrees that it's a good idea, improving the usability, i can
propose patches.
Historically QEMU had a pointless check on the path passed in, to enforce
that it was only hugetlbfs, so could not just pass in a regular tmpfs
file. I think we removed that in QEMU 2.5. I think it is a valid enhance
<memoryBacking> to allow specification of "shared" memory backing which
would be mapping to a regular tmpfs.
I don't think we should magically do anything based on existance of
vhost-user though - changes in way the guest memory is allocated should
always require explicit user configuration.
We could however report an error VIR_ERR_CONFIG_UNSUPPORTED if the user
provided a vhost-user device and forgot to request shared memory, given
that its an unusable combination.
Regards,
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|