天天看點

Xen顯示卡VGA passthrough

Xen4的特性中支援了VGA passthrough,但前提是cpu和主機闆必須支援VT-D、I/O virtualization。

使用xm dmesg 找到I/O virtualization enable、檢視I/O virtualization是否開啟。

首先lspci找到VGA顯示卡的pci裝置号

例如我運作lspci後的輸出:

...

00:1f.2 SATA controller: Intel Corporation 6 Series/C200 Series Chipset Family SATA AHCI Controller (rev 05)

00:1f.3 SMBus: Intel Corporation 6 Series/C200 Series Chipset Family SMBus Controller (rev 05)

01:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI Barts PRO [ATI Radeon HD 6800 Series]

01:00.1 Audio device: Advanced Micro Devices [AMD] nee ATI Barts HDMI Audio [Radeon HD 6800 Series]

03:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9120 SATA 6Gb/s Controller (rev 12)

可以看到,01:00.0和01:00.1就是我的顯示卡。我們要讓主機把裝置空出來,這個可以通過pcistub或pciback驅動實作。

我們利用pciback這個腳本來實作顯示卡驅動轉換

vi /sbin/pciback-bind

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<code>#!/bin/bash</code>

<code> </code> 

<code>if</code> <code>[ $</code><code># -eq 0 ]; then</code>

<code>         </code><code>echo</code> <code>"Require PCI devices in format: &lt;domain&gt;:&lt;bus&gt;:&lt;slot&gt;.&lt;function&gt;"</code>

<code>         </code><code>echo</code> <code>"Eg: $(basename $0) 0000:00:1b.0"</code>

<code>         </code><code>exit</code> <code>1</code>

<code>fi</code>

<code>  </code> 

<code>            </code><code>[ -z </code><code>"`lsmod | grep pciback`"</code> <code>] &amp;&amp; </code><code>sudo</code> <code>/sbin/modprobe</code> <code>xen-pciback</code>

<code>for</code> <code>pcidev </code><code>in</code> <code>$@; </code><code>do</code>

<code>         </code><code>if</code> <code>[ -h </code><code>/sys/bus/pci/devices/</code><code>"$pcidev"</code><code>/driver</code> <code>]; </code><code>then</code>

<code>                 </code><code>echo</code> <code>"Unbinding $pcidev from"</code> <code>$(</code><code>basename</code> <code>$(readlink</code><code>/sys/bus/pci/devices/</code><code>"$pcidev"</code><code>/driver</code><code>))</code>

<code>                 </code><code>echo</code> <code>-n </code><code>"$pcidev"</code> <code>&gt; </code><code>/sys/bus/pci/devices/</code><code>"$pcidev"</code><code>/driver/unbind</code>

<code>         </code><code>fi</code>

<code>                 </code><code>echo</code> <code>"Binding $pcidev to pciback"</code>

<code>                 </code><code>echo</code> <code>-n </code><code>"$pcidev"</code> <code>&gt; </code><code>/sys/bus/pci/drivers/pciback/new_slot</code>

<code>                 </code><code>echo</code> <code>-n </code><code>"$pcidev"</code> <code>&gt; </code><code>/sys/bus/pci/drivers/pciback/bind</code>

<code>done</code>

用/sbin/pciback-bind 0000:01:00.0 0000:01:00.1 就可以把顯示卡驅動換成xen-pciback。要注意在顯示卡pci裝置号前面加4個0,然後運作xm pci-list-assignable,輸出應該是

0000:01:00.0

0000:01:00.1

然後編輯已經開好的虛拟機配置檔案。

在裡面直接添加

xen_platform_pci=1

gfx_passthru=0

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

編輯完之後我們用xm create XXX.hvm就可以開啟虛拟機了,但這時的預設輸出仍是虛拟顯示卡,是以要先用vncviewer登入win7桌面,裝好amd的顯示卡驅動,重新開機。但是有的顯示卡本身自帶驅動、隻需把預設的虛拟網卡禁用就ok了。

本文轉自Devin 51CTO部落格,原文連結:http://blog.51cto.com/devingeng/1564850