Qian:Xen Hybrid

From Trusted Cloud Group
Jump to: navigation, search

Contents


Version Info.

  • Host OS: CentOS 5.4 x86_64
  • Guest OS: CentOS 5.4 x86_64
  • Xen hypervisor: xen-3.4.1
  • Guest kernel: linux-2.6.30


Hybrid环境配置要点

1. 配置hybrid kernel的HZ=1000

  • The default OS released by RHEL5Ux uses 1000HZ for HVM, but 100 HZ for PVM.
  • 100HZ means slow responsibility, but less CPU cost.

2. native、hvm、pv、hybrid均使用同一个kernel binary(2.6.30-hybrid)

3. native、hvm、pv、hybrid均使用相同的clocksouce(TSC)

  • 在kernel启动参数中加入:clocksource=tsc
  • 通过查看/sys/devices/system/clocksource/clocksource0/current_clocksource 的值来验证。未修改前其值为jiffies(默认值),修改后其值为tsc

4. pv guest的console配置:在guest中加入hvc0设备(注意:不是在dom0中添加)

  • 在/etc/inittab 中加入形如:
7:2345:respawn:/sbin/mingetty hvc0
  • 在/etc/securetty中加入“hvc0”


安装CentOS

安装时不要选virtualization选项。
安装完成后再用Add/Remove application来安装Virtualization组件,通过使用系统自带的Xen来体验基本操作哦,如使用Virtual Machine Manager来创建VM等等。注意:此步并非必须的,而且与后续利用Xen source安装Xen无关;当你对Xen足够熟悉后,大可不必安装CentOS自带的Virtualization组建,直接使用通过source安装的Xen。

安装Xen Hypervisor with Hybrid Feature


安装HVM Guest

创建一个20GB的虚拟磁盘:

dd if=/dev/zero of=CentOS_x64.img bs=512 count=41943040 conv=notrunc

注意:此命令运行时间较长且无任何响应,请耐心等待。或,用qemu-img命令,如:

qemu-img create -f raw XenQemu.img 20G

qemu-img-xen create -f raw XenQemu.img 20G


HVM guest配置文件(如命名为hybrid.hvm):

mport os, re
arch = os.uname()[4]
if re.search('64', arch):
    arch_libdir = 'lib64'
else:
    arch_libdir = 'lib'

kernel = "/usr/lib/xen/boot/hvmloader"
builder = 'hvm'
memory = 2048
name = "Hybrid"
vcpus = 4
vif = [ 'type=vnif, mac=00:16:36:48:87:7B' ]
disk = ['file:/var/lib/xen/images/CentOS_x64.img,xvda,w', 'phy:/dev/cdrom,hdc:cdrom,r']
on_poweroff = 'destroy'
on_reboot   = 'restart'
device_model = '/usr/' + arch_libdir + '/xen/bin/qemu-dm'
vnc=1
localtime=1
usb=1
boot="dc"


此时默认首选启动设备为CD-ROM。

xm create hybrid.hvm

安装完成后,修改hybrid.hvm中的“boot="c"”,即直接从硬盘启动。

安装完成后,系统可能没有默认的网络配置eth0。此时需要手动添加,包括网卡硬件和配置。

Guest IP.png Guest DNS.png

注意:MAC要与guest配置文件中的vif参数相匹配。

搭建Hybrid Xen环境

替换guest内核,使之支持Hybrid Xen。(关于Linux内核编译可参考Simple Way of Linux Kernel Update。)

