Joined
·
2,163 Posts
Dizzy's Guide to Creating a Gaming VM
Beta version 0.20.1
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:
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:
For AMD this requires:
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:
Step 2:
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:
Step 4:
Step 5:
Step 5a:
Step 5b:
-- Virtual Drives should now be allocated --
Step 6:
Step 7:
Tada!

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
P.S. If you are a linux mint user, please take a look at PowerHouse's guide
It might be more complex than this, but it seems to work very well. Either guide when used properly will give good results.
Beta version 0.20.1
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 (WIP)
- 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
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:
(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:
- 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:
Fedora 20 Download -- Choose your flavor (Warning! LXDE does not currently have GUI bluetooth support)
Step 2:
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:
Boot the CD which is a live cd for F20 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 xenhost.xenhome. The Root account is your administrator, so be sure to set a safe password.
Step 3a:
Step 3b:
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 3a:
This is if you wish to contain your virtual machine disks as files, not as partitions.
- Select the disk on which you wish to install Fedora.
- Select other or custom partitioning
- Select recommended layout
- Delete the /home partition
- Resize the / partition to the largest it will go
- Continue the installation
Step 3b:
For more advanced users:
You can create an LVM setup and manage your VMs disks this way or you could even add custom mount points for each VM. Please do not attempt unless you are a power user or want to do some research on linux partioning and LVM storage.
You can create an LVM setup and manage your VMs disks this way or you could even add custom mount points for each VM. Please do not attempt unless you are a power user or want to do some research on linux partioning and LVM storage.
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:
Updating the system is very easy.
1. Download and install my kernel + headers with passthrough built in (I find that building it into the kernel is much more reliable and simpler than loading a module)
-- Kernel 3.12.8-300
-- Kernel-headers 3.12.8-300
2. After downloading the attachments just double-click them and install both
3. Install Xen (4.3.1 currently) In a terminal:
Code:
4. Update your GRUB2 bootloader
Disable selinux:
Code:
change the line that says "enforcing" to "permissive" or "disabled" -- I suggest disabled for new users
You can use whichever text editor you want. If you run Gnome, replace nano with gedit and if you run xfce or LXDE replace nano with leafpad
Save and Exit.
-- At this point your system is able to be booted with xen as the hypervisor --
1. Download and install my kernel + headers with passthrough built in (I find that building it into the kernel is much more reliable and simpler than loading a module)
-- Kernel 3.12.8-300
-- Kernel-headers 3.12.8-300
2. After downloading the attachments just double-click them and install both
3. Install Xen (4.3.1 currently) In a terminal:
Code:
Code:
$ sudo yum install xen
in a terminal:
Code:
Code:
Code:
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
in a terminal:
Code:
Code:
Code:
grub2-mkconfig -o /boot/grub2/grub.cfg
Disable selinux:
Code:
Code:
$ sudo nano /etc/selinux/config
You can use whichever text editor you want. If you run Gnome, replace nano with gedit and if you run xfce or LXDE replace nano with leafpad
Save and Exit.
-- At this point your system is able to be booted with xen as the hypervisor --
Step 5:
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.
Step 5a:
I have started using this method because it makes migrating and backing up virtual machines very easy.
- Determine the size of the main disk for the VM (I keep mine on SSD and use a virtual server to host other files)
- Create a directory to house your file(s)
Code:
Code:$ mkdir ~/virtual_disks
- Create blank files to house your VMs
Code:
Code:$ cd ~/virtual_disks $ dd if=/dev/zero of=~/virtual_disks/VM_diskname bs=1M count=size_in_Megabytes
- Repeat for all the VMs you wish to host
Step 5b:
I have started using the other method because it makes migrating and backing up virtual machines very easy. I know that LVMs are great too, but I am not an LVM master.
Please read the comments in the configuration file example to see how to use physical devices (LVM or physical partitions) as storage.
Please read the comments in the configuration file example to see how to use physical devices (LVM or physical partitions) as storage.
Code:
That is a sample of what my PCI devices look like. You can see the first thing on each line is the address of the PCI device. Write down the devices you wish to allocate to each virtual machine. Since I run 2 graphical virtual machines simultaneously, I have given each a video device and each a USB controller. I also dedicated my extra gigabit port to my media/file server and my wireless controller to my windows guest. The network bridge can handle all this, but I wanted extra fallback and throughput.
Code:
$ sudo yum install pciutils
$ 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:
Take notice of the entry that is your ethernet. Mine was titled p4p1. Be sure to write down the number after ether which is the MAC address.
Code:
edit the file to look like this. Replace the DEVICE= with the device and HWADDR with the ether you wrote down
Code:
then create the bridge
Code:
Edit the file to look like this:
Code:
Then restart the network
Code:
Code:
$ ifconfig
Code:
Code:
$ sudo nano /etc/sysconfig/network-scripts/ifcfg-p4p1
Code:
Code:
DEVICE=p4p1
HWADDR=94:de:80:xx:xx:xx
ONBOOT=yes
BRIDGE=xenbr0
DELAY=0
NM_CONTROLLED=no
BOOTPROTO=none
TYPE=Ethernet
Code:
Code:
$ sudo nano /etc/sysconfig/network-scripts/ifcfg-xenbr0
Code:
Code:
DEVICE=xenbr0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
BRIDGE_STP=on
Code:
Code:
$ sudo service network restart
Code:
Copy and paste this code below into the file
Code:
Save and exit
Code:
$ gedit /etc/xen/win8.sxp
Code:
Code:
# =====================================================================
# Example HVM guest configuration
# =====================================================================
# This configures an HVM rather than PV guest
builder = "hvm"
# Use this device model! Upstream qemu has poor support for GFX passthrough -- esp. intel
device_model_version = "qemu-xen-traditional"
# Guest name
name = "VM_name"
# Enable Microsoft Hyper-V compatibile paravirtualisation /
# enlightenment interfaces. Turning this on can improve Windows guest
# performance and is therefore recommended
viridian = 1
# Initial memory allocation (MB)
memory = 8224
# Number of VCPUS
vcpus = 7
acpi=1
apic=1
#pae=1
#PAE is 32-bit only
# Network devices -- You can leave this vif = [ '' ] if you want DHCP to do the work
vif = [ 'bridge=xenbr0,ip=192.168.40.41' ]
# Disk Devices -- Replace filename and OS_install.iso with the names you chose earlier
disk = [ '/home/xenhost/virtual_drives/filename,raw,hda,rw', '/home/xenhost/OS_install.iso,hdb:cdrom,rw' ]
boot = "dc"
#Passthrough devices are inserted, but will be commented out for the time being because we need to install first.
#gfx_passthru=1
#pci = [ '01:00.0', '01:00.1', '00:1a.0', '04:00.0' ]
#nographic = 1
vnc = 1
Step 6:
No PCI devices will be passed through for the install phase of this, step 7 will instruct on how to install drivers and pass devices through properly.
Install a VNC viewer.
Code:
Start the VM and connect to its VNC port.
Code:
Complete the install of the VM (in this case windows) and make sure it's stable (fully cycled through the reboots)
Repeat this for each VM
Install a VNC viewer.
Code:
Code:
$ sudo yum install tigervnc
Code:
Code:
$ sudo xl create win8.sxp
$ vncviewer localhost
Repeat this for each VM
This step may cause you not to have graphical access to the Domain-0 anymore. Especially if you have only 1 video card or plan on assigning them all. This can easily be solved by connecting to the computer from another network device via SSH. Enable SSH:
Code:
Code:
Insert a line:
Code:
Add onto the end of the line GRUB_CMDLINE_LINUX=
Code:
Add all the entries for devices you wish to pass through. Remember, if you want direct access to the computer, leave one video device unhidden and one USB PCI controller unhidden (unless you use PS/2).
Code:
When you reboot, be sure to select the proper entry for fedora WITH xen from the GRUB menu
Code:
Code:
$ sudo chkconfig sshd on
Tunnel in using SSH and x11 forwarding
Connecting From Windows:
Allowing OSX to Connect:
Connecting from Linux or OSX:
Connecting From Windows:
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:
Install x11 or XQuartz (OSX 10.6.3 or newer, older versions or vanilla x11 will work)
Connecting from Linux or OSX:
Replace IP with Xen host IP
Code:
Code:
Code:
Paul-Youngs-MacBook-Pro:~ paul$ ssh -X [email protected][/SPOILER]
[email protected]'s password:
Last login: Tue Jan 24 22:38:03 2012 from 192.168.1.5
[B]Connecting from Host with Secondary Video Card:[/B]
[SPOILER=Simply]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][[email protected] ~]$ su
Password:
[[email protected] xenhost]# virt-manager
Code:
Code:
$ sudo nano /etc/default/grub
Code:
Code:
GRUB_CMDLINE_XEN="iommu=1"
Code:
Code:
xen-pciback.hide=(01:00.0)(01:00.1)
Code:
Code:
$ sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
Step 7:
Connect to your Domain-0 after rebooting (directly or over the network as laid out)
NOTE: If installing GPLPV drivers, do so before activating windows!!!
Start your windows virtual machine and connect via VNC:
Code:
Pass through the radeon GPU and Audio device with this command:
Code:
Replace VM_name with the name you gave it in the configuration file.
Download the latest catalyst driver and install. Then shutdown windows from the VM and turn it off from the console:
Code:
Edit your configuration and uncomment the pci = [] line (remove #)
Be sure to reboot the entire system and restart the VM. Wait a few minutes for windows to update the devices and you should have a fully graphical VM!
Code:
Code:
$ vncviewer localhost
Code:
Code:
$ sudo xl pci-attach VM_name 01:00.0
$ sudo xl pci-attach VM_name 01:00.1
Download the latest catalyst driver and install. Then shutdown windows from the VM and turn it off from the console:
Code:
Code:
sudo xl destroy VM_name
Be sure to reboot the entire system and restart the VM. Wait a few minutes for windows to update the devices and you should have a fully graphical VM!
This is MUCH easier. All you have to do is uncomment (remove #) in the pci = [] line and the gfx_passthru=1 line
Then start the VM:
Code:
You can actually complete a full install with the integrated chips because they are able to be reset without a hard reboot. Continue using this VM normally.
Then start the VM:
Code:
Code:
$ sudo xl create win8.sxp
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!

Best,
Dizzy4
P.S. If you are a linux mint user, please take a look at PowerHouse's guide
It might be more complex than this, but it seems to work very well. Either guide when used properly will give good results.