Dizzy's Guide to Creating a Gaming VM
Version: 0.0.3
Version: 0.0.3
Virtualization is the future of computing and is already being used in many capacities today. In writing this guide I hope to educate our community to it's benefits, usage and limitations. The more support it has, the further developed it will become. That is also my goal for this guide; to see it become simplified and offer broader support for hardware and software.
Some Benefits:
- Reset the VM without having to hard reset the system
- Uninterrupted sessions of other VMs
- Ability to run the latest games on a VM
- Being able to use all that extra Memory and those Cores
Before we begin, be sure to make sure your system is VT-d or AMD-Vi (IOMMU) capable.
VT-d is an extension on top of the normal Virtualization instructions provided by intel, and IOMMU (AMD-Vi) is the AMD version. These are not the same as VT-x and AMD-V. They are extra and you need to be sure you have them on your system before attempting this guide.
For Intel this requires: VT-d (Click to show)
(www.ark.intel.com)
- CPU with VT-x Socket 775 and newer. Vpro rated chipset with VT-d in BIOS is also required by 775 CPUs (Most likely Q45)
or
- Core i5/i7 or Xeon Chip with VT-x and VT-d. Only Non-K, except C2 stepping 3930k and 3960x chips have the right instructions
and
- Motherboard with VT-d option in BIOS. (ASrock and Zotac have a good selection)
For AMD this requires: IOMMU (Click to show)
- Any reasonably new AMD processor (AM2 and newer or socket 940 Opteron and newer)
and
- Proper chipset. 880fx and 990fx or most server boards should have IOMMU. Check with the manufacturer or in the manual
-
and
- IOMMU (AMD-Vi) option enabled in BIOS (ASrock or ASUS 880/990FX and most server boards)
Video card is your choice. I suggest using a newer Radeon for now because it has good compatibility with Xen passthrough and HD audio on the card which means you won't need to pass through the motherboard audio to get sound from the VM. Of course, you could pass motherboard or another discrete Audio device through too.
Step 1: Download Fedora 16 x86_64 (Click to show)
This is the distribution I used because I was having too many errors with Debian 6.0.3 / Ubuntu 11. I actually found Fedora 16 to be more compatible with my system and a very diversely featured distribution. I highly recommend using F16 for this guide, as I know it works.
Step 2: Enable IOMMU/VT-d in the BIOS (Click to show)
See your motherboard manual for more info. This will be in northbridge options and listed as VT-d for intel and IOMMU or AMD-Vi for AMD. (Note that VT-x and AMD-V are not enough for this tutorial)
Disclaimer -- Back up any and all data you wish to keep before attempting this guide. I am working on a version that preserves data, but for now this is where I am.
Step 3: Install Fedora 16 as the base system (Click to show)
Boot the CD which is a live cd for F16 and run the install program from the applications list. Follow the prompts. Most importantly, choose "Specialized Storage Devices" which will let you set up software/ firmware RAID or otherwise and select the install medium. Next, choose a computer name. I chose the name dom0.xenhost which means the computer is called xenhost and the operating system is called dom0. The Root account is your administrator, so be sure to set a safe password.
Step 3a: Partitioning -- Use Create Custom Layout (Click to show)
Step 3a: Partitioning -- Use Create Custom Layout (Click to show)
I suggest creating a /boot partition of about 1G and using ext3.

The next partition you set up should be a LVM physical volume of whatever size you want.

Make sure it is big enough to fit your host (dom0) and guest (domU) operating systems. The dom0 volume should have at LEAST 12G, but if you have room I suggest 20G.

Continue to create logical volumes at the sizes you want for the hardware you have.

Because I am using a SSD I did not set up a swap partition in an attempt to enhance the longevity of the drive. You can set up a swap partition, but place it outside the LVM. Don't fret, you can add more storage later if you will be using one of the VMs as a file server. Now just install the system and reboot into linux where you will finalize the install and create your user. I created a user called xenhost. Don't forget to check the box to add the user to administrators.
For this next session you will be using the terminal program provided with linux. You will be asked to use 'su' and 'sudo' commands which will require a password. When the prompt comes up, type your password. It is being entered even when no '*' show up.

The next partition you set up should be a LVM physical volume of whatever size you want.

Make sure it is big enough to fit your host (dom0) and guest (domU) operating systems. The dom0 volume should have at LEAST 12G, but if you have room I suggest 20G.

Continue to create logical volumes at the sizes you want for the hardware you have.

Because I am using a SSD I did not set up a swap partition in an attempt to enhance the longevity of the drive. You can set up a swap partition, but place it outside the LVM. Don't fret, you can add more storage later if you will be using one of the VMs as a file server. Now just install the system and reboot into linux where you will finalize the install and create your user. I created a user called xenhost. Don't forget to check the box to add the user to administrators.
For this next session you will be using the terminal program provided with linux. You will be asked to use 'su' and 'sudo' commands which will require a password. When the prompt comes up, type your password. It is being entered even when no '*' show up.
Step 4: Update your system and install Xen (Click to show)
Updating the system is very easy. Log in and open a terminal. Type
and let the system update, if you want.
If you updated, reboot into the new kernel and updated system.
Open the terminal again to install Xen and type:
Update grub2:

