KVM 虚拟机在 IBM System x 上应用(3)

来源:developerWorks 中国 作者:郭 晋兵
  

在 xWindow 中运行启动客户机的命令后,选择从硬盘启动。看到如图 6 的 grub 选项。


图 6. 启动已安装的客户机
启动已安装的客户机

登陆客户机的 xWindow,测试网络连接状况。从图 7 看出,客户机获得了 IP 地址 192.168.0.158,识别了 qemu-kvm 虚拟的千兆网卡 Intel e1000 网络模块。为了测试网络速度,从外网的一台机器上用 scp 下载文件,下载速度平均为 5.1 MB/s 。


图 7. 客户机的网络状态
客户机的网络状态

启动一台客户机后,主机上多出了一个 tap0 虚拟网络设备,这就是 qemu-kvm 为客户机虚拟的 TAP 网络设备。查看网桥可以看出 tap0 加入了网桥 br0 。客户机就是通过网桥访问的外网。


清单 10. 主机的网络设备列表 1
linux-gwsa:~ # ifconfig tap0 
 tap0      Link encap:Ethernet  HWaddr EA:FC:99:17:F3:A5  
          inet6 addr: fe80::e8fc:99ff:fe17:f3a5/64 Scope:Link 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          RX packets:220322 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:342093 errors:0 dropped:0 overruns:11 carrier:0 
          collisions:0 txqueuelen:500 
          RX bytes:21559069 (20.5 Mb)  TX bytes:479156726 (456.9 Mb) 

 linux-gwsa:~ # brctl show 
 bridge name 	 bridge id 		 STP enabled 	 interfaces 
 br0 		 8000.001a644887b6 	 no 		 eth0 
							 tap0





第二台客户机的安装和使用

有了第一台客户机的安装经验,我们很容易安装更多的客户机在同一主机上,当然要在硬件资源足够的情况下。安装多台客户机时,需要注意以下几点:

  • 使用不同的存储镜像。就是为 -hda 的设定不同的文件或分区。
  • 使用不同的 MAC 地址。为了避免网络冲突,客户机的 MAC 地址要唯一。

实例:在第二台客户机上安装 SLES11

由于我们在安装第一台客户机时,使用了虚拟网桥,而且在客户机的网络配置脚本/etc/qemu-ifup具有可扩展性,所以安装第二台客户机时不用改动任何脚本,只需要配置不同的存储镜像和 MAC 地址。


清单 11. 安装 SLES11
使用硬盘分区作为客户机存储,从光盘启动,设置 TAP 网络,通过 VNC 远程安装:
 linux-gwsa:~ # qemu-kvm -m 4096 -smp 4 -hda /dev/sdc1 -net nic,model=virtio, \n 
 macaddr=00:16:3e:55:83:c3 -net tap -cdrom /mnt/SLES11.iso -boot d -vnc 9.123.99.34:5 

启动第二台客户机
 linux-gwsa:~ # qemu-kvm -m 8192 -smp 4 -hda /dev/sdc1 -net     nic,model=virtio, \n 
 macaddr=00:16:3e:55:83:c3 -net tap -vnc 9.123.99.34:5

安装完成并启动第二台客户机,我们可以查看它的网络状况,如图 8 。


图 8. 安装了 virto 网络模块客户机
安装了 virto 网络模块客户机

可以看出,客户机获得了 IP 地址 192.168.0.181,识别并加载了 qemu-kvm 虚拟的网卡模块 virtio 。为了测试网络速度,从外网的一台机器上用 scp 下载文件,下载速度平均为 11.1 MB/s 。速度几乎与物理网卡一样。细心的读者可能发现了两台客户机的网络性能有着巨大的差异,请参见下一节:调整客户机的网络性能。

这时主机上同时运行着两台虚拟机,他们的网络结构正如图 5 所示。在主机上的网络设备列表如清单 12 。


清单 12. 主机的网络设备列表 2
l
inux-gwsa:~ # ifconfig -s 
 Iface   MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg 
 br0    1500   0  703127      0      0      0  346383      0      0      0 BMRU 
 eth0   1500   012819806      0      0      0 7691669      0      0      0 BMPRU 
 eth1   1500   0 5532987      0      0      0 5500852      0      0      0 BMRU 
 lo    16436   0  187413      0      0      0  187413      0      0      0 LRU 
 tap0   1500   0 2288413      0      0      0 1235382      0      0     11 BMRU 
 tap1   1500   0   56615      0      0      0  125450      0      0      0 BMRU 
 linux-gwsa:~ # brctl show 
 bridge name 	 bridge id 		 STP enabled 	 interfaces 
 br0 		 8000.001a644887b6 	 no 		 eth0 
							 tap0 
							 tap1

