36.13. KVM networking performance
By default, KVM virtual machines are assigned a virtual Realtek 8139 (rtl8139) NIC (network interface controller).
The rtl8139 virtualized NIC works fine in most environments. However, this device can suffer from performance degradation problems on some networks, for example, a 10 Gigabit Ethernet network.
A workaround is to switch to a different type of virtualized NIC. For example, Intel PRO/1000 (e1000) or virtio (the para-virtualized network driver).
To switch to the e1000 driver:
- Shutdown the guest operating system.
- Edit the guest's configuration file with the
virsh
command (whereGUEST
is the guest's name):virsh edit GUEST
Copy to clipboardCopied# virsh edit GUEST
Thevirsh edit
command uses the$EDITOR
shell variable to determine which editor to use. - Find the network interface section of the configuration. This section resembles the snippet below:
<interface type='network'> [output truncated] <model type='rtl8139' /> </interface>
Copy to clipboardCopied<interface type='network'> [output truncated] <model type='rtl8139' /> </interface>
- Change the type attribute of the model element from
'rtl8139'
to'e1000'
. This will change the driver from the rtl8139 driver to the e1000 driver.<interface type='network'> [output truncated] <model type='e1000' /> </interface>
Copy to clipboardCopied<interface type='network'> [output truncated] <model type='e1000' /> </interface>
- Save the changes and exit the text editor
- Restart the guest operating system.
Alternatively, you can install new guests with a different network driver. This may be required if you are having difficulty installing guests over a network connection. This method requires you to have at least one virtual machine already created (possibly installed from CD or DVD) to use as a template.
- Create an XML template from an existing virtual machine:
virsh dumpxml GUEST > /tmp/guest.xml
Copy to clipboardCopied# virsh dumpxml GUEST > /tmp/guest.xml
- Copy and edit the XML file and update the unique fields: virtual machine name, UUID, disk image, MAC address, and any other unique parameters. Note that you can delete the UUID and MAC address lines and virsh will generate a UUID and MAC address.
cp /tmp/guest.xml /tmp/new-guest.xml vi /tmp/new-guest.xml
Copy to clipboardCopied# cp /tmp/guest.xml /tmp/new-guest.xml # vi /tmp/new-guest.xml
Add the model line in the network interface section:<interface type='network'> [output truncated] <model type='e1000' /> </interface>
Copy to clipboardCopied<interface type='network'> [output truncated] <model type='e1000' /> </interface>
- Create the new virtual machine:
virsh define /tmp/new-guest.xml virsh start new-guest
Copy to clipboardCopied# virsh define /tmp/new-guest.xml # virsh start new-guest
The network performance should be better with the e1000 or virtio driver. (BZ#517181)