Gaming with an External GPU

Update 18/11/2014

This article is a couple of years old now and while my laptop is still going strong after an SSD upgrade, I've decided that it's time to upgrade my graphics card. I have ordered a MSI GTX 970 GAMING 4G Twin Frozr to replace my GTX 560Ti. This is a significant improvement. I ran a couple of benchmarks using 3DMark to compare the two.

3DMark test Card / Connection FPS data Overall Graphics Test Score
Skydiver (mid-range) Asus GTX 560Ti. Monitor connected to dock (i.e. frames being written to intel card and tden to monitor) Sky_Diver_Performance_Graphics_test_1: 37.85 Sky_Diver_Performance_Graphics_test_2: 36.01 8082
Skydiver (mid-range) Asus GTX 560Ti. Monitor connected to card. Sky_Diver_Performance_Graphics_test_1: 43.43 Sky_Diver_Performance_Graphics_test_2: 42.01 9352
Firestrike (high-performance) Asus GTX 560Ti. Monitor connected to card. Fire_Strike_Performance_Graphics_test_1: 13.73 Fire_Strike_Performance_Graphics_test_2: 11.84 2924

End update

I was recently bit by the gaming bug with the news of Steam coming to Linux. The best hardware I own is my ThinkPad T430 (Intel(R) Core(TM) i5-3360M CPU @ 2.80GHz/8GB RAM/320GB Hard Disk). The ThinkPad is an excellent laptop. The docking station is also brilliant. The Ivy Bridge HD4000 graphics are quite impressive on older games, especially when playing them on Windows. However, I soon decided that intergrated graphics were not going to cut it for more recent titles. I had heard of external GPU's working via ExpressCard before, and decided to look into it.

I found a very useful forum thread on notebookreview.com. After looking at the performance leaderboard for various implementation ideas, I decided that I needed the following implementation (taken from the Pre-purchase FAQ):

13. What do I need to run the fastest x1.2Opt link shown in the implementations?

The following ingredients are required for a x1.2Opt link:

1. A Series-6 system (Sandy Bridge) or Series-7 (Ivy Bridge) notebook with an expresscard slot.

2. A PCIe 2.0 compliant PE4L-EC060A 2.1b

3. A NVIDIA Fermi or Kepler class video card. A s/h GTX460-1GB OC edition with 336 cores being great bang-per-buck.

4. A power supply to drive your video card. A 203W Xbox 360 power supply a good to mod for < 198W video cards and providing portability. Or any ATX PSU with sufficient power on the 12V rail if don't need portability.

5. Latest NVIDIA desktop video drivers. They provide the ability to drive the internal LCD upon detecting a Intel 4500MHD, HD, HD3000 or HD4000 iGPU. When the iGPU and x1 link is found, PCIe compression engages gaining anywhere from 20-333% better performance over a x1 2.0 link without compression.
    

By this point, I'd decided that I was also going to run Windows for the purpose of playing the games. However, as I didn't want to dual-boot, I was going to install it to an external USB 3.0 disk and boot from that.

My shopping list for the build was as follows:

Apart from fitting all of the unused power supply cabling into the case, the build was easy. This was the end result:

eGPU rear

The trickiest part was getting Windows to work on the external hard disk. After some googling a found a program called PWBoot. This software allows you to install Windows to a USB disk, and then patch it to boot from the USB disk, or patch an existing system. I couldn't get the first option to work, so after some thinking I decided to try installing Windows onto the USB disk using the RAW disk access functionality in VirtualBox.

You can use a physical disk in VirtualBox in the following way:

VBoxManage internalcommands createrawvmdk -filename usb_disk.vmdk -rawdisk $usb_disk
    

Then you simply load that vmdk file as your virtual machine's hard disk. If you get a permissions error, it will be because your unix user is not a member of the "disk" group. You can add your user with the command:

sudo usermod -a -G disk $user
    

Once this was done, I used PWBoot to patch the disk from another virtual machine running Windows, and it booted.

I'm very pleased with the performance of the setup. One convenient thing is that you don't even have to plug your monitors into the graphics card for it to work. The graphics can be rendered on the eGPU and then displayed on the LCD display, or any other monitor connected to the laptop.

Here it is in use with my laptop dock:

eGPU connected