Multiqueue virtio-net for higher throughput


I am running a virtual pfSense router in OpenNebula. However, I only manage to get ~700mbit throughput from a guest, through virtualized pfSense, to the host. The pfSense machine is 100% busy on a single core. In order to optimize throughput I want to make use of multi-queue virtio-net as described here:

In the OpenNebula documentation on KVM driver, only scsi queues are discussed. Is there any way to get multiqueue networking under OpenNebula? Or, if not natively supported, is there any way I can add a custom parameter for the qemu command line for each network adapter?

Thanks a lot,


Hi Wouter,

AFAIK There is a feature request in the backlog that will allow altering the VM XML.

Currently I am using modified vm_mad scripts which alter the VM’s XML file before passing it to the virsh.

Best Regards,
Anton Todorov

Oh that’s great, thank you for your reply. Can you give me a pointer / short example on how to alter the xml file? I have only started using OpenNebula two weeks ago and while I’m getting there, it would save me a lot of effort in piecing the parts together.

There are two files in the VM_MAD that are related to your case

  • /var/lib/one/remotes/vm/kvm/deploy - used when a VM is deployed on a HV. Here you should alter the domain XML file after it is created but before it is passed to virsh (currently at line 26 between cat >$domain and data=`virsh… Here is an example script that I’ve used to test the virtio-blk data plane on earlier version of qemu-kvm. In short - inject the needed XML configuration in the right place :slight_smile:
  • /var/lib/one/remotes/vm/kvm/attach_nic - here the XML is built in a variable name $DEVICE where you should find a good spot to add the needed XML piece.

Please note that the mentioned files are the “master” ones. After altering them you should sync them to the hosts as oneadmin user(the default place is /var/tmp/one ):

 su - oneadmin -c "onehost sync --force"

Hope this helps,

Anton Todorov