Chapter 5. KVM Paravirtualized (virtio) Drivers
Paravirtualized drivers enhance the performance of guests, decreasing guest I/O latency and increasing throughput almost to bare-metal levels. It is recommended to use the paravirtualized drivers for fully virtualized guests running I/O-heavy tasks and applications.
Virtio drivers are KVM's paravirtualized device drivers, available for guest virtual machines running on KVM hosts. These drivers are included in the
virtio
package. The virtio package supports block (storage) devices and network interface controllers.
Note
PCI devices are limited by the virtualized system architecture. See Chapter 16, Guest Virtual Machine Device Configuration for additional limitations when using assigned devices.
5.1. Using KVM virtio Drivers for Existing Storage Devices
You can modify an existing hard disk device attached to the guest to use the
virtio
driver instead of the virtualized IDE driver. The example shown in this section edits libvirt configuration files. Note that the guest virtual machine does not need to be shut down to perform these steps, however the change will not be applied until the guest is completely shut down and rebooted.
Procedure 5.1. Using KVM virtio drivers for existing devices
- Ensure that you have installed the appropriate driver (
viostor
), before continuing with this procedure. - Run the
virsh edit guestname
command as root to edit the XML configuration file for your device. For example,virsh edit guest1
. The configuration files are located in the/etc/libvirt/qemu/
directory. - Below is a file-based block device using the virtualized IDE driver. This is a typical entry for a virtual machine not using the virtio drivers.
<disk type='file' device='disk'> ... <source file='/var/lib/libvirt/images/disk1.img'/> <target dev='hda' bus='ide'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk>
- Change the entry to use the virtio device by modifying the bus= entry to
virtio
. Note that if the disk was previously IDE, it has a target similar tohda
,hdb
, orhdc
. When changing to bus=virtio the target needs to be changed tovda
,vdb
, orvdc
accordingly.<disk type='file' device='disk'> ... <source file='/var/lib/libvirt/images/disk1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk>
- Remove the address tag inside the disk tags. This must be done for this procedure to work. Libvirt will regenerate the address tag appropriately the next time the virtual machine is started.
Alternatively,
virt-manager
, virsh attach-disk
or virsh attach-interface
can add a new device using the virtio drivers.
See the libvirt website for more details on using Virtio: http://www.linux-kvm.org/page/Virtio