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.