qemu-kvm 测试不同的网络设备(virtio-net-pci/e1000/e1000e/rtl8139)

本文介绍了qemu-kvm中不同网络设备的性能差异,包括virtio-net-pci、e1000、e1000e和rtl8139。重点对比了它们的速度,如rtl8139支持10/100Mb/s,e1000支持1Gb/s,而virtio-net-pci可达10Gb/s。推荐在KVM环境中优先使用半虚拟化的virtio_net设备,以获得接近非虚拟化的网络性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

几种网卡的简要说明

“rtl8139”这个网卡模式是qemu-kvm默认的模拟网卡类型,RTL8139是Realtek半导体公司的一个10/100M网卡系列,是曾经非常流行(当然现在看来有点古老)且兼容性好的网卡,几乎所有的现代操作系统都对RTL8139网卡驱动的提供支持。

“e1000”系列提供Intel e1000系列的网卡模拟,纯的QEMU(非qemu-kvm)默认就是提供Intel e1000系列的虚拟网卡。

“virtio” 类型是qemu-kvm对半虚拟化IO(virtio)驱动的支持。

这三个网卡的最大区别(此处指最需要关注的地方)是速度:

rtl8139 10/100Mb/s

e1000 1Gb/s

virtio 10Gb/s

 

在选择KVM中的网络设备时,一般来说应优先选择半虚拟化的网络设备,而不是纯软件模拟的设备。使用 virtio_net 半虚拟化驱动可以提高网络吞吐量(thoughput)和降低网络延迟(latency),从而让客户机中网络达到几乎和非虚拟化系统中使用原生网卡的网络差不多的性能。