后面的 tapX 是不同的虚拟机的接口,这里可以看出,所有的虚拟接口和 eth0 加入到了网桥。这样客户机就能够通过桥接访问主机上的网络。





调整 qemu-kvm 参数提高客户机性能

KVM 作为内核虚拟机,利用了处理器的硬件虚拟功能,性能上已经比其他的虚拟机高很多。但是 qemu-kvm 有复杂的参数,仔细调整这些参数可以使客户机的性能更上一层楼。

调整客户机的镜像文件

安装客户机时,存储镜像默认基于文件。在主机上看来就是一个很大的镜像文件。文件的方式容易设置而且比较灵活,可以存放在主机文件系统之上。但是如果客户机上进行高负荷的磁盘操作,映射到主机上这个单独的镜像文件时,性能必然受到很大影响。存储镜像的另外一个选择就是直接分配硬盘分区给客户机。如果资源允许,单独分配一块物理硬盘给每个客户机。一是客户机的磁盘操作不需要经过主机的文件系统,减少了主机文件系统的性能损耗;二是单独的硬盘分区 I/O 性能必定比单独的文件高。

本文的示例中,两台客户机都选者了使用单独的硬盘作为存储。

调整客户机的网络性能

从 manpage 可知,qemu-kvm 支持多种虚拟的网络设备模块。


清单 13. 虚拟网络设备的 manpage
Network options: 
 -net nic[,vlan=n][,macaddr=addr][,model=type] 
 Create a new Network Interface Card and connect it to VLAN n (n = 0 is the default). 
 The NIC is an rtl8139 by default on the PC target. Optionally, 
 the MAC address can be changed. 
 If no -net option is specified, a single NIC is created. 
 Qemu can emulate several different models of network card. 
 Valid values for type are "i82551", "i82557b", "i82559er", "ne2k_pci", "ne2k_isa", 
 "pcnet", "rtl8139", "e1000", "smc91c111", "lance" and "mcf_fec". 
 Not all devices are supported on all targets. 
 Use -net nic,model=? for a list of available devices for your target.

本文实例中,如果不指定虚拟网络设备模块时,默认的客户机网络模块是 rtl8029 。这是一块老式的 10M 全双工网卡。客户机上网络连接不稳定,从千兆网络通过 scp 下载速度最高才 300KB/s 。

第一台客户机上,我为其配置了常见的 intel e1000 千兆网络模块作为虚拟网络设备。客户机的网络非常稳定,从千兆网络通过 scp 下载速度最高达到 5.4MB/s(见图 7)。但是距离实际千兆网卡的性能还有一定差距。

第二台客户机上,我为其配置了 VirtIO Paravirtual 虚拟设备。客户机的网络非常稳定,从千兆网络通过 scp 下载速度最高达到 11MB/s(见图 8),几乎与千兆物理网卡的性能一样。


表 2. 虚拟网络模块的性能差异
虚拟网络模块 网络传输速度(ssh) 客户机操作系统 网络状态
rtl8029 200-300KB/s SLES10SP2 (kernel 2.6.16-60) 不稳定
e1000 4.8-5.4MB/s SLES10SP2 (kernel 2.6.16-60) 稳定
virtio 10.6-11.1MB/s SLES11 (kernel 2.6.27-19) 稳定

VirtIO paravirtual 是 Linux 虚拟机平台上统一的虚拟 IO 接口驱动。通常主机为了让客户机像在真实环境中一样运行,需要为客户机创建各式各样的虚拟设备,如磁盘,网卡,显卡,时钟,USB 等。这些虚拟设备大大降低了客户机的性能。如果客户机不关注这些硬件设备,就可以用统一的虚拟设备代替他们,这样可以大大提高虚拟机的性能。这个统一的标准化接口在 Linux 上就是 VirtIO 。需要注意的是 VirtIO 运行在 kernel 2.6.24 以上的版本中才能发挥它的性能优势。另外 KVM 项目组也发布了 Windows 平台上的 VirtIO 驱动,这样 windows 客户机的网络性能也可以大大提高了。


时间:2009-07-31 13:17 来源:developerWorks 中国 作者:郭 晋兵 原文链接

好文,顶一下
(2)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量