Save and exit after editing like this
Disable selinux:
change the line that says "enforcing" to "permissive"
Save and Exit.
Code:
[xenhost@dom0 ~]$ sudo yum update
If you updated, reboot into the new kernel and updated system.
Open the terminal again to install Xen and type:
Code:
[xenhost@dom0 ~]$ sudo yum install xen
Code:
[xenhost@dom0 ~]$ su
Password:
[root@dom0 xenhost]# mv /etc/grub.d/10_linux /etc/grub.d/21_linux
[root@dom0 xenhost]# gedit /etc/default/grub

Save and exit after editing like this
Code:
[root@dom0 xenhost]# grub2-mkconfig > /boot/grub2/grub.cfg
Disable selinux:
Code:
[root@dom0 xenhost]# gedit /etc/selinux/config
Save and Exit.
Step 5: Reboot into Xen and install more stuff :D (Click to show)
Code:
[xenhost@dom0 ~]$ sudo yum install libxml-devel python-lxml virt-manager libvirt
[xenhost@dom0 ~]$ sudo service libvirtd start
Next we should set up SSH so that you can have remote access to your host. This is a must if you do not have another video card or controller. before being fully passed through, your display will go black and you will need access.
Go into applications and go to firewall
Make sure that port 22 is allowed to be connected to

Then reload the firewall
Step 5a: Create and Copy Install ISO to disk (Click to show)
This step depends on you having a windows install disk and the means to Create a .iso file of your install disk. name the file win7ult.iso (or whatever you want to call it) and transfer it to your home folder in the xenhost linux install. This is critical for the configuration file later.
Code:
[xenhost@dom0 ~]$ su
Password:
[root@dom0 xenhost]# lspci
00:00.0 Host bridge: Intel Corporation 2nd Generation Core Processor Family DRAM Controller (rev 09)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port (rev 09)
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
00:16.0 Communication controller: Intel Corporation 6 Series/C200 Series Chipset Family MEI Controller #1 (rev 04)
00:1a.0 USB Controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05)
00:1b.0 Audio device: Intel Corporation 6 Series/C200 Series Chipset Family High Definition Audio Controller (rev 05)
00:1c.0 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 1 (rev b5)
00:1c.3 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 4 (rev b5)
00:1c.4 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 5 (rev b5)
00:1c.5 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 6 (rev b5)
00:1d.0 USB Controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (rev 05)
00:1f.0 ISA bridge: Intel Corporation H67 Express Chipset Family LPC Controller (rev 05)
00:1f.2 SATA controller: Intel Corporation 6 Series/C200 Series Chipset Family 6 port 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: ATI Technologies Inc Cypress [Radeon HD 5800 Series]
01:00.1 Audio device: ATI Technologies Inc Cypress HDMI Audio [Radeon HD 5800 Series]
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)
04:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8191SEvB Wireless LAN Controller (rev 10)
05:00.0 USB Controller: Device 1b6f:7023 (rev 01)
Code:
[root@dom0 xen]# gedit /etc/xen/win7a.sxp
Copy and paste this code below into the file
Code:
kernel = "hvmloader"
builder='hvm'
memory = 4096
# set your memory however you want. 4G is enough for me, and i want the
# rest for the host and the other VM
name = "win7a"
vcpus=5
# I have 8 threads, 5 was a good number for me. 4 to game, 1 to run the rest
pae=1
acpi=1
apic=1
vif = [ 'type=ioemu, bridge=virbr0' ]
disk = [ 'phy:/dev/vg_dom0/domUa,hda,w' , 'file:/home/xenhost/win7ult.iso,hdc:cdrom,r' ]
# More disks can be added later using this same method. The path to the device or a file can be added
# After the first comma is how the device will appear. "hda" is the first, "hdb" the second etc. "sda" format is also acceptable"
# had will appear as IDE, sda will appear as SCSI or SATA. After the second comma "r" means read only and "w" is for write
device_model = 'qemu-dm'
boot="dc"
sdl=0
opengl=1
vnc=1
vncpasswd=''
stdvga=0
#nographic=1 #!!! only uncomment this if you are using win8 or are trying to get a nvidia card to work
serial='pty'
tsc_mode=0
soundhw='all'
usb=1
usbdevice='mouse'
gfx_passthru=0
# Leaving this as 0 is how it works for me with Radeon HD cards
# You can change this later for iGPUs or nVdia if needed.
# Try it with 0 first
pci=[ '01:00.0', '01:00.1' , '00:1d.0' ]
# These values are the ones you found out by doing the lspci command earlier
# I also passed through an entire USB controller for native support
Windows 8 Preview Only (Click to show)
I have confirmed win8 preview works well with passthough. To get it to work properly remove the pci devices from the above config file. next use the following code:
Select the VM you just started and click open. Then click on console. From there, just follow a normal install of the OS. After you are done installing, shut down the VM from the OS. Then:
Now go back and edit the configuration file above, adding this line:
Code:
[root@dom0 xenhost]# xm new /etc/xen/win7a.sxp #or whatever you called the file
[root@dom0 xenhost]# xm start win7a #or whatever you called the VM in the config file
[root@dom0 xenhost]# virt-manager
Code:
[root@dom0 xenhost]# xm shutdown win7a #domain name
[root@dom0 xenhost]# xm delete win7a #or your domain name
Code:
nographic=1
Step 6a: If you only have one video card: (Click to show)
Tunnel in using SSH and x11 forwarding
Connecting From Windows: Xming Putty (Click to show)
Allowing OSX to Connect: XQuartz/X11 (Click to show)
Connecting from Linux or OSX: In a terminal window: (Click to show)
Connecting From Windows: Xming Putty (Click to show)
Start by downloading xming and putty
Follow a default install of Xming and then run putty. Then follow these steps:
Input your Xen machine's IP address

