eGPU with a Thinkpad x220 from 2011
Something I’ve been quite enamored with recently is ExpressCard. It’s an older standard that’s conceptually similar to Thunderbolt; basically, it’s a slot in the laptop that can provide a USB 2.0, USB 3.0, or PCI Express interface.
My thought on learning this was “oh hey, can I break that PCIe interface out into a normal PCIe port?”. Luckily other people have had the same idea and there’s some cool stuff on the market that do this. This isn’t meant to be a comprehensive guide for what’s out there, but the folks over at egpu.io have a great buyer’s guide for this stuff if you want to try it for yourself.
Now, don’t expect the world from this. On the x220 it’s only a single PCIe gen2 lane, which comes out to 500MB/s (4 gigabits) of bandwidth available. Still, there’s a lot you can do with that, and it’s a huge step up from the ol’ Intel HD 3000.
I ended up getting the “EXP GDC Beast”. This thing is actually designed to work with a number of different connectors, and you can find it shipping with a cable that has an HDMI plug on one end and ExpressCard, m.2, or miniPCIe on the other end. It’s not actually HDMI, they just used that connector since it’s reasonably durable and has a lot of pins. There’s a few different hardware revisions out there, which are probably stability improvements. I ended up with a v8.5c, but I don’t know how much that matters in practice.
For power, you have two options. The simplest is to plug an ATX power supply into the Beast using the adapter that comes with it, and then use the ATX PSU to power the GPU as well if you need to. The other option is to use a 12v barrel supply of up to 150W. The device has a MOLEX 5557 6-pin output (seen on the right) that you can use for auxiliary power for the GPU when you’re using a barrel supply.
This thing came with some pretty spectacular packaging btw.
Personally I can definitely say my life has been changed. I’m not sure if I’ve broken spacetime enough to create infinite possibilities yet, but I’m working on it. I’m sure I just need to tweak the drivers a bit for that one.
Buying the parts
Outside of China, you can find the EXP GDC Beast on AliExpress, eBay, or Amazon, pick your poison there. All the sellers seems to be reselling the product, because when I got the thing it had a QR code linking back to a Taobao user page for who I assume is the original seller. I can’t actually confirm that because I’d need to log in to a Taobao account to view the page, but if you want to check for yourself it’s expgdc.taobao.com.
Aside from Taobao, if you want to find the cheapest option you’re best off looking at AliExpress, with eBay as a second choice. Both of those ship from China though, so if you want it faster you can find it on Amazon. I was only able to find one seller on Amazon that sold it with the ExpressCard cable. Here’s a link to that page if you’re looking for it. It’s not an affiliate link, I’m not about that life.
Finding the right search terms for the aux power cable was also a pain. I used to think I had a surefire way to find it but it turns out I got some cables where one half was the wrong size entirely. Right now I’m using this 8-pin to dual 6+2pin adapter, with a 6-pin plugged into the Beast and an 8-pin plugged into my GPU’s 6-pin port. You could probably do better if you felt like crimping your own cables but I don’t.
The Full Hardware Setup
Yeah so this looks absolutely incredible with everything plugged in. We are truly living in the cyberpunk future, and I DON’T mean like 2077.
This picture is actually from before I got the software side working, but while basking in the glory of the fully functional setup I forgot to snag another picture. Rest assured though, this is representative of how the hardware side of things looked when I got it working.
We’ve got a Radeon HD7770 plugged into the dock, powered from an ATX supply in the PC case behind it, hooked into my x220. The HD7770 is actually from 2012 so it’s era-appropriate to the laptop, which I particularly enjoy.
Getting this all running in Linux was surprisingly painless. In the BIOS I just had to make sure I actually had the ExpressCard port enabled, and the device showed up in
lspci right after that. At this point if you wanted to plug monitors into the GPU you’d just need to set up your Xorg config the same way you would if you had plugged it into a desktop. For this card in particular I also had to add
radeon.si_support=0 amdgpu.si_support=1 to my kernel parameters, because this card defaults to
radeon but I needed
amdgpu for Vulkan and PRIME.
Speaking of PRIME, what is that? You can see the arch wiki page on it for the details, but the gist is it’s a way to render an application on one GPU and display it on another one. In this case we’re going to render on the eGPU and display through the iGPU onto the laptop display.
If your immediate thought is “ok but didn’t you say we only had 500MB/s of memory bandwidth?”, well, yeah. It could be worse though. My laptop has a 1366x768 pixel display, which works out to
1366 * 768 * 24bpp * 60fps bits per second, or about 200MB/s. That’s 2/5 of our memory bandwidth, but that still leaves 300MB/s which is plenty for a lot of older games. It’s better than the iGPU anyway, and I can always plug it into a monitor for better performance.
To get PRIME working I added these lines to my
Section "Device" Identifier "Card1" Driver "amdgpu" Option "DRI" "3" EndSection Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 Inactive "Card1" # Device for your second GPU EndSection
After restarting X11 I ran
xrandr --setprovideroffloadsink 1 0 and I was good to go! Then for AMD cards all you have to do is export
DRI_PRIME=1 to any application you want to offload to the GPU.
So how well does it run games?
I don’t have hard numbers for you, but I did a before and after test with Portal 1 at max graphics settings. the HD 3000 could run it, but was chugging along at 15fps and was a stuttery hell. With
DRI_PRIME=1 this went up to a nice smooth 60fps with no performance problems to speak of, so I’m calling that a success. Also since this card supports Vulkan, I can even play Windows games with DXVK.
Honestly I’m just really impressed with how painless this whole thing was. Props to all the work the driver devs out there do because I was expecting this to be much more of an ordeal. That’s the upside to just having PCIe to do whatever you want with I suppose. I’m just piggybacking on the work that’s been done for laptops with hybrid graphics and desktops, and nobody needed to write specific support for this usecase.
Anyway, that’s been my hardware adventures the past couple days. I have some ideas of more cursed directions to go with this adapter but I’m leaving it there for now. Thank’s for stopping by!