gir 发表于 2016-1-8 12:22:18

KVM虚拟机网络设备性能测试

  摘要:虚拟机可以生成数种虚拟的网络设备类型,比如常见的e1000,rtl8139,纯粹虚拟化的virtio等。在加载不同的网络设备情况下,虚拟机的通讯效率如何呢?本文就是具体的测试过程和结果的记录。
  
  简介
  KVM虚拟机可以生成数种虚拟的网络设备类型,比如常见的e1000,rtl8139,纯粹虚拟化的virtio,兼容老式网卡的ne2k_pci,pcnet等。本文测试单台虚拟机在加载不同的网络设备情况下,虚拟机对外服务的通讯效率。
  测试方法
  网络通讯是一个复杂的过程,都很多外部因素影响。因此本此测试构造一个单纯的测试环境,把外部因素的影响尽量降低到最低,用简单的方法,单纯地测试虚拟网络设备的通讯效率,而且主要记录服务带宽(吞吐量)数据,其他如时延,差错等都不做考虑。
  测 试的具体方法是构造一个封闭的100M网络,两台物理主机,其中一台作为宿主机P1并安装运行一台虚拟机V,另一台作为客户机P2,运行 scp命令,用ssh的方法从主机V拷贝一个500M文件到自身硬盘。scp命令会汇总报告远程拷贝的速度,以此作为吞吐量数据记录。每次虚拟机需要关机并通过virt-manager修改虚拟网卡的类型,然后重新启动,验证虚拟网卡正确加载,scp,重复这个过程至几种主要的kvm支持的虚拟网卡类型都被测试。
  测试步骤:
  1、修改虚拟网卡类型。
  2、启动虚拟机V。
  3、登录V的控制台,分别用命令
# lspci | grep Ethernet
# ethtool -i eth0
# dmesg | grep eth0
  验证虚拟网卡是否正常加载;
  4、登录P2控制台,运行scp,从V拷贝一个500M文件到P2。
  5、记录scp报告的吞吐量数据。
  6、关闭V,重复上面过程。
  测试环境
  


  网络:如图,封闭的100M网络(很想用,也应该用千兆网络来测试,但条件不具备),网段为10.0.112.0/24,主机P1采用桥接模式配置IP地址。
  表1 主机P1(宿主机)配置
  CPU
  Pentium(R) Dual-Core CPU E5800 @ 3.20GHz
  Memory
  2G
  NIC
  Marvell 88E8057 PCI-E Gigabit Ethernet Controller 百兆网卡
  IP
  10.0.112.39
  OS
  CentOS6.2 x86
  表2 主机P2配置
  CPU
  Pentium(R) Dual-Core CPU E5800 @ 3.20GHz
  Memory
  2G
  NIC
  Marvell 88E8057 PCI-E Gigabit Ethernet Controller 百兆网卡
  IP
  10.0.112.38
  OS
  CentOS6.2 x86
  表3 主机V(虚拟机)配置
  CPU
  QEMU Virtual CPU version (cpu64-rhel6)
  Memory
  512M
  NIC
  根据测试变化
  IP
  10.0.112.160
  OS
  CentOS6.0 i386
  测试结果
  表4 不同的虚拟网卡的测试速度

  虚拟网卡类型
  传输速度
  网络状态
  virtio
  10.9-11.2MB/s
  稳定
  e1000
  10.8-11.2MB/s
  稳定
  rtl8139
  10.8-11.2MB/s
  稳定
  ne2k_pci
  6.5-6.7MB/s
  稳定
  pcinet
  9.1MB/s
  不稳定,85%虚拟机网卡崩溃
  VirtIO paravirtual 是 Linux 虚拟机平台上统一的虚拟 IO 接口驱动。通常主机为了让客户机像在真实环境中一样运行,需要为客户机创建各式各样的虚拟设备,如磁盘,网卡,显卡,时钟,USB 等。这些虚拟设备大大降低了客户机的性能。如果客户机不关注这些硬件设备,就可以用统一的虚拟设备代替他们,这样可以大大提高虚拟机的性能。这个统一的标准化接口在 Linux 上就是 VirtIO 。需要注意的是 VirtIO 运行在 kernel 2.6.24 以上的版本中才能发挥它的性能优势。另外KVM 项目组也发布了 Windows 平台上的 VirtIO 驱动,这样 windows 客户机的网络性能也可以大大提高了。
  Virtio/e1000/rtl8139 都达到了100M网络的理论最大值。

  附:虚拟网卡设备验证记录
  =====虚拟机网卡:virtio
# lspci | grep Ethernet
00:03.0 Ethernet controller: Red Hat, Inc Virtio network device

# ethtool -i eth0
Cannot get driver information: Operation not supported

# dmesg | grep eth0
eth0: no IPv6 routers present

=====虚拟机网卡:e1000
# lspci | grep Ethernet
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit EthernetController (rev 03)

#ethtool -i eth0
driver: e1000
version: 7.3.21-k6-NAPI
firmware-version: N/A
bus-info: 0000:00:03.0

# dmesg | grep eth0
e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
eth0: no IPv6 routers present

=====虚拟机网卡:rtl8139
# lspci | grep Ethernet
00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 20)

#ethtool -i eth0
driver: 8139cp
version: 1.3
firmware-version:
bus-info: 0000:00:03.0

# dmesg | grep eth0
eth0: RTL-8139C+ at0xe1134000, 52:54:00:4f:1b:07, IRQ11
eth0: link up, 100Mbps, full-duplex, lpa 0x05E1
eth0: no IPv6 routers present

=====虚拟机网卡:ne2k_pci
# lspci | grep Ethernet
00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)

# ethtool -i eth0
driver: ne2k-pci
version: 1.03
firmware-version:
bus-info: 0000:00:03.0

#dmesg | grep eth0
eth0: RealTek RTL-8029 found at 0xc100, IRQ 11, 52:54:00:4f:1b:07.
eth0: no IPv6 routers present

=====虚拟机网卡:pcnet
# lspci | grep Ethernet
00:03.0 Ethernet controller: Advanced Micro Devices 79c970 (rev 10)

#ethtool -i eth0
driver: pcnet32
version: 1.35
firmware-version:
bus-info: 0000:00:03.0

# dmesg | grep eth0
eth0: registered as PCnet/PCI II 79C970A
eth0: link up
eth0: no IPv6 routers present
页: [1]
查看完整版本: KVM虚拟机网络设备性能测试