`

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 [AMD] 79c970 [PCnet32 LANCE] (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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics