Xen的IOMMU的使用方法

在Fedora 13中,Xen并未作为正式的工具包发布,因此需要从以下网页下载RPM包。


Dom0内核的RPM

http://repos.fedorapeople.org/repos/myoung/dom0-kernel/

Xen的其他RPM

http://ftp.funet.fi/pub/mirrors/fedora.redhat.com/pub/fedora/linux/updates/testing/14/


要启用VT-d,需要在Xen中将选项iommu=1指定为管理程序的启动选项。下面是grub.conf的示例。


default=0

timeout=10

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

root(hd0,0)

kernel/xen.gz iommu=1 dom0_mem=2G

module/vmlinuz-2.6.32.23-170.xendom0.fc12.x86_64 ro root=UUID=293a5a8e-9dde-40a4-9356-5c8492d70eaa rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=ja_JP.UTF-8 KEYTABLE=jp106 rhgb

module/initramfs-2.6.32.23-170.xendom0.fc12.x86_64.img


将分配给主机操作系统的设备从主机操作系统拆除的方法与KVM相同。这种情况下拆除方法如下。


echo"8086 10a7">/sys/bus/pci/drivers/pci-stub/new_id

echo 0000:08:00.0>/sys/bus/pci/devices/0000:08:00.0/driver/unbind

echo 0000:08:00.0>/sys/bus/pci/drivers/pci-stub/bind

echo"8086 10a7">/sys/bus/pci/drivers/pci-stub/new_id

echo 0000:08:00.1>/sys/bus/pci/devices/0000:08:00.1/driver/unbind

echo 0000:08:00.1>/sys/bus/pci/drivers/pci-stub/bind


在Xen中可以使用下列命令检查可分配的设备。


xm pci-list-assignable-devices

0000:08:00.0

0000:08:00.1


在Xen中,客户端操作系统的配置文件可以通过设置下列选项,将PCI设备分配给客户端操作系统。


pci=['08:00.0','08:00.1']


分配给客户端操作系统的PCI设备默认依次分配到空的虚拟插槽,但如果使用@<slot号>选项,就可以指定要分配的插槽。


pci=['08:00.0','08:00.1@7']


在本次使用的PCI这种Multi-Function设备中,有一些必须从操作系统角度看也是Multi-Function设备,才能顺利运行。USB控制器或显卡类设备尤其需要注意。

pci=['08:00.*']

下面是将Multi-Function设备直接作为Multi-Function设备分配给客户端操作系统的设置示例。


import os, re

arch_libdir='lib'

arch=os.uname()[4]

if os.uname()[0]=='Linux'and re.search('64',arch):

arch_libdir='lib64'

kernel="/usr/lib/xen/boot/hvmloader"

builder='hvm'

memory=2048

name="f13-hvm"

vcpus=4

pae=1

acpi=1

apic=1

vif=['']

disk=['file:/var/lib/xen/images/f13-hvm.img, hda, w','file:/root/Fedora-13-

x86_64-DVD.iso, hdc:cdrom, r']

device_model='/usr/'+arch_libdir+'/xen/bin/qemu-dm'

boot="cda"

sdl=0

opengl=1

vnc=1

vnclisten="0.0.0.0"

vncpasswd=''

stdvga=0

serial='pty'

keymap='ja'

xen_platform_pci=1

pci=['08:00.*@6']

pci_msitranslate=1

使用上述配置文件,启动客户端操作系统。

xm create/etc/xen/f13-hvm

xm pci-list f13-hvm

VSlt VFn domain bus slot func

0x06 0x0 0x0000 0x08 0x00 0x0

0x06 0x1 0x0000 0x08 0x00 0x1


在客户端操作系统上确认PCI设备,可以看到如下结果。


lspci

00:00.0 Host bridge:Intel Corporation 440FX-82441FX PMC[Natoma](rev 02)

00:01.0 ISA bridge:Intel Corporation 82371SB PIIX3 ISA[Natoma/Triton II]

00:01.1 IDE interface:Intel Corporation 82371SB PIIX3 IDE[Natoma/Triton II]00:01.3 Bridge:Intel Corporation 82371AB/EB/MB PIIX4 ACPI(rev 01)

00:02.0 VGA compatible controller:Cirrus Logic GD 5446

00:03.0 Class ff80:XenSource, Inc.Xen Platform Device(rev 01)

00:04.0 Ethernet controller:Realtek Semiconductor Co.,Ltd.RTL-8139/8139C/8139C+(rev 20)

00:06.0 Ethernet controller:Intel Corporation 82575EB Gigabit Network Connection(rev 02)

00:06.1 Ethernet controller:Intel Corporation 82575EB Gigabit Network Connection(rev 02)


在笔者手头的客户端操作系统上设置NIC,就可以进行网络通信了。

进行动态删除时,需在Dom0上执行下列命令。


xm pci-detach f13-hvm"08:00.*"


进行动态添加时,需在Dom0上执行下列命令。


xm pci-attach f13-hvm"08:00.*"