Setup & Software Discussions
2014 13" MacBook Pro [4th,2C,U] + RX 580 @ 16Gbps-TB2 (AKiTiO Thunder2) + Linux ...
 

2014 13" MacBook Pro [4th,2C,U] + RX 580 @ 16Gbps-TB2 (AKiTiO Thunder2) + Linux Fedora 30 [Espionage724]  

  RSS

Espionage724
(@espionage724)
Active Member
Joined: 3 months ago
 

IMG 0110 copy

 

 


Specs:

  • CPU: Intel i5-4278U (HT enabled)
  • RAM: 8GB 1600MHz
  • iGPU: Intel Iris Graphics 5100
  • External Display: TCL 55S405 (55" 4K UHD HDR, Monoprice HDMI cable #15427)
  • Operating System: Fedora Workstation 30 (5.2.8-200.fc30.x86_64)
  • Graphics Stack: Mesa (19.2.0, gloriouseggroll/mesa-aco Copr for ACO)
  • Enclosure: AKiTiO Thunder2 (front-panel bent for long cards, outer shell not being used)
  • GPU: XFX Radeon RX 580
  • Power Supply: CORSAIR CX750M V2 (2017 Edition, CP-9020154-NA, 750W)


Power Delivery:

  • GPU being powered by standard 8-pin
  • Thunder2 being powered by the PSU's CPU 4-pin with a barrel connector (shown in later pic on album; wires are just pushed into 2 of the 4-pin holes, nothing fancy :p)
  • PSU always-on via typical paperclip PSU test method (can power off the PSU itself via rear switch)
  • GPU is stable (as in doesn't catch fire after 5 minutes :p) at max load (via GpuTest fur ring burner) with power limit maxed (145W to 217W)


Instructions for iGPU-only:

  1. Power-on MacBook without eGPU connected
  2. Win (Intel iGPU and built-in display just-works no problem; can connect external display over built-in HDMI port)


Notes for iGPU-only:

  1. I have not been able to figure out how to hot-plug the eGPU later on in this situation; the amdgpu kernel driver crashes while trying to initialize the GPU (dmesg pastebin; hot-plug starts at line 1017)
  2. If the above is figured out, this would be more ideal over the rEFInd method described later


Instructions for eGPU-only:

  1. Power-on MacBook with eGPU connected
  2. Win (Intel iGPU and built-in display are disabled and unusable; eGPU is primary GPU)


Notes for eGPU-only:

  1. I find this ideal since I use the MacBook docked/desktop-style and connect an external keyboard/mouse/speakers to it
  2. Hot-plugging the eGPU in this set-up is untested (I'd expect failure since it's the only GPU)


Instructions for eGPU acceleration with built-in display:

  1. Write rEFInd's flashdrive image to a USB or SD card that you're willing to lose data on and use for booting from (I recommend an SD card; only need at the most 10MB of space)
  2. Download and copy apple_set_os.efi to the media you installed rEFInd (EFI/custom/apple_set_os.efi)
  3. Power-on MacBook with the eGPU connected, while holding the Option key to go to boot media select
  4. Select the install media that has rEFInd
  5. From rEFInd's boot loader, select apple_set_os.efi to boot (far-right side)
  6. After selecting that, it'll do something, and then put you back to rEFInd's boot loader
  7. Select your Linux distro's entry (likely first entry on far-left side; in Fedora 30's case, it shows as macOS)
  8. Win (see below)


Notes for eGPU acceleration with built-in display:

  1. Intel iGPU is the primary GPU; DRI_PRIME=0 selects this GPU, but this isn't explicitly needed unless you're globally setting DRI_PRIME elsewhere
  2. eGPU is secondary; DRI_PRIME=1 selects this GPU
  3. So to simply use the eGPU for accelerating a game being displayed on the built-in display, you start it with the DRI_PRIME=1 environment variable
  4. I'm unsure how multiple eGPUs and/or a built-in dGPU would integrate, but I imagine they'd be all able to be selected with increasing the number with DRI_PRIME (2, 3, 4, etc; can likely use glxinfo to figure out what GPU is what); would possibly have to manually mess with Xorg offload sink providers and stuff too if it isn't automatically handled


Feedback:

  • Getting eGPU acceleration with the built-in display was the most frustrating part of this
  • I originally was trying to get apple_set_os.efi to chainload with Fedora's GRUB, ended up breaking GRUB a few times and needing to re-install
  • Using a separate SD card with rEFInd allows me to keep the main OS clean (no GRUB chainloading mess), and allows me to keep the 3 distinct GPU modes relatively separate (don't have to worry about the iGPU potentially interfering when I want the eGPU used exclusively at home)
  • Under Linux, I'm very impressed this seemingly just-works, and with decent performance (GpuTest on the eGPU gets the same average FPS for me as desktops with PCI-E 2.0 and 3.0 ports)
  • I was trying to decide between macOS and Linux for primary usage, and in the end went with Linux due to macOS not having an easy way for me to do a custom resolution without SwitchResX (thread; I need a custom CVT-RB [email protected] resolution for my TV)
  • For using my MacBook docked/desktop-style, I need more than 2 USB ports ideally; unfortunately I don't have a hub currently
  • System didn't wake from suspend in eGPU-only mode; woke fine and had a functional eGPU still when using the eGPU to accelerate with the built-in screen
  • Hot-plugging the eGPU when using it to accelerate with the built-in screen caused the system to soft-lock (was still seemingly active with the keyboard/mouse, but failed to sync disk changes or respond)
  • I tested Diablo III (DXVK) and Guild Wars 2 (D9VK); both ran pretty good without complaints.
  • Played some hours of FFXIV (DXVK) with no issues (no drop-outs, unexpeceted perf drops, etc) and expected performance; game consistently caps the GPU usage between 90-100% at 4K quite nicely


TODOs:

  • Figure out how to use the actual intel and amdgpu Xorg DDX drivers (I currently just use modesetting); my usual xorg.conf snippet didn't seem to want to assign the right entry for the BusID for the eGPU, but apparently I can get it if I also create Screen sections for the snippet; not sure if this would offer any real benefit since modesetting seemingly works fine nowadays
  • Test Wayland (I use Xorg primarily since it handles the mouse and cursor properly)
  • Test eGPU set-up out of the house with built-in screen (don't really expect any problems with it)
  • Check if GNOME shows the option to use high-performance GPU when using the eGPU with built-in display
  • Linux claims the GPU is running at 2.5 GT/s @ x4 (PCI-E 1.0 speeds), but according to a mailing list post, this may be ok? GpuTest FPS is about the same as 2.0 and 3.0 PCI-E speeds. May need to look more into this.
  • See if eGPU hot-plug works any differently with older AMD or NVIDIA GPUs


Heaven Benchmark Scores:

  • Custom preset, High quality, Anti-aliasing off, Tessellation, Stereo 3D, and Multi-monitor disabled (image)
  • 217W power limit for the RX 580 on Linux (scores didn't vary much at all on either eGPU mode with the default 145W limit)
  • macOS result from 10.14.6 with lid shut, external 4K display connected over HDMI, and automate-eGPU EFI used

 

  FPS Score Min FPS Max FPS Resolution
eGPU-only (Linux) 93.1 2344 25.1 181.9 1920x1080 (1080p)
eGPU + built-in display (Linux) 77.2 1945 26.2 111.2 1920x1080 (1080p)
eGPU-only (Linux) 20.9 527 10.9 50.7 3840x2160 (4K)
eGPU-only (macOS) 17.8 449 7.2 38.3 3840x2160 (4K)
This topic was modified 3 months ago

MacBook Pro (Retina, 13-inch, Mid 2014)
AKiTiO Thunder2
XFX Radeon RX 580
macOS Catalina 10.15
Fedora Workstation 31 Beta


itsage and nando4 liked
ReplyQuote
nu_ninja
(@nu_ninja)
Estimable Member
Joined: 2 years ago
 

@espionage724

You may want to try changing the kernel parameters pci=hpiosize= and hpmemsize=. I couldn't get hot-plug working with my TB1 setup, but yours seems to be getting further than mine did. KarateKid430 posted some good info here which seems to be still relevant to hot-plugging certain egpus.

Mid-2012 13" Macbook Pro (MacBookPro9,2) TB1 -> RX 460/560 (AKiTiO Node/Thunder2)
+ macOS 10.15+Win10 + Linux Mint 19.1


ReplyQuote