[root@localhost ~]# cat /etc/qemu-ifup
#!/bin/bash
switch=virbr0
ifconfig $1 up
brctl addif $switch $1
[root@localhost ~]#
[root@localhost ~]# /usr/libexec/qemu-kvm -net nic,model=?
qemu: Supported NIC models: e1000,e1000-82540em,e1000e,rtl8139,virtio-net-pci
[root@localhost ~]# 
[root@localhost ~]# ifconfig virbr0
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 2a:b1:8c:22:5c:d1  txqueuelen 1000  (Ethernet)
        RX packets 1334676  bytes 9542298905 (8.8 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1380810  bytes 15960526372 (14.8 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.2ab18c225cd1	yes		virbr0-nic
							
							
[root@localhost ~]# 
[root@localhost ~]# service libvirtd status
Redirecting to /bin/systemctl status libvirtd.service
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since 五 2020-11-06 04:16:26 EST; 2 months 1 days ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 1014 (libvirtd)
    Tasks: 19 (limit: 32768)
   CGroup: /system.slice/libvirtd.service
           ├─1014 /usr/sbin/libvirtd
           ├─1351 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
           └─1352 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper

1月 07 07:38:30 localhost.localdomain dnsmasq-dhcp[1351]: DHCPREQUEST(virbr0) 192.168.122.6 9a:17:77:e4:90:03
1月 07 07:38:30 localhost.localdomain dnsmasq-dhcp[1351]: DHCPNAK(virbr0) 192.168.122.6 9a:17:77:e4:90:03 address in use
1月 07 07:38:33 localhost.localdomain dnsmasq-dhcp[1351]: DHCPDISCOVER(virbr0) 9a:17:77:e4:90:03
1月 07 07:38:33 localhost.localdomain dnsmasq-dhcp[1351]: DHCPOFFER(virbr0) 192.168.122.7 9a:17:77:e4:90:03
1月 07 07:38:33 localhost.localdomain dnsmasq-dhcp[1351]: DHCPREQUEST(virbr0) 192.168.122.7 9a:17:77:e4:90:03
1月 07 07:38:33 localhost.localdomain dnsmasq-dhcp[1351]: DHCPACK(virbr0) 192.168.122.7 9a:17:77:e4:90:03 atest-guest
[root@localhost ~]# 

基于avocado/avocado-vt 测试工具。

测试所用的qcow2文件——jeos-27-x86_64.qcow2,就是avocado的qcow

 

virtio-net-pci

/usr/libexec/qemu-kvm \
    -name 'avocado-vt-vm1' \
    -machine pc  \
    -nodefaults \
    -device VGA,bus=pci.0,addr=0x2 \
    -m 1024  \
    -smp 2,maxcpus=2,cores=1,threads=1,sockets=2  \
    -cpu 'Skylake-Server' \
    -device pvpanic,ioport=0x505,id=idYFvNIW \
    -device virtio-scsi-pci,id=virtio_scsi_pci0,bus=pci.0,addr=0x3 \
    -blockdev node-name=file_image1,driver=file,filename=/var/lib/avocado/data/avocado-vt/images/jeos-27-x86_64.qcow2 \
    -blockdev node-name=drive_image1,driver=qcow2,file=file_image1 \
    -device scsi-hd,id=image1,drive=drive_image1 \
    -device virtio-net-pci,mac=9a:17:77:e4:90:03,id=idDRONps,netdev=id1N5jLZ,bus=pci.0,addr=0x4  \
    -netdev tap,id=id1N5jLZ,script=/etc/qemu-ifup  \
    -vnc :0  \
    -rtc base=utc,clock=host  \
    -boot menu=off,strict=off,order=cdn,once=c \
    -enable-kvm \
    -d int -serial stdio

[    0.000000] random: get_random_bytes called from start_kernel+0x42/0x4e6 with crng_init=0
[    0.000000] Linux version 4.13.9-300.fc27.x86_64 (mockbuild@bkernel01.phx2.fedoraproject.org) (gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC)) #1 SMP Mon Oct 23 13:41:58 UTC 2017
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.13.9-300.fc27.x86_64 root=UUID=ba419b80-2653-4f9b-af33-4966d1045fe6 ro console=tty0 console=ttyS0,115200 console=ttyS0
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x020: 'AVX-512 opmask'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x040: 'AVX-512 Hi256'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x080: 'AVX-512 ZMM_Hi256'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: xstate_offset[3]:  960, xstate_sizes[3]:   64
[    0.000000] x86/fpu: xstate_offset[4]: 1024, xstate_sizes[4]:   64
[    0.000000] x86/fpu: xstate_offset[5]: 1088, xstate_sizes[5]:   64
[    0.000000] x86/fpu: xstate_offset[6]: 1152, xstate_sizes[6]:  512
[    0.000000] x86/fpu: xstate_offset[7]: 1664, xstate_sizes[7]: 1024
[    0.000000] x86/fpu: Enabled xstate features 0xff, context size is 2688 bytes, using 'standard' format.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003ffddfff] usable
[    0.000000] BIOS-e820: [mem 0x000000003ffde000-0x000000003fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] random: fast init done
[    0.000000] SMBIOS 2.8 present.
[    0.000000] DMI: Red Hat KVM, BIOS 1.11.0-2.el7 04/01/2014
[    0.000000] Hypervisor detected: KVM
[    0.000000] tsc: Fast TSC calibration failed
[    0.000000] tsc: Unable to calibrate against PIT
[    0.000000] tsc: No reference (HPET/PMTIMER) available
[    0.000000] e820: last_pfn = 0x3ffde max_arch_pfn = 0x400000000
[    0.000000] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WC  UC- WT  
[    0.000000] found SMP MP-table at [mem 0x000f63a0-0x000f63af] mapped at [ffff8b0c000f63a0]
[    0.000000] Using GB pages for direct mapping
[    0.000000] RAMDISK: [mem 0x36749000-0x3739cfff]
[    0.000000] ACPI: Early table checksum verification disabled
[    0.000000] ACPI: RSDP 0x00000000000F6130 000014 (v00 BOCHS )
[    0.000000] ACPI: RSDT 0x000000003FFE15C8 00002C (v01 BOCHS  BXPCRSDT 00000001 BXPC 00000001)
[    0.000000] ACPI: FACP 0x000000003FFE14D4 000074 (v01 BOCHS  BXPCFACP 00000001 BXPC 00000001)
[    0.000000] ACPI: DSDT 0x000000003FFE0040 001494 (v01 BOCHS  BXPCDSDT 00000001 BXPC 00000001)
[    0.000000] ACPI: FACS 0x000000003FFE0000 000040
[    0.000000] ACPI: APIC 0x000000003FFE1548 000080 (v01 BOCHS  BXPCAPIC 00000001 BXPC 00000001)
[    0.000000] No NUMA configuration found
[    0.000000] Faking a node at [mem 0x0000000000000000-0x000000003ffddfff]
[    0.000000] NODE_DATA(0) allocated [mem 0x3ffb3000-0x3ffddfff]
[    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00
[    0.000000] kvm-clock: cpu 0, msr 0:3ff33001, primary cpu clock
[    0.000000] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.000000]   DMA32    [mem 0x0000000001000000-0x000000003ffddfff]
[    0.000000]   Normal   empty
[    0.000000]   Device   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000001000-0x000000000009efff]
[    0.000000]   node   0: [mem 0x0000000000100000-0x000000003ffddfff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x000000003ffddfff]
[    0.000000] ACPI: PM-Timer IO Port: 0x608
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])
[    0.000000] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)
[    0.000000] Using ACPI (MADT) for SMP configuration information
[    0.000000] smpboot: Allowing 2 CPUs, 0 hotplug CPUs
[    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000effff]
[    0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
[    0.000000] e820: [mem 0x40000000-0xfeffbfff] available for PCI devices
[    0.000000] Booting paravirtualized kernel on KVM
[    0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1910969940391419 ns
[    0.000000] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:2 nr_cpu_ids:2 nr_node_ids:1
[    0.000000] percpu: Embedded 37 pages/cpu @ffff8b0c3fc00000 s112600 r8192 d30760 u1048576
[    0.000000] KVM 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值