HowTo: Xen 4.1.3 Windows 8 HVM domU with Intel HD4000 VGA Passthrough on Debian Wheezy
http://linux-bsd-sharing.blogspot.com/2012/10/howto-xen-413-windows-8-hvm-domu-with.html
Update 05/07/2013:
Despite the HowTo being close to 1 year it applies perfectly to this day. At the time Wheezy was Debian's Testing distribution and has since moved to Stable. Much of it can be used to setup other HVM domU such as Linux.
Important notice: I've experienced some problems with xen-hypervisor-4.1-amd64 versions 4.1.4-3+deb7u1_amd64 and 4.1.4-3_amd64. As a result to have sucessful passthrough I was forced to go back to the previous working version: 4.1.4-2_amd64.
In this HowTo I'll present the steps required to install Xen 4.1.3 using the xm toolstack on a Debian Wheezy (kernel 3.2.0-3-amd64) dom0, create a Windows 8 HVM domU config and setup VGA/PCI Passthrough for the integrated GPU, USB 2.0 controller and audio.
This HowTo assumes that the reader is comfortable with Linux and Windows operating systems namely Debian GNU/Linux and Windows 7/8 as such it doesn't cover the operating systems installation.
For easier reference the procedure will broken down in the following steps:
1) Hardware requirements
2) Install Xen on Debian Wheezy
3) Configure networking
4) Configure Xen
5) Prioritise Xen boot
6) Create and install Windows 8 HVM domU
7) Assign devices for PCI Passthrough
8) Install GPLPV drivers
9) Advices and impressions
1) Hardware requirements
For PCI passthrough both motherboard and CPU must support VT-d also know as IOMMU IO virtualization.
The hardware used to write this HowTo setup is composed of:
- Intel Core i7-3770 CPU,
- Intel DQ77MK Motherboard,
- 32GB GEIL DDR3 1600 MHz,
- 200GB Maxtor SATA HDD,
- Samsung SyncMaster 940BW Monitor.
It should be noted that VT-d and VT-x have been enabled in the motherboard and that the i7-3770 integrated GPU is the computer's sole GPU.
In addition to the above setup I've also used another networked computer so I could SSH into the dom0 and perform the steps identified bellow.
2) Install Xen on Debian Wheezy
The Xen hypervisor is provided by the xen-linux-system package:
$ su# apt-get update# apt-get install xen-linux-system
3) Configure networking
There are several ways you can provide network access to domU guest domains, the most common being setting up a network bridge which I'll be covering.
To assign a static IP to the dom0 and define a network bridge named eth0, disable NetworkManager (if installed) and edit /etc/network/interfaces to contain a bridge:
# /etc/init.d/network-manager stop# update-rc.d network-manager disable# aptitude install bridge-utils# vim /etc/network/interfacesauto lo br0iface lo inet loopbackallow-hotplug eth0iface eth0 inet manualiface br0 inet staticbridge_ports eth0address 192.168.1.5broadcast 192.168.1.255netmask 255.255.255.0gateway 192.168.1.254# vim /etc/resolv.confdomain my.domain.comnameserver 192.168.1.254
192.168.1.5 is the IP chosen to be assigned to the host, 192.168.1.255 and 255.255.255.0 are the typical broadcast and netmask values for a 192.168.1.x network and in my case the gateway is 192.168.1.254. Replace this values according to your own network settings and desires.
4) Configure Xen
The xend daemon employs xend-config.sxp to determines the parameters that Xen should use.
Personally I choose to disable dom0 ballooning, define the dom0 assignable memory and change the keyboard layout (I've changed mine to pt):
# vim /etc/xen/xend-config.sxp(dom0-min-mem 2048)(enable-dom0-ballooning no)(keymap 'pt')
I've restricted the amount of memory assigned to dom0 to 2048 MB. In my case the dom0 is headless and all the hard work is to be done by the non-privileged virtual machines as such I've opted for a comfortable amount of memory to be assigned to the dom0, 2048 MB (2 GB). To this end GRUB needs to pass the appropriate command as the hypervisor boots:
# echo 'GRUB_CMDLINE_XEN="dom0_mem=2G,max:2G"' >> /etc/default/grub# update-grub2
5) Prioritise Xen boot
By default Wheezy's GRUB lists and boots regular kernels and afterwards the Xen hypervisor.
Assuming that the computer is to be running Xen all the time it advisable to change this behaviour and increase Xen's GRUB boot priority so that it's the first on the list and boots by default.
The Debian way to do this is to used dpkg-divert like so:
# dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen# update-grub2
To undo this necessary:
# dpkg-divert --rename --remove /etc/grub.d/20_linux_xen# update-grub2
6) Create and install Windows 8 HVM domU
The xm toolstack uses configuration files that define the domain meaning that we need to create a configuration file for our guest VM:
# vim /etc/xen/win8-x64.cfgkernel = 'hvmloader'builder = 'hvm'vcpus = '4'memory = '4096'disk = ['file:/srv/xen/domains/win8-x64.img,hda,w','file:/srv/xen/images/Windows8-ReleasePreview-32bit-English.iso,hdc:cdrom,r']name = 'win8-x64'vif = [ 'mac=00:16:3E:51:20:4C,bridge=br0,model=e1000' ]on_poweroff = 'destroy'on_reboot = 'restart'on_crash = 'restart'boot = 'dc'acpi = '1'apic = '1'viridian = '1'xen_platform_pci='1'sdl = '0'vnc = '1'vnclisten = '0.0.0.0'vncpasswd = ''stdvga = '0'usb = '1'usbdevice = 'tablet'
Do note that a MAC address must be assigned to the virtual interface. The 00:16:3e MAC block is reserved for Xen domains, do the last three digits may be randomly filled in (hex values 0-9 and a-f only).
In this HowTo I'm using file based storage which implies using the dd command to create what will be the domU hard drive. To create a 40GB .img file:
# dd if=/dev/zero of=/srv/xen/domains/win8-x64.img bs=1M count=40960
If you're using LVM use 'phy:/dev/mapper/win8-x64,hda,w' (change according to your own target logical volume) instead of 'file:/srv/xen/domains/win8-x64.img,hda,w'.
For more on the options that the domain configuration file accepts refer to xmdomain.cfg.
There are 2 options when it comes to actually installing Windows 8 on the virtual machine. One method consists in using VNC to connect to the guest virtual machine and installing the operating system from whatever computer you have with a graphical desktop environment. In alternative, one can use VGA Passthrough for the install process altogether.
Choose one of the methods, though the VNC method is preferable as it eases troubleshooting and it's the one documented bellow. To use the VGA Passthrough method jump to step 7 of the HowTo and issue xm create win8-x64.cfg.
After defining Windows 8 domU configuration file execute it and connect through VNC to install Windows 8:
# xm create win8-x64.cfg$ vncviewer 192.168.1.5
If running a GUI on dom0 simply vncviwer 127.0.0.1, however if running from a networked computer replace the localhost with the IP of the said networked computer (192.168.1.5 for example).
Proceed to do a Windows install, shutdown the guest VM and backup the .img for future use. To shutdown the Windows 8 HVM domU either use guest's shutdown button or issue:
# xm destroy win8-x64
xm list can be used to find out the domain Id and use it as argument for xm destroy, for example:
xm listName ID Mem VCPUs State Time(s)Domain-0 0 4096 8 r----- 34476.9win8-x64 4 4096 4 -b---- 301.0xm destroy 4
Also comment out the cdrom line so that the virtual machine doesn't boot into the Windows installation cdrom every time it boots. For security reasons it is best to disable VNC.
# vim /etc/xen/win8-x64.cfgkernel = 'hvmloader'builder = 'hvm'vcpus = '4'memory = '4096'disk = ['file:/srv/xen/domains/win8-x64.img,hda,w',#'file:/srv/xen/images/Windows8-ReleasePreview-32bit-English.iso,hdc:cdrom,r']name = 'win8-x64'vif = [ 'mac=00:16:3E:51:20:4C,bridge=br0,model=e1000' ]on_poweroff = 'destroy'on_reboot = 'restart'on_crash = 'restart'boot = 'dc'acpi = '1'apic = '1'viridian = '1'xen_platform_pci='1'sdl = '0'vnc = '0'vnclisten = '0.0.0.0'vncpasswd = ''stdvga = '0'usb = '1'usbdevice = 'tablet'
7) Assign devices for PCI Passthrough
A domU can be made aware and directly access and use PCI devices with full privileges. To accomplish that the PCI devices need to be hidden from the dom0 and not be forwarded to any other domUs.
Using the xm toolstack this is achieved loading the pci_stub kernel module, identifying the PCI devices that are to be forwarded, unbinding the device from dom0 and bind it to pci_stub thus allowing it to be assigned in the domU config file.
# lspci00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller (rev 09)00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04)00:16.0 Communication controller: Intel Corporation 7 Series/C210 Series Chipset Family MEI Controller #1 (rev 04)00:16.3 Serial controller: Intel Corporation 7 Series/C210 Series Chipset Family KT Controller (rev 04)00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (rev 04)00:1a.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (rev 04)00:1b.0 Audio device: Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller (rev 04)00:1c.0 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1 (rev c4)00:1c.6 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 7 (rev c4)00:1d.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (rev 04)00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev a4)00:1f.0 ISA bridge: Intel Corporation Q77 Express Chipset LPC Controller (rev 04)00:1f.2 SATA controller: Intel Corporation 7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode] (rev 04)00:1f.3 SMBus: Intel Corporation 7 Series/C210 Series Chipset Family SMBus Controller (rev 04)02:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection03:03.0 FireWire (IEEE 1394): LSI Corporation FW322/323 [TrueFire] 1394a Controller (rev 70)
I'll be forwarding 00:02.0 VGA compatible controller, 00:1b.0 Audio device and 00:1d.0 USB controller. To know the exact numbering of the devices run lspci -n:
# lspci -n00:00.0 0600: 8086:0150 (rev 09)00:02.0 0300: 8086:0162 (rev 09)00:14.0 0c03: 8086:1e31 (rev 04)00:16.0 0780: 8086:1e3a (rev 04)00:16.3 0700: 8086:1e3d (rev 04)00:19.0 0200: 8086:1502 (rev 04)00:1a.0 0c03: 8086:1e2d (rev 04)00:1b.0 0403: 8086:1e20 (rev 04)00:1c.0 0604: 8086:1e10 (rev c4)00:1c.6 0604: 8086:1e1c (rev c4)00:1d.0 0c03: 8086:1e26 (rev 04)00:1e.0 0604: 8086:244e (rev a4)00:1f.0 0601: 8086:1e47 (rev 04)00:1f.2 0106: 8086:1e02 (rev 04)00:1f.3 0c05: 8086:1e22 (rev 04)02:00.0 0200: 8086:10d303:03.0 0c00: 11c1:5811 (rev 70)
For each PCI to be forwarded create a pci-stub Id, unbind it from the dom0 and bind to pci-stub. xm pci-list-assignable-devices is useful in confirming if the device has been added to the pool of devices that can be assigned to a guest domain.
# modprobe pci_stub# echo "8086 1e26" > /sys/bus/pci/drivers/pci-stub/new_id# echo "0000:00:1d.0" > /sys/bus/pci/devices/0000\:00\:1d.0/driver/unbind# echo "0000:00:1d.0" > /sys/bus/pci/drivers/pci-stub/bind# xm pci-list-assignable-devices0000:00:1d.0# echo "8086 0162" > /sys/bus/pci/drivers/pci-stub/new_id# echo "0000:00:02.0" > /sys/bus/pci/devices/0000\:00\:02.0/driver/unbind# echo "0000:00:02.0" > /sys/bus/pci/drivers/pci-stub/bind# xm pci-list-assignable-devices0000:00:02.00000:00:1d.0# echo "8086 1e20" > /sys/bus/pci/drivers/pci-stub/new_id# echo "0000:00:1b.0" > /sys/bus/pci/devices/0000\:00\:1b.0/driver/unbind# echo "0000:00:1b.0" > /sys/bus/pci/drivers/pci-stub/bind# xm pci-list-assignable-devices0000:00:02.00000:00:1b.00000:00:1d.0
Do note that the devices won't be available in the dom0, that's why typical VGA Passthrough setups involve 2 or more graphics cards forwarding the more powerful to the domU alongside an USB controller and audio (I'll cover Secondary Display Adapter PCI passthrough in a future post). In this case only the CPU's integrated GPU is present so as soon has 00:02.0 VGA compatible controller is hidden for the dom0 it can't be used by it and thus the only way to be access is via another computer using SSH for example.
Update the domU's configuration file with the devices that are to be used and start the Windows 8 domU by issuing xm create win8-x64.cfg.
# vim /etc/xen/win8-x64.cfgkernel = 'hvmloader'builder = 'hvm'vcpus = '4'memory = '4096'disk = ['file:/srv/xen/domains/win8-x64.img,hda,w',#'file:/srv/xen/images/Windows8-ReleasePreview-32bit-English.iso,hdc:cdrom,r']name = 'win8-x64'vif = [ ',mac=00:16:3E:51:20:4C,bridge=br0,model=e1000' ]on_poweroff = 'destroy'on_reboot = 'restart'on_crash = 'restart'boot = 'dc'acpi = '1'apic = '1'viridian = '1'xen_platform_pci='1'sdl = '0'vnc = '0'vnclisten = '0.0.0.0'vncpasswd = ''stdvga = '0'usb = '1'usbdevice = 'tablet'pci = [ '00:1d.0', '00:1b.0' , '00:02.0' ]# xm create win8-x64.cfg
Also consider creating a script to automate loading pci-stub and unbinding/binding the PCI devices.
8) Install GPLPV drivers
Developed by James Harper, GPLPV drivers allow swapping the QEMU emulated devices for paravirtualized devices. With these new devices I/O speeds are improved as Windows will use the network and block backend drivers present in the dom0.
Signed GPLPV drivers are available at http://wiki.univention.de/index.php?title=Installing-signed-GPLPV-drivers. Windows 8 32-bit can be downloaded at http://apt.univention.de/download/addons/gplpv-drivers/gplpv_Vista2008x32_signed_0.11.0.356.msi while 64-bit drivers are available at http://apt.univention.de/download/addons/gplpv-drivers/gplpv_Vista2008x64_signed_0.11.0.356.msi.
Vista2008 in the drivers' installer filename means that it applies to the recent Windows releases (e.g. Vista/2008/7/8).
9) Advices and impressions
I've written some pieces of advices and impressions over using XEN over at opensource-impressions.blogspot.com with some specific Intel HD4000 VGA Passthrough so make sure to read them.
Wheezy's stock kernel doesn't contain xen-acpi-processor as it was introduced during Linux kernel 3.4.x as such power management is lacking. In this scenario, consider compiling the kernel or in alternative installing Debian Experimental's kernel. The latter option implies editing /etc/apt/sources.list to cover the experimental branch and instructing apt-get to install the kernel package from the experimental distribution.
Xen is at version 4.1.3 in Debian Wheezy's repository however the recent 4.2.0 release is already available in the experimental branch. And with the 4.2.0 comes xl, the new toolstack set to replace xm.
In the coming weeks I'll update this HowTo with the required steps to combine Debian Experimental Xen and Linux kernel packages with the testing distribution.
Update 05/07/2013:
I've moved on from HD4000 VGA passthrough and am currently using PCI passthrough on 2 AMD cards (HD7850 and HD5450) with much success. The HD5450 is assigned to a Fedora 19 domU while the HD7850 is assigned to a Windows 8 domU (Catalyst drivers aren't installed) for my gaming fix.
Stability of the setup: rock solid. dom0 is typically online for 1 to 2 months without rebooting, the Fedora 19 is hardly rebooted or shutdown while the Windows 8 domU is shutdown at night. Aside from these domU another Windows 8 domU is allways on.
Posted by tangramat 10:41 PM 35 comments:Links to this post ![]()
![]()
Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest
Labels: Debian, Linux, Virtualization, Xen
Thursday, August 16, 2012
Tip: Assign Xen dom0 memory on Debian Wheezy
Though Xen can manage memory with the ballon driver it is considered good practice to limit/restrict the amount of memory assigned to dom0. Doing so will stop the Linux kernel from wasting memory.
To do so you'll need to pass the appropriate boot parameter for both the Xen hypervisor and Linux.
As an example, let's assume you want to assign 2GB to your dom0 here's how:
$ su# echo 'GRUB_CMDLINE_XEN="dom0_mem=2G,max:2G"' >> /etc/default/grub# update-grub2
The above steps were executed on Debian Wheezy running Xen 4.1.3 but should translate as well to any other distribution running Xen 4.1.2 or latter and GRUB2. Users of GRUB will need to edit grub.conf and pass down the boot parameters in an analogous manner.
HowTo: Xen 4.1.3 Windows 8 HVM domU with Intel HD4000 VGA Passthrough on Debian Wheezy的更多相关文章
- Xen虚拟化技术中PV和HVM的区别
转自 这里 Xen是一个开源的type-1或者裸机管理程序,它使得一个物理主机能够同时并行运行多个相同的或者不同的操作系统实例.Xen是目前唯一的开源可得的type-1管理程序.Xen被应用于许多商业 ...
- 电子产品使用感受之--Windows 10 小米笔记本Air HDMI转VGA无信号问题
最近一直通过HDMI转VGA线缆链接我的戴尔P2314H显示器,前天睡觉前,看到电脑上英伟达显卡推了驱动更新,顺手更新了一下,就去睡觉了,转天晚上再用,HDMI接口就没有信号了,上网查了一些信息,获知 ...
- Xen安装部署和基本原理
Refer to : http://www.178linux.com/14764 目录: 1. Xen的简介 1.1 Xen的大体结构 1.2 Xen对VM的称呼 1.3 Xen对C ...
- 在CentOS下源码安装 Xen并搭建Windows虚拟机
前言 首先要感谢xing的帮助,在他的指导之下才完成环境的搭建,本文档的部分内容来自他的文档.另外,还要感谢——互联网. 1. 环境介绍 Linux: CentOS 6.3 Xen: Xe ...
- xen创建pvm和hvm的过程
these are the basic steps of installing domU with xen-tools in ubuntu13.04 64bit in xen4.3 you can a ...
- Xen虚拟化基本原理详解
标签:虚拟化 xen 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wangzan18.blog.51cto.com/80210 ...
- JVM 崩溃 Failed to write core dump解决办法 WINDOWS
JVM 崩溃 Failed to write core dump解决办法 WINDOWS MIT key words: JVM,崩溃,windows,Failed,core dump,虚拟内存 最近从 ...
- 云计算大数据:Xen、KVM、VMware、hyper-v等虚拟化技术的比较
1.Xen.KVM.VMware.hyper-v等虚拟化技术的比较,xen和kvm,是开源免费的虚拟化软件. vmware是付费的虚拟化软件. hyper-v比较特别,是微软windows 2008 ...
- 网络:Xen理解
Xen是由剑桥大学计算机实验室开发的一个开源项目.是一个直接运行在计算机硬件之上的用以替代操作系统的软件层,它能够在计算机硬件上并发的运行多个客户操作系统(Guest OS). 一.Xen虚拟化类型 ...
随机推荐
- (转)Android内存泄漏分析及调试
http://blog.csdn.net/gemmem/article/details/13017999 此文承接我的另一篇文章:Android进程的内存管理分析 首先了解一下dalvik的Ga ...
- (转)Inno Setup入门(二)——修改安装过程中的图片
本文转载自:http://blog.csdn.net/augusdi/article/details/8564793 修改安装过程中的图片 一般编译之后,安装过程中出现在左边图片是是下图这个样子的: ...
- RTMP(实时信息传输协议)详解
RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing) ...
- Java堆外内存之七:JVM NativeMemoryTracking 分析堆外内存泄露
Native Memory Tracking (NMT) 是Hotspot VM用来分析VM内部内存使用情况的一个功能.我们可以利用jcmd(jdk自带)这个工具来访问NMT的数据. NMT介绍 工欲 ...
- Hive使用入门
Hive简介 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成 ...
- 【UVA】673 Parentheses Balance(栈处理表达式)
题目 题目 分析 写了个平淡无奇的栈处理表达式,在WA了5发后发现,我没处理空串,,,,(或者说鲁棒性差? 代码 #include <bits/stdc++.h> usin ...
- 在VritualBox中安装CentOS7
系统:Windows10 位 详细步骤参考: Windows平台上通过VirtualBox安装centos虚拟机 安装virtual box 出现2503错误解决:c:/windows/temp 添加 ...
- CCNode作为容器实现显示区域剪裁
一直把ccnode当做ui元素的容器使用,比如一段带下划线的文字,我会在一个ccnode中加入一个label和一个sprite,然后作为一个整体传出. 在主界面聊天的时候遇到一个问题,一段聊天信息需要 ...
- SVN版本控制系统最佳实践
第1章SVN介绍及应用场景 1.1什么是SVN(Subversion) Svn(subversion)是近年来崛起非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统. ...
- TCP/IP协议详解之广播和多播
广播和多播仅应用于 U D P,它们对需将报文同时传往多个接收者的应用来说十分重要.T C P是一个面向连接的协议,它意味着分别运行于两主机(由 I P地址确定)内的两进程(由端口号确定)间存在一条连 ...