2010 12" Lenovo ThinkPad X201 [1st,2C,M] + GT 1030 @ 2Gbps-EC1 (EXP GDC 8.5c) + ...
 
Notifications
Clear all

2010 12" Lenovo ThinkPad X201 [1st,2C,M] + GT 1030 @ 2Gbps-EC1 (EXP GDC 8.5c) + Win10 // a story of DXVK, VRAM, bad cable, parallel 12V power bricks, Linux to Windows switch, DSDT and hotplug  

  RSS

Mojmír Křížek
(@mojmir_krizek)
New Member
Joined: 12 months ago
 

System specs:

Laptop model: Lenovo ThinkPad X201

CPU: i5-580M (the most powerful CPU of this laptop model)

RAM: 8GB (hard limit of 1st gen Intel Core CPUs)

 

eGPU hardware:

- EXP GDC 8.5c from AliExpress with the ExpressCard cable

- MSI GT1030 with 2GB memory, passively cooled, TDP of 30W

  - It's one of the most efficient desktop graphics card with consumption under 50W. That is important because then I don't have to use a big and loud ATX power supply and can use a less powerful generic 12 volt power supply.

- Two identical second hand 12 volt 3 amp laptop power bricks wired in parallel

   - This doubles the current to 6 amps but the EXP GDC with GT 1030 shouldn't ever need that much. It only has a TDP of 30 watts and 3 amps of a single power brick should be enough (P=U*I, 12V*3A=36W). Probably not a good idea unless the power bricks are identical, current could flow from one to the other and cause problems or fire. My father is an electrician and he approves this for my use. At some point wanted to upgrade to the AMD Radeon RX550 because it it also efficient but has 4GB of VRAM instead of 2GB. More on that later.

- Bucket with sand to extinguish the fire of the parallel power bricks

  - Just kidding, but I never keep them plugged in when I leave my house. At some point, one of the bricks was making a clicking sound but it kept performing just fine. It's fine now, but I am not comfortable keeping this plugged in all the time.

- 22" LG Flatron LCD monitor with Dsub and DVI and with a "4:3 mode" button:

  - The 4:3 mode is very handy for old games that don't support wide screen resolutions. This way you don't have to find for a widescreen fix mod for each game, instead you just press a button on your monitor. This is important because you want your speedometer to be round not oval, right?

 

Hardware problems:

