Creating the Virtual Machine

We will now create the virtual machine. We use the “virsh create command”. For the complete file we use refer to An XML File.

It is important to note that in the XML file we specify the socket path that is used to connect to FD.io VPP.

This is done with a section that looks like this

<interface type='vhostuser'>
  <mac address='52:54:00:4c:47:f2'/>
  <source type='unix' path='/tmp//vm00.sock' mode='server'/>
  <driver rx_queue_size='1024' tx_queue_size='1024'/>
  <model type='virtio'/>
  <alias name='net1'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</interface>

Notice the interface type and the path to the socket.

Now we create the VM. The virsh list command shows the VMs that have been created. We start with no VMs.

$ virsh list
Id    Name                           State
----------------------------------------------------

Create the VM with the virsh create command specifying our xml file.

$ virsh create ./iperf3-vm.xml
Domain iperf-server3 created from ./iperf3-vm.xml

$ virsh list
Id    Name                           State
----------------------------------------------------
65    iperf-server3                  running

The VM is now created.

Note

After a VM is created an xml file can created with “virsh dumpxml”.

$ virsh dumpxml iperf-server3
<domain type='kvm' id='65'>
  <name>iperf-server3</name>
  <uuid>e23d37c1-10c3-4a6e-ae99-f315a4165641</uuid>
  <memory unit='KiB'>262144</memory>
.....

Once the virtual machine is created notice the socket filename shows Success and there are Memory Regions. At this point the VM and FD.io VPP are connected. Also notice qsz 1024. A queue size of 256 will affect vhost throughput. The qsz should be 1024. In QEMU 2.10.0 and libvirt 3.7.0 and later versions this is specified in the xml file with the line <driver rx_queue_size=’1024’ tx_queue_size=’1024’/> shown above and in the example.

vpp# show vhost
Virtio vhost-user interfaces
Global:
  coalesce frames 32 time 1e-3
  number of rx virtqueues in interrupt mode: 0
Interface: VirtualEthernet0/0/0 (ifindex 3)
virtio_net_hdr_sz 12
 features mask (0xffffffffffffffff):
 features (0x58208000):
   VIRTIO_NET_F_MRG_RXBUF (15)
   VIRTIO_NET_F_GUEST_ANNOUNCE (21)
   VIRTIO_F_ANY_LAYOUT (27)
   VIRTIO_F_INDIRECT_DESC (28)
   VHOST_USER_F_PROTOCOL_FEATURES (30)
  protocol features (0x3)
   VHOST_USER_PROTOCOL_F_MQ (0)
   VHOST_USER_PROTOCOL_F_LOG_SHMFD (1)

 socket filename /tmp/vm00.sock type client errno "Success"

 rx placement:
   thread 1 on vring 1, polling
 tx placement: spin-lock
   thread 0 on vring 0
   thread 1 on vring 0

 Memory regions (total 2)
 region fd    guest_phys_addr    memory_size        userspace_addr     mmap_offset        mmap_addr
 ====== ===== ================== ================== ================== ================== ===============    ===
  0     31    0x0000000000000000 0x00000000000a0000 0x00007f1db9c00000 0x0000000000000000 0x00007f7db0400    000
  1     32    0x00000000000c0000 0x000000000ff40000 0x00007f1db9cc0000 0x00000000000c0000 0x00007f7d94ec0    000

 Virtqueue 0 (TX)
  qsz 1024 last_avail_idx 0 last_used_idx 0
  avail.flags 0 avail.idx 256 used.flags 1 used.idx 0
  kickfd 33 callfd 34 errfd -1

 Virtqueue 1 (RX)
  qsz 1024 last_avail_idx 8 last_used_idx 8
  avail.flags 0 avail.idx 8 used.flags 1 used.idx 8
  kickfd 29 callfd 35 errfd -1