This patch introduces emulation for the Intel 82574 adapter, AKA e1000e. This implementation is derived from the e1000 emulation code, and utilizes the TX/RX packet abstractions that were initially developed for the vmxnet3 device. Although some parts of the introduced code may be shared with e1000, the differences are substantial enough so that the only shared resources for the two devices are the definitions in hw/net/e1000_regs.h. Similarly to vmxnet3, the new device uses virtio headers for task offloads (for backends that support virtio extensions). Usage of virtio headers may be forcibly disabled via a boolean device property "vnet" (which is enabled by default). In such case task offloads will be performed in software, in the same way it is done on backends that do not support virtio headers. The device code is split into two parts: 1. hw/net/e1000e.c: QEMU-specific code for a network device; 2. hw/net/e1000e_core.[hc]: Device emulation according to the spec. The new device name is e1000e. Intel specifications for the 82574 controller are available at: http://www.intel.com/content/dam/doc/datasheet/82574l-gbe-controller-datasheet.pdf Throughput measurement results (iperf2): Fedora 22 guest, TCP, RX 4 ++------------------------------------------+ | | | X X X X X 3.5 ++ X X X X | | X | | | 3 ++ | G | X | b | | / 2.5 ++ | s | | | | 2 ++ | | | | | 1.5 X+ | | | + + + + + + + + + + + + 1 ++--+---+---+---+---+---+---+---+---+---+---+ 32 64 128 256 512 1 2 4 8 16 32 64 B B B B B KB KB KB KB KB KB KB Buffer size Fedora 22 guest, TCP, TX 18 ++-------------------------------------------+ | X | 16 ++ X X X X X | X | 14 ++ | | | 12 ++ | G | X | b 10 ++ | / | | s 8 ++ | | | 6 ++ X | | | 4 ++ | | X | 2 ++ X | X + + + + + + + + + + + 0 ++--+---+---+---+---+----+---+---+---+---+---+ 32 64 128 256 512 1 2 4 8 16 32 64 B B B B B KB KB KB KB KB KB KB Buffer size Fedora 22 guest, UDP, RX 3 ++------------------------------------------+ | X | | 2.5 ++ | | | | | 2 ++ X | G | | b | | / 1.5 ++ | s | X | | | 1 ++ | | | | X | 0.5 ++ | | X | X + + + + + 0 ++-------+--------+-------+--------+--------+ 32 64 128 256 512 1 B B B B B KB Datagram size Fedora 22 guest, UDP, TX 1 ++------------------------------------------+ | X 0.9 ++ | | | 0.8 ++ | 0.7 ++ | | | G 0.6 ++ | b | | / 0.5 ++ | s | X | 0.4 ++ | | | 0.3 ++ | 0.2 ++ X | | | 0.1 ++ X | X X + + + + 0 ++-------+--------+-------+--------+--------+ 32 64 128 256 512 1 B B B B B KB Datagram size Windows 2012R2 guest, TCP, RX 3.2 ++------------------------------------------+ | X | 3 ++ | | | 2.8 ++ | | | 2.6 ++ X | G | X X X X X b 2.4 ++ X X | / | | s 2.2 ++ | | | 2 ++ | | X X | 1.8 ++ | | | 1.6 X+ | + + + + + + + + + + + + 1.4 ++--+---+---+---+---+---+---+---+---+---+---+ 32 64 128 256 512 1 2 4 8 16 32 64 B B B B B KB KB KB KB KB KB KB Buffer size Windows 2012R2 guest, TCP, TX 14 ++-------------------------------------------+ | | | X X 12 ++ | | | 10 ++ | | | G | | b 8 ++ | / | X | s 6 ++ | | | | | 4 ++ X | | | 2 ++ | | X X X | + X X + + X X + + + + + 0 X+--+---+---+---+---+----+---+---+---+---+---+ 32 64 128 256 512 1 2 4 8 16 32 64 B B B B B KB KB KB KB KB KB KB Buffer size Windows 2012R2 guest, UDP, RX 1.6 ++------------------------------------------X | | 1.4 ++ | | | 1.2 ++ | | X | | | G 1 ++ | b | | / 0.8 ++ | s | | 0.6 ++ X | | | 0.4 ++ | | X | | | 0.2 ++ X | X + + + + + 0 ++-------+--------+-------+--------+--------+ 32 64 128 256 512 1 B B B B B KB Datagram size Windows 2012R2 guest, UDP, TX 0.6 ++------------------------------------------+ | X | | 0.5 ++ | | | | | 0.4 ++ | G | | b | | / 0.3 ++ X | s | | | | 0.2 ++ | | | | X | 0.1 ++ | | X | X X + + + + 0 ++-------+--------+-------+--------+--------+ 32 64 128 256 512 1 B B B B B KB Datagram size Signed-off-by: Dmitry Fleytman <dmitry.fleytman@ravellosystems.com> Signed-off-by: Leonid Bloch <leonid.bloch@ravellosystems.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
45 lines
1.7 KiB
Makefile
45 lines
1.7 KiB
Makefile
common-obj-$(CONFIG_DP8393X) += dp8393x.o
|
|
common-obj-$(CONFIG_XEN_BACKEND) += xen_nic.o
|
|
|
|
# PCI network cards
|
|
common-obj-$(CONFIG_NE2000_PCI) += ne2000.o
|
|
common-obj-$(CONFIG_EEPRO100_PCI) += eepro100.o
|
|
common-obj-$(CONFIG_PCNET_PCI) += pcnet-pci.o
|
|
common-obj-$(CONFIG_PCNET_COMMON) += pcnet.o
|
|
common-obj-$(CONFIG_E1000_PCI) += e1000.o e1000x_common.o
|
|
common-obj-$(CONFIG_E1000E_PCI) += e1000e.o e1000e_core.o e1000x_common.o
|
|
common-obj-$(CONFIG_RTL8139_PCI) += rtl8139.o
|
|
common-obj-$(CONFIG_VMXNET3_PCI) += net_tx_pkt.o net_rx_pkt.o
|
|
common-obj-$(CONFIG_VMXNET3_PCI) += vmxnet3.o
|
|
|
|
common-obj-$(CONFIG_SMC91C111) += smc91c111.o
|
|
common-obj-$(CONFIG_LAN9118) += lan9118.o
|
|
common-obj-$(CONFIG_NE2000_ISA) += ne2000-isa.o
|
|
common-obj-$(CONFIG_OPENCORES_ETH) += opencores_eth.o
|
|
common-obj-$(CONFIG_XGMAC) += xgmac.o
|
|
common-obj-$(CONFIG_MIPSNET) += mipsnet.o
|
|
common-obj-$(CONFIG_XILINX_AXI) += xilinx_axienet.o
|
|
common-obj-$(CONFIG_ALLWINNER_EMAC) += allwinner_emac.o
|
|
common-obj-$(CONFIG_IMX_FEC) += imx_fec.o
|
|
|
|
common-obj-$(CONFIG_CADENCE) += cadence_gem.o
|
|
common-obj-$(CONFIG_STELLARIS_ENET) += stellaris_enet.o
|
|
common-obj-$(CONFIG_LANCE) += lance.o
|
|
|
|
obj-$(CONFIG_ETRAXFS) += etraxfs_eth.o
|
|
obj-$(CONFIG_COLDFIRE) += mcf_fec.o
|
|
obj-$(CONFIG_MILKYMIST) += milkymist-minimac2.o
|
|
obj-$(CONFIG_PSERIES) += spapr_llan.o
|
|
obj-$(CONFIG_XILINX_ETHLITE) += xilinx_ethlite.o
|
|
|
|
obj-$(CONFIG_VIRTIO) += virtio-net.o
|
|
obj-y += vhost_net.o
|
|
|
|
obj-$(CONFIG_ETSEC) += fsl_etsec/etsec.o fsl_etsec/registers.o \
|
|
fsl_etsec/rings.o fsl_etsec/miim.o
|
|
|
|
common-obj-$(CONFIG_ROCKER) += rocker/rocker.o rocker/rocker_fp.o \
|
|
rocker/rocker_desc.o rocker/rocker_world.o \
|
|
rocker/rocker_of_dpa.o
|
|
obj-$(call lnot,$(CONFIG_ROCKER)) += rocker/qmp-norocker.o
|