Then open the ssh + menu and click on x11. Make the fields look like this photo:

After clicking open, a terminal window will appear and ask for your login. Use xenhost like you did from within linux. Then login as su like you did before and run the virt-manager command. You should end up with something like this:

Follow a default install of Xming and then run putty. Then follow these steps:
Input your Xen machine's IP address
Then open the ssh + menu and click on x11. Make the fields look like this photo:
After clicking open, a terminal window will appear and ask for your login. Use xenhost like you did from within linux. Then login as su like you did before and run the virt-manager command. You should end up with something like this:
Allowing OSX to Connect: XQuartz/X11 (Click to show)
Install x11 or XQuartz (OSX 10.6.3 or newer, older versions or vanilla x11 will work)
Connecting from Linux or OSX: In a terminal window: (Click to show)
Replace IP with Xen host IP
Connecting from Host with Secondary Video Card: Simply (Click to show)
Code:
Paul-Youngs-MacBook-Pro:~ paul$ ssh -X xenhost@192.168.1.3[/SPOILER]
xenhost@192.168.1.3's password:
Last login: Tue Jan 24 22:38:03 2012 from 192.168.1.5
[xenhost@dom0 ~]$ su
Password:
[root@dom0 xenhost]# virt-manager
Connecting from Host with Secondary Video Card: Simply (Click to show)
Make sure you are running your main display from the secondary card. If this means you have to leave the display unplugged from the primary, it is ok. In the terminal:
Code:
[xenhost@dom0 ~]$ su
Password:
[root@dom0 xenhost]# virt-manager
Step 7: Creating VMs and passing through devices (Click to show)
From your console:
No matter what you did in step 6a you should have a virt-manager window being displayed:

Select win7a then click Open then click Details, You should end up here:

Then click Add Hardware and select PCI Host Device

Select the Audio portion of the GPU first and click finish.
-- Ignore all errors!

Repeat for the GPU portion and USB host device(s) and ignore all errors.
If they show up, all is good and they are ready to be used by the VM. As you can see though, the USB device is not listed in the virt-manager menu for win7a. This is not a problem, if you are missing anything there, use this command:
The numbers are the device that was not passed through to the win7a domain. A check back in the virt-manager should now show all 3 being passed through.
At this point just cancel out of the menus and go back to the virt-manager. Open win7a again and click run. IF everything is right, you should follow the steps of a standard windows install. The VM will restart a few times and all you have to do to see the VM again is close the window and reopen it from the virt-manager program. Download your video driver, install and restart. If everything went well you will have fully accelerated sound and video on your system and the guest will have full control over the graphics card.
NOTE: If installing GPLPV drivers, do so before activating windows!!!
Tada!Code:
[root@dom0 xenhost]# xm new /etc/xen/win7a.sxp
No matter what you did in step 6a you should have a virt-manager window being displayed:

Select win7a then click Open then click Details, You should end up here:

Then click Add Hardware and select PCI Host Device

Select the Audio portion of the GPU first and click finish.
-- Ignore all errors!

Repeat for the GPU portion and USB host device(s) and ignore all errors.
Code:
[root@dom0 xenhost]# xm pci-list-assignable-devices
0000:01:00.0
0000:01:00.1
0000:00:1d.0
If they show up, all is good and they are ready to be used by the VM. As you can see though, the USB device is not listed in the virt-manager menu for win7a. This is not a problem, if you are missing anything there, use this command:
Code:
[root@dom0 xenhost]# xm pci-attach win7a 00:1d.0
At this point just cancel out of the menus and go back to the virt-manager. Open win7a again and click run. IF everything is right, you should follow the steps of a standard windows install. The VM will restart a few times and all you have to do to see the VM again is close the window and reopen it from the virt-manager program. Download your video driver, install and restart. If everything went well you will have fully accelerated sound and video on your system and the guest will have full control over the graphics card.
NOTE: If installing GPLPV drivers, do so before activating windows!!!
Now if you had a second card, you could make a second fully functional system! You might want to create another system to use as a minecraft server. No problem, just install another VM to use for that and allocate however much you want to it. Use virt-manager or configuration scripts to create whatever you want -- the possibilities are endless.
Thanks for sticking in there!
Help me by trying this and reporting any errors. I want to make this easier and more compatible too, so any suggestions are welcome.Best,
Dizzy4
Edited by dizzy4 - 1/12/13 at 10:21pm


















