2011 13" MacBook Pro [2nd,2C,M] + RX 570 @ 10Gbps-TB1 (AKiTiO Thunder2) + Linux Ubuntu 19.04 [TuxThePenguin0]
This build no longer exists
Due to a recurring fault in the design of the laptop where it consistently damages it's hard drive cables I have moved to a new laptop, the Thinkpad W540, which also works with this eGPU as shown here
Late 2011 Macbook Pro 13"
Therefore there is no dGPU and the CPU is an i7 2640m
Has been upgraded to 12GB of RAM with a 500GB SSD and a 500GB HDD
GPU is an MSi RX 570
Enclosure is an Akitio Thunder2, I have soldered power wires to the back of the larger PCIe adapter PCB and have cut off the end of the internal metal frame to allow the relatively long RX 570 cooler to fit
The enclosure is powered by a 500W Thermaltake TR2 PSU that I used because I already had it on hand
This is where things got very difficult and plans ended up changing slightly during setup.
For starters the original plan was to use a 200W XBOX 360 power brick but this did not end up working, the GPU did power on and work (in Linux anyway) but as soon as it tried to change core clock speed the GPU would lockup and usually put Linux into a broken state that required a hard reboot.
My current theories as to why this problem occured are that either the GPU spikes power usage above the 200W limit or the PSU cannot keep up with the sudden increase in power demand and the voltage drops too low for the GPU to run on.
Linux (Ubuntu 19.04):
This has gone much more smoothly, on a fresh install of Ubuntu all I have had to do is plug in the GPU before booting up the laptop and it "just works".
By default the X11 server runs on the iGPU and streams the completed frames to the eGPU if any monitors are connected to it, due to the slow Thunderbolt 1 link this runs at a painfully slow framerate of roughly 5-10FPS
In this setup it is possible to run apps on the eGPU by setting the environment variable DRI_PRIME=1, this is useful for an internal monitor setup but not for external monitors because it streams to the iGPU and then the iGPU sends completed data back to the eGPU, this uses much more bandwidth than is necessary and results in even worse performance on an external monitor.
I have the eGPU running in Linux correctly now!
For use with the internal monitor it works without any configuration and accelerates applications without issue using DRI_PRIME=1 although I do not know what the drop in performance is like since I haven't tested it and will wait for my Thinkpad before I bother to do any tests
For use with external monitors all it took was /usr/share/X11/xorg.conf.d/50-radeon.conf containing the configuration needed to tell X11 to run the X server on the AMD GPU, with this configuration the internal monitor freezes on a black screen with a cursor and external monitors run nicely off of the eGPU, games and other 3D software also benefit from the RX 570s vastly improved performance in this mode
This has been a very "eventful" eGPU setup that has taken a couple of months to get working, however this is mostly due to rare edge cases with specific setups, apart from the power supply that is, I just didn't do my research for that so I will bear the consequences.
Also I briefly tried to get MacOS to work with the eGPU (this is a Macbook after all) however I use MacOS Mojave and since this is a 2011 Mac which does not support Metal I need to use dosdude1's patches to get Mojave to install, unfortunately, as far as I know these patches are not currently compatible with eGPUs and likely never will be so unless I decide to downgrade to High Sierra (which is very unlikely) I will probably just stick to Linux for eGPU support.
Hey I think we talked on the subreddit when you were getting this setup. Glad to see your build guide! Too bad windows isn't working but FWIW I see pretty much exactly the same thing. The DSDT large memory area is present and my Thunderbolt 3 eGPU maps to it, but I can't get the Thunder2 to in windows.
Yeah we did talk on the subreddit 🙂 , some of these issues took a fair bit of work, currently my only theory with the memory allocation is that Windows allocates the Thunderbolt controller before the eGPU and the driver doesn't expect large devices so only tells Windows to give the TB controller a relatively small address space, therefore not giving the GPU enough room inside that allocated space to be used, if that is true it may be possible to make a modified driver that requests a larger address space to work around this issue without DIY eGPU setup but I can't be sure as I have almost no experience with Windows drivers.
Also my cable should arrive in a couple of weeks so Im excited to get this setup running and test the performance as well as some other things.
Well due to some issues with the MacBook (it's eating hard drive cables and Im sick of buying new ones) I am buying a new laptop which may arrive before the power cable for the eGPU does, if the cable arrives first I will try to get the eGPU working in Linux until the new laptop does but that may not be possible either since the MacBook doesn't seem to want to boot into Linux anymore either 🙁
When the new laptop arrives I will post a new build guide, it also has Thunderbolt 2 but is not a Mac so Im interested to see how things go