tar xjvf linux-2.6.30.tar.bz2
tar xzvf hybrid.tar.gz
cp hybrid/pv-config-2.6.30-xen linux-2.6.30/.config
cp hybrid/patches-kernel/* linux-2.6.30
cd linux-2.6.30
./patch_hybrid_kernel
make
make modules_install
cp arch/x86_64/boot/bzImage /boot/vmlinuz-2.6.30-hybrid
cp System.map /boot/System.map-2.6.30-hybrid
cd /boot
depmod 2.6.30
mkinitrd -v -f --builtin=xen_vbd --builtin=ata_piix initrd-2.6.30-hybrid.img 2.6.30

Tips:可将上述操作制作成一个script(如命名为make_hybrid_kernel),与linux-2.6.30.tar.bz2和hybrid.tar.gz放置在同一目录中,然后运行。

在GRUB中添加相应的menu entry。打开menu.lst

vi /boot/grub/menu.lst

添加以下内容:

title CentOS (2.6.30-hybrid)
    root (hd0,0)
    kernel /vmlinuz-2.6.30-hybrid ro root=LABEL=/ rhgb quiet
    initrd /initrd-2.6.30-hybrid.img

OK!关闭guest。

在dom0 host中,为guest的配置文件hybrid.hvm添加以下配置,使能hybrid。

cpuid = [ '0x40000002:edx=0x3' ]

重建guest domain:

xm create hybrid.hvm

在GRUB中选择CentOS (2.6.30-hybrid)进入。

可通过在guest中运行以下命令来验证Hybrid Xen环境的成功搭建:

cat /proc/interrupts

显示的中断类型(interrupt type)为“xen-dyn-xxx”,而非“IO-APIC-xxx”,如下图所示,则表明Hybrid Xen运行环境正常运行。此外,可在guest中运行dmesg查看kernel ring buffer内容,当中有标识hybrid的相关信息。

Hybrid Xen Environment


Host和Guest的操作系统均为CentOS 5.4 x86_64。


在新的kernel中,有可能在初始环境下不能联网。此时只需手动active network即可。GUI界面操作为:System -> Administration -> Network,在选定网络配置中点击“Active“按钮。

VT-d实验


首先,要在BIOS中enable VT-d。不同机器对VT-d的支持不尽相同,以下为示例:

Intel VT for Directed I/O (VT-d)     <Enable>
Interrupt Remapping                  <Enable>
FLR Capability                       <Enable>


默认情况下,VT-d功能是被关闭的。需要在GRUB中对Xen hypervisor配置iommu参数进行打开。同时,要使用pciback.hide参数来指定即将被进行VT-d分配的PCI设备。以下为示例:

title CentOS (2.6.18.8-xen)
    root (hd0,0)
    kernel /xen-3.4.1.gz dom0_mem=512M iommu=1
    module /vmlinuz-2.6.18.8-xen ro root=/dev/LVM/root ro pciback.hide=(00:19.0)(00:1a.1)
    module /initrd.img-2.6.18.8-xen


进入dom0后,通过dmesg查看kernel ring buffer,如果看到类似以下信息,表明PCI设备hide不成功。

......
Kernel command line: ro root=/dev/LVM/root ro pciback.hide=(00:19.0)(00:1a.1)
Unknown boot option `pciback.hide=(00:19.0)(00:1a.1)': ignoring
......

原因很可能是pci back driver以module的形式编入了dom0 kernel而造成的。解决方案:查看dom0的.config文件(或/boot下的config-2.6.18.8-xen),确保CONFIG_XEN_PCIDEV_BACKEND和CONFIG_XEN_PCIDEV_BACKEND_PASS两个参数都配置为“y”,然后重新生成dom0 kernel。此外,也可通过sys文件系统实现运行时隐藏指定的PCI设备,方法可参考Assign hardware to DomU with PCIBack as module;但此方法较为繁冗,并且每次dom0重启后都得重新设置一遍,因此不推荐。

进入dom0后,可通过xm dmesg命令查看Xen启动阶段的log信息。节选VT-d相关的如下:

(XEN) Intel VT-d DMAR tables have been parsed.
......
(XEN) Intel VT-d Snoop Control not supported.
(XEN) Intel VT-d DMA Passthrough not supported.
(XEN) Intel VT-d Queued Invalidation supported.
(XEN) Intel VT-d Interrupt Remapping supported.
(XEN) I/O virtualisation enabled
(XEN) I/O virtualisation for PV guests disabled

其中,“(XEN) I/O virtualisation enabled”表明VT-d功能已被使能。

执行:

xm pci-list-assignable-devices

可看到当前可以用于VT-d pass-through 的PCI设备号。

验证VT-d的运行

以下描述针对网卡进行VT-d pass-through。对于单网卡的机器,由于在dom0 kernel中设置了对网卡的隐藏,因此dom0启动时

Benchmark测试

LMbench


LMbench有分两个版本:LMbench2和LMbench3。解压tarball后,运行make results即进行编译与测试,结果存放在results目录下。详细说明可参考tarball自带的README。
在编译过程中,有可能出现以下报错:

......
gmake[1]: *** No rule to make target `../SCCS/s.ChangeSet', needed by `bk.ver'. Stop.
gmake[1]: Leaving directory `/root/Desktop/lmbench3/src'
make: *** [lmbench] Error 2

这是LMbench的一个小bug,两个版本都存在。解决方案:手工创建一个空文件,供bk.ver访问。如:

mkdir ./SCCS
touch ./SCCS/s.ChangeSet

运行

make results
make rerun
make rerun
make rerun

可得到4组同一配置参数的测试结果,结果在resutls下依次编号命名。或通过一个循环来实现相同功能,如下:

make results && for((i=0;i<3;i++)); do make rerun; done


SysBench


Personal tools
Namespaces
Variants
Actions
Navigation
Upload file
Toolbox