您的位置:首页 > 理论基础 > 计算机网络

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

2012-05-31 13:59 381 查看
摘要:虚拟机可以生成数种虚拟的网络设备类型,比如常见的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: