Hi
I work mostly in OpenStack on enabling ovs with dpdk.
When deploying vms on host running ovs with dpdk vms are booted utilizing
Vhost-user interfaces.
Qemu support creating vms with vhost-user network interfaces as of v2.1.
Libvirt currently has support for requesting the use of vhost-user interfaces by added the
following xml fragment
<interface type='vhostuser'>
<mac address='fa:16:3e:ea:2a:08'/>
<source type='unix' path='/var/run/openvswitch/vhuf1204e0c-98'
mode='client'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
</interface>
Send traffic via a vhost-user interface, the vhost-user frontend (provided by qemu) must
share
the virtios ring to the vhost-backed via passing a file descript to the memory backing
object
of the qemu instance as part of the port creation.
Today the only native way to request Libvirt to create a vm who's memory is backed by
a memdev which can be
Accessed via a file descriptor is to request hugepage backed memory. This requires the
operator to
Manage and configure hugepage on each of their compute hosts and take special care to
ensure that vms are
Not placed on host were vhost-user interface are used if they do not request hugepages.
Today it is possible to use Libvirt to spawn a vm without hugepage memory and a file
descriptor backed memdev
Via the use of the qemu:commandline element.
<qemu:commandline>
<qemu:arg value='-object'/>
<qemu:arg
value='memory-backend-file,id=mem,size=1024M,mem-path=/var/lib/libvirt/qemu,share=on'/>
<qemu:arg value='-numa'/>
<qemu:arg value='node,memdev=mem'/>
<qemu:arg value='-mem-prealloc'/>
</qemu:commandline>
I created a proof of concept patch to nova to demonstrate that this works however to
support this usecase in
Nova a new xml element is required.
https://review.openstack.org/#/c/309565/1
I would like to propose the introduction of a new subelemnt to the memorybacking element
to request file discrptro backed memory
<memoryBacking>
<filedescriptor size_mb="1024" path="/var/lib/libvirt/qemu"
prealloc="true" shared="on" />
</memoryBacking>
The above filedescriptor xml fragment above would then be parsed to generate the same
qemu argument as the qemu:commandline fragment
Therefor allowing the creation of a vm with vhost-user interface without hugepage memory
backing.
Before I start looking at the Libvirt code base I wanted to ask if the Libvirt community
would be open to this change and what would be the best way
To approach enabling this feature.
Regards
Sean.