[[PageOutline]]
{{{
#!html
實作七:Xen PCI Passthrough 操作
}}}
----
= 【Step 1: 首先產生一台虛擬機器】 =
* 設定你想要怎樣規格的虛擬機器.
{{{
$ sudo vim /etc/xen-tools/xen-tools.conf
}}}
{{{
#!sh
dir = /home
install-method = debootstrap
size = 8Gb # Disk image size.
memory = 1024Mb # Memory size
swap = 128Mb # Swap size
fs = ext3 # use the EXT3 filesystem for the disk image.
dist = hardy # Default distribution to install. ---> For CUDA Support (Ubuntu 8.0.4)
image = sparse # Specify sparse vs. full disk images.
gateway = 140.XXX.XXX.XXX
netmask = 255.255.255.0
broadcast = 140.XXX.XXX.XXX
kernel = /boot/vmlinuz-`uname -r`
initrd = /boot/initrd.img-`uname -r`
mirror = http://gb.archive.ubuntu.com/ubuntu/
ext3_options = noatime,nodiratime,errors=remount-ro
ext2_options = noatime,nodiratime,errors=remount-ro
xfs_options = defaults
reiser_options = defaults
}}}
{{{
$ sudo xen-create-image --hostname node1 --ip xxx.xxx.xxx.xxx
}}}
----
= 【Step 2: 查看你的顯卡資訊】 =
{{{
$ lspci -vv
}}}
{{{
#!sh
01:00.0 VGA compatible controller: nVidia Corporation GeForce 9800 GT (rev a2)
Subsystem: ASUSTeK Computer Inc. Device 82a0
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR-
Kernel driver in use: pciback
Kernel modules: nvidia, nvidiafb
}}}
----
= 【Step 3: PCI Frontend Configuration 設定你的 DomU 】 =
{{{
$ sudo vim /etc/xen/node1.cfg
}}}
{{{
#!sh
kernel = '/boot/vmlinuz-2.6.22.9'
ramdisk = '/boot/initrd.img-2.6.22.9'
memory = '1024'
vcpus = '4'
# 配置你的 PCIE 顯示卡
pci = ['01:00.0']
root = '/dev/sda2 ro'
disk = [
'file:/home/domains/nvidia/disk.img,sda2,w',
'file:/home/domains/nvidia/swap.img,sda1,w',
]
name = 'node1'
#
# Networking
#
vif = [ 'ip=xxx.xxx.xxx.xxx,mac=00:16:3E:AA:70:5C' ]
#
# Behaviour
#
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
}}}
----
= 【Step 4: PCI Backend Configuration 設定你的 Dom0 】 =
* 切換身份為 Super user.
{{{
$ sudo su -
}}}
* 隱藏 dom0 的PCI 匯流排的位址, 並交由 pciback 模組來控制該匯流排存取權.
{{{
$ echo -n "0000:01:00.0" > /sys/bus/pci/drivers/nvidia/unbind
}}}
* 將 dev_ids 轉到 pciback 成為新的 binding slot.
{{{
$ echo -n "0000:01:00.0" > /sys/bus/pci/drivers/pciback/new_slot
$ echo -n "0000:01:00.0" > /sys/bus/pci/drivers/pciback/bind
}}}
{{{
$ cat /sys/bus/pci/drivers/pciback/slots\
}}}
{{{
#!sh
0000:01:00.0
}}}
* 警告: 請確認您的顯示卡資源沒有被其 Kernel module 所佔有及控制: 您顯示卡的 symlink 不應該存在著.
{{{
#!sh
PATH: /sys/bus/pci/devices/0000:01:00.0/
driver -> ../../../../bus/pci/drivers/nvidia ---> This symlink shouldn't exist.
}}}
----
= 【Step 5: 硬體直接存取設定】 =
==== Permissive Flag ====
{{{
$ sudo vim /etc/xen/xend-pci-permissive.sxp
}}}
{{{
#!sh
(unconstrained_dev_ids
#('0123:4567:89AB:CDEF')
('0000:01:00.0')
)
}}}
==== User-space Quirks ====
{{{
$ sudo vim /etc/xen/xend-pci-quirks.sxp
}}}
{{{
#!sh
(pci_ids
# Entries are formated as follows:
# :[::]
('10de:0605' # NVIDIA 9800GT
)
)
}}}
----
= 【Step 6: 啟動並登入你的虛擬機器 DomU 】 =
* 說明: 用 root 免密碼先登入,然後建立自己的帳號. 改用自己的帳號登入(亦可用 root 登入 , 不新建帳號 )
* @ Dom0
{{{
$ sudo xm create -c node1.cfg
}}}
* @ DomU
{{{
$ sudo adduser username
$ sudo vim /etc/sudoers
}}}
{{{
#!sh
username ALL=(ALL) ALL
}}}
----
= 【Step 7: 設定你的 DomU 基本環境】 =
* 設定 locales (系統語系),避免亂碼現象發生.
{{{
$ sudo vim /etc/profile
}}}
{{{
#!sh
# Locale
export LANGUAGE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"
}}}
{{{
$ source /etc/profile
$ sudo dpkg-reconfigure locales
}}}
* 更新 PCI ID Database.(當您發現系統無法偵測到你的顯示卡時)
{{{
$ sudo apt-get update
$ sudo apt-get install wget
$ sudo update-pciids
}}}
* 查看顯卡資訊有無正常顯示.
{{{
$ lspci
}}}
{{{
#!sh
00:00.0 VGA compatible controller: nVidia Corporation GeForce 9800 GT (rev a2)
}}}
* 查看顯卡資源有無順利分配到 DomU.
{{{
$ dmesg | grep pci
}}}
{{{
#!sh
pcifront pci-0: Installing PCI frontend
pcifront pci-0: Creating PCI Frontend Bus 0000:00
pciback 0000:00:00.0: probing...
pciback: pcistub_init_devices_late
}}}
----