几种网卡的简要说明
“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