When I was able get the GPU working in my OS, I noticed that the PC froze every few minutes and sometimes it froze after touching the eGPU cable (ExpressCard on one end, HDMI on the other). The cable was already damaged before I even started to really use it. That's pretty bad when a new EXP GDC ExpressCard cable cost about 70% of the whole unit and I didn't want to get another package from China. My father helped with this again. We needed a pinout (forget about getting that from the EXP GDC manufacturer) and I found one online thankfully (original post: https://egpu.io/forums/expresscard-mpcie-m-2-adapters/exp-gdc-hdmi-to-mpcie-wiring-diagram/#post-35379 and another . I also got a HDMI female SMD board connector so we could reach each HDMI pin with a multimeter probe reliably. After a bit of jiggling the cable while measuring continuity of the wires (as per the pinout), we found the ground wire was sometimes disconnecting. We fixed that with an external wire soldered between the HDMI connector chassis (which is the same as signal ground) and ground of the EC connector inside the EC adapter. The added wire was taped to the cable and there were no issues with this since. Not pretty, but it works. There were more urgent problems at the time.

 

Gaming stability problems:

When I started experimenting with this, I was using ArchLinux. Simply booting with the eGPU connected worked just fine, but hotplug didn't work. Since this GPU is capable of Vulkan, I used Steam's Proton with DXVK translation layer. The performance was alright. The problem was that after a while in any game (GTA 5, War Thunder, Minecraft), the game dropped to 10 FPS and restarting the game was required only to experience the same issue some 20 minutes later. This seemed like a temperature problem and indeed saw my CPU frequency dropping during the event of 10 FPS. I used the awesome remote system monitoring Linux tool Netdata to monitor and even record all the performance variables and analyze correlations. After a few weeks of struggling, I noticed the 10 FPS issue seemed to be triggered by loading a new location in a game. This made me pay attention to VRAM utilization and there was the problem. This was odd because in GTA 5 there is a indicator of how much VRAM is going to be utilized and I was withing the limit. Surely GTA 5 wouldn't go above what it said it needed, right? I used the nvidia-smi command line Linux tool to monitor the VRAM usage per app. For some reason, DXVK and Proton needed a bit of VRAM as well and that made the necessary difference to trigger VRAM swapping to system RAM over the slow PCIe x1 connection. And so I got an AMD Saphire RX550 with 4GB VRAM. This resolved the issue for the time.

 

Windows migration:

Being a programmer, using Linux made sense. Later, I stopped programming in my free time and only did that at work so I mostly used my private system for gaming. Proton (Valve's fork of Wine), Lutris (Linux game manager) and DXVK are all nice, but some peculiar games won't work correctly because e.g. they are not on Steam or they use Windows specific anti cheat (War Thunder) or just have don't work with Proton at all (e.g. Arma 3) or not enough people care about them for the to be at WineHQ AppDb. Also, a random system update might break the games that were working just fine without a warning. Lutris helps with that, but it's a lot of work to maintain your library of old games in working order. In Windows, you open Steam, click Install, click Play and it just works. This made me switch to Windows.

With Windows 7, booting with the eGPU plugged in was causing a bluescreen during boot so a new solution was required. After some struggle, I managed to find one. Turn on eGPU power, wait no more than 5 seconds, plug it into a powered off laptop, no more than 5 s, press power button, wait for GRUB (Linux boot picker) to appear on eGPU screen, <5 s, Ctrl+Alt+Del to reboot, <1 s, eject the ExpressCard adapter, let Windows boot normally, log in, wait for tray icons to start appearing (e.g. WiFi, sound, battery) and then hotplug the ExpressCard. Disc activity will go high for a few seconds and the eGPU monitor will turn on becoming the primary screen of the PC.

This worked until I needed to run a software which no longer works on Windows 7 so I had to switch to Windows 10. No, I won't use Windows 11, I want my system to be stable (says an ArchLinux user, lol, I migrated to Debian for a while before Windows 7 but Vulkan wasn't available on Debian 10).

But this complicated method did not work in Windows 10 for some reason. I was either getting error 12 or no error yet with no external screen (Win + P menu) available. I rolled up my sleeves and resumed my attempts to use Nando's Setup 1.35 PCI compaction and DSDT override to solve this for good.

 

Proper tools for the job:

I am probably going to use layman's term to describe this and maybe even make mistakes, but I hope people can have an easier time getting their head around this process.

DIY eGPU Setup 1.35

DIY eGPU Setup 1.35 is a software bundle by Nando (the guru of this forum) that greatly helps get eGPU working properly and to allow hotplugging. It costs money, but it is the proper tool. Also, Nando will help you with getting your setup up and running as a sort up support service for this paid software bundle. They provide support strictly over email.

So current problem is you are getting error 12 (not enough system resources or something) in the device manager under Display adapters. In short, it means the system peripherals addressing table (PCI table) is too small to fit your GPU together with all the USB hubs, touchpad, internal GPU, screen, RAM, power buttons, WiFI and stuff.

There is a whole guide dedicated to solving error 12. It has many variables (method 1, method 2) though and I will tell which worked for my ThinkPad X201. See DSDT override guide.

The easy solution would be to do a PCI compaction which kind of defragments the PCI table so there is enough space for you eGPU when you plug it in. You can try disabling some peripherals (Bluetooth, GSM modem, etc) in BIOS (ThinkPad X201 has that under Security, I think) as well. Setup 1.35 does this PCI compation for you if it can be done. Sometimes, the PCI table is so crowded the is no shuffling around possible. In that case, you have to extend the PCI table with some free space by doing a DSDT override.

DSDT is like a template for the PCI table, by loading a different DSDT template before you system boots, you make more room for other peripherals. You will want to use the Microsoft method to modify your DSDT as the guide suggests for X220 and other ThinkPads. Even though the guide says it's highly unlikely, for me, after modifying the DSDT using the MS method, there were no errors, only warnings.

So you have the DSDT loaded and have the "large memory area" available. The PCI table should have enough free space to assign to the eGPU.

This wasn't enough though, the graphics wasn't acting like an external screen, if I remember correctly. I had to run the PCI compaction as well (the most likely combination of settings worked, see PCI compaction help in Setup 1.35 using the F1 key).

nvidia-error43-fixer script

Whenever you see the error 43 in device manager, don't hesitate and run this script. I cannot exactly pin point where in the process I ran it, but I had to run it at some point.

Also, the drivers have to be installed at some point. It didn't work a few times at first, but somehow it worked and I cannot tell you why and when because I don't know. Sorry.

 

Fin

So now, I must boot my laptop without the eGPU, run the Setup 1.35, run the automated startup, skip waiting for eGPU by pressing enter (the vidwait command could probably be removed since I skip always), boot to Windows 10 and the system is ready for a hotplug at any point.

The hotplug is done by powering up the EXP GDC, plugging it in and using Win + P to switch to external screen. You may want to restart your browser (and other apps too) because YouTube videos might be lagging a bit because the browser still uses the internal GPU, I think.

The hot-unplug is done by switching to internal screen using Win + P, safely removing the eGPU using the "safely remove hardware and eject media" in Windows tray and only then unplugging it.

 

Benchmarks

CUDA-Z host-to-device memory bandwidth: 164MiB/s =~ 1.4Gbps

My own experience: Loading is slow, dynamic loading e.g. when an effect in game happens for the first time causes a lag spike, needs more bandwidth

Unigine Heaven Basic (on DX9): 350 (whoops, I must look into that, I was reaching 1300 at some point on Windows)

Unigine Heaven Basic but with DX11: 1200

Unigine Valley Extreme: 750

3DMark: 951 (GPU: 938, CPU: 1035)

This topic was modified 2 months ago
2010 12" Lenovo ThinkPad X201 [1st,2C,M] + GT 1030 @ 2Gbps-EC1 (EXP GDC 8.5c) + Win10 // a story of DXVK, VRAM, bad cable, parallel 12V power bricks, Linux to Windows switch, DSDT and hotplug [build link]  

nando4 liked
ReplyQuote