.. SPDX-License-Identifier: BSD-3-Clause Copyright(c) 2010-2014 Intel Corporation. Driver for VM Emulated Devices ============================== The DPDK EM poll mode driver supports the following emulated devices: * qemu-kvm emulated Intel® 82540EM Gigabit Ethernet Controller (qemu e1000 device) * VMware* emulated Intel® 82545EM Gigabit Ethernet Controller * VMware emulated Intel® 8274L Gigabit Ethernet Controller. Validated Hypervisors --------------------- The validated hypervisors are: * KVM (Kernel Virtual Machine) with Qemu, version 0.14.0 * KVM (Kernel Virtual Machine) with Qemu, version 0.15.1 * VMware ESXi 5.0, Update 1 Recommended Guest Operating System in Virtual Machine ----------------------------------------------------- The recommended guest operating system in a virtualized environment is: * Fedora* 18 (64-bit) For supported kernel versions, refer to the *DPDK Release Notes*. Setting Up a KVM Virtual Machine -------------------------------- The following describes a target environment: * Host Operating System: Fedora 14 * Hypervisor: KVM (Kernel Virtual Machine) with Qemu version, 0.14.0 * Guest Operating System: Fedora 14 * Linux Kernel Version: Refer to the DPDK Getting Started Guide * Target Applications: testpmd The setup procedure is as follows: #. Download qemu-kvm-0.14.0 from `http://sourceforge.net/projects/kvm/files/qemu-kvm/ `_ and install it in the Host OS using the following steps: When using a recent kernel (2.6.25+) with kvm modules included: .. code-block:: console tar xzf qemu-kvm-release.tar.gz cd qemu-kvm-release ./configure --prefix=/usr/local/kvm make sudo make install sudo /sbin/modprobe kvm-intel When using an older kernel or a kernel from a distribution without the kvm modules, you must download (from the same link), compile and install the modules yourself: .. code-block:: console tar xjf kvm-kmod-release.tar.bz2 cd kvm-kmod-release ./configure make sudo make install sudo /sbin/modprobe kvm-intel Note that qemu-kvm installs in the /usr/local/bin directory. For more details about KVM configuration and usage, please refer to: `http://www.linux-kvm.org/page/HOWTO1 `_. #. Create a Virtual Machine and install Fedora 14 on the Virtual Machine. This is referred to as the Guest Operating System (Guest OS). #. Start the Virtual Machine with at least one emulated e1000 device. .. note:: The Qemu provides several choices for the emulated network device backend. Most commonly used is a TAP networking backend that uses a TAP networking device in the host. For more information about Qemu supported networking backends and different options for configuring networking at Qemu, please refer to: — `http://www.linux-kvm.org/page/Networking `_ — `http://wiki.qemu.org/Documentation/Networking `_ — `http://qemu.weilnetz.de/qemu-doc.html `_ For example, to start a VM with two emulated e1000 devices, issue the following command: .. code-block:: console /usr/local/kvm/bin/qemu-system-x86_64 -cpu host -smp 4 -hda qemu1.raw -m 1024 -net nic,model=e1000,vlan=1,macaddr=DE:AD:1E:00:00:01 -net tap,vlan=1,ifname=tapvm01,script=no,downscript=no -net nic,model=e1000,vlan=2,macaddr=DE:AD:1E:00:00:02 -net tap,vlan=2,ifname=tapvm02,script=no,downscript=no where: — -m = memory to assign — -smp = number of smp cores — -hda = virtual disk image This command starts a new virtual machine with two emulated 82540EM devices, backed up with two TAP networking host interfaces, tapvm01 and tapvm02. .. code-block:: console # ip tuntap show tapvm01: tap tapvm02: tap #. Configure your TAP networking interfaces using ip/ifconfig tools. #. Log in to the guest OS and check that the expected emulated devices exist: .. code-block:: console # lspci -d 8086:100e 00:04.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03) 00:05.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03) #. Install the DPDK and run testpmd. Known Limitations of Emulated Devices ------------------------------------- The following are known limitations: #. The Qemu e1000 RX path does not support multiple descriptors/buffers per packet. Therefore, rte_mbuf should be big enough to hold the whole packet. For example, to allow testpmd to receive jumbo frames, use the following: dpdk-testpmd [options] -- --mbuf-size= #. Qemu e1000 does not validate the checksum of incoming packets. #. Qemu e1000 only supports one interrupt source, so link and Rx interrupt should be exclusive. #. Qemu e1000 does not support interrupt auto-clear, application should disable interrupt immediately when woken up.