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

發佈了67 篇原創文章 · 獲贊 26 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章