Title: External GPU on Linux review | |
Author: Solène | |
Date: 01 September 2021 | |
Tags: linux gentoo games egpu | |
Description: | |
# Introduction | |
I like playing video games, and most games I play require a GPU that is | |
more powerful than the integrated graphic chipset that can be found in | |
laptop or computers. I recently found that external graphic card were | |
a thing, and fortunately I had a few spare old graphic card for trying. | |
The hardware is called an eGPU (for external GPU) and are connected to | |
the computer using a thunderbolt link. Because I buy most of my | |
hardware second hand now, I've been able to find a Razer Core X eGPU | |
(the simple core X and not the core X Chroma which provides USB and | |
RJ45 connectivity on the case through thunderbolt), exactly what I was | |
looking for. Basically, it's an external case with a PSU inside and a | |
rack, pull out the rack and insert the graphic card, and you are done. | |
Obviously, it works fine on Windows or Mac but it can be tricky on | |
Linux. | |
Razer core X product | |
Attempt to make a picture of my eGPU with an nvidia 1060 in it | |
# My setup | |
I'm using a Lenovo T470 with an i5 CPU. When I want to use the eGPU, I | |
connect the thunderbolt wire and keyboard / mouse (which I connect | |
through an USB KVM to switch those from a computer to another). The | |
thunderbolt port also provide power to the laptop which is good to | |
know. | |
# How does it work? | |
There are two ways to use this device, the display can be connected to | |
the eGPU itself or the rendering could be done on the laptop (let's say | |
we only target laptops here) using the eGPU as a discrete card (only | |
rendering, without display). Both modes have pros and cons. | |
* External display Pros: best performance, allow many displays to be | |
used | |
* External display Cons: require a screen | |
* Discrete mode Pros: no extra wire, no different setup when using the | |
laptop without the eGPU | |
* Discrete mode Cons: performance penalty, support doesn't work well on | |
Linux | |
The performance penalty comes from the fact the thunderbolt bandwidth | |
is limited, and if you want to display on your screen you need to | |
receive the data back which will reduce the bandwidth allowed for | |
rendering. A penalty of at least 20% should be expected in normal | |
mode, and around 40% in discrete mode. This is not really fun but for | |
a nice boost with an old graphic card this is still nice. | |
eGPU on Linux with a Razer core X Chroma | |
eGPU benchmarks | |
# Configuration (NVIDIA) | |
It's quite simple now in 2023 (blog update), the first step is to | |
install nvidia-drivers. | |
## Discrete mode | |
- Add your user to the video group (at least on Gentoo) | |
- No `/etc/X11/xorg.conf` file is required | |
- The graphical card should appear in `nvidia-settings` under a "PRIME" | |
menu | |
- Use `prime-run` as a prefix to run commands, the discrete mode is | |
simply enabled by environment variables. If `prime-run` isn't a thing | |
in your distribution, create a script `nvidia-offload` like explained | |
in the NixOS wiki | |
NixOS wiki: Nvidia - offload mode | |
If you want to run Flatpak programs with the discrete GPU, you will | |
need to set all the environment variables in the flatpak program | |
environment. You can't just set them in your shell and run flatpak | |
from there because of the sandboxing. | |
## External display | |
- Run `nvidia-xconfig` to create a `/etc/X11/xorg.conf` file that uses | |
the Nvidia card as the main display | |
## Both mode | |
I ended figuring a `xorg.conf` allowing me to keep the same file with | |
and without the eGPU, and to use the discrete and external display at | |
the same time. The funniest part is if you run a program on the nvidia | |
screen and move it back to the laptop screen, the eGPU continues to | |
render it. | |
It's by far the most convenient configuration as you have nothing to | |
tweak, and you can use laptop + eGPU displays. | |
```xorg.conf | |
Section "ServerLayout" | |
Identifier "layout" | |
Screen 0 "intel" | |
Inactive "nvidia" | |
Option "AllowNVIDIAGPUScreens" | |
EndSection | |
Section "Device" | |
Identifier "intel" | |
Driver "modesetting" | |
BusID "PCI:0:2:0" | |
EndSection | |
Section "Screen" | |
Identifier "intel" | |
Device "intel" | |
EndSection | |
Section "Device" | |
Identifier "nvidia" | |
Driver "nvidia" | |
BusID "PCI:10:0:0" | |
Option "AllowExternalGpus" "True" | |
EndSection | |
Section "Screen" | |
Identifier "nvidia" | |
Device "nvidia" | |
EndSection | |
``` | |
## Switching between modes | |
If you want to switch from one to the other, you need to exit all X | |
servers first. Booting with a `xorg.conf` for Nvidia while not having | |
a Nvidia card plugged in will prevent X to start, which is annoying. | |
The program egpu-switch can help in that regard, but it can't choose | |
between discrete or external display mode, you will need to decide | |
which mode you prefer when the card is plugged by providing the | |
according xorg.conf file. | |
egpu-switcher GitHub project page | |
# What to expect of it on Linux? | |
I've been using this on Gentoo only so far, but I had a previous | |
experience with a pretty similar setup a few years ago with a laptop | |
with a discrete nvidia card (called Optimus at that time), and the GPU | |
was only usable as a discrete GPU and it was a mess at that time. | |
As for the eGPU, in external mode it works fine using the nvidia | |
driver, I needed an xorg.conf file to tell to use the nvidia driver, | |
then the display would be fine and 3D would work perfectly as if I was | |
using a "real" card on a computer. I can play high demanding games | |
such as Control, Death Stranding or other games using my Thinkpad | |
Laptop when docked, this is really nice! | |
The setup is a bit weird though, if I want to undock, I need to prepare | |
the new xorg.conf file and stop X, disconnect the eGPU and restart the | |
display manager to login. Not very easy. I've been able to script it | |
using a simple script at boot that will detect the Nvidia GPU and | |
choose the correct xorg.conf file just before starting the display | |
manager, it works quite fine and makes life easier. | |
# Video games? | |
I've been playing Steam video games, it works absolutely perfectly due | |
to their work on Proton to make Windows games running. GOG games works | |
fine too, I use Lutris games library manager to handle them and it | |
works so far. | |
Now, there is the tricky discrete mode. On linux, the bumblebee | |
project allows rendering a program in a virtual display to benefit from | |
the 3D acceleration and then show it on another device, this work was | |
done for Optimus hardware hence the bumblebee name (related to | |
Transfomers lore). Steam doesn't like bumblebee at all and won't start | |
game, this is a known bug, Steam is bad at managing multiple GPUs. | |
I've not been able to display anything using bumblebee. | |
On the other hand, native Linux GOG games were working fine using | |
bumblebee, however I don't own much high demanding Linux games so I've | |
not been able to see if the performance hit was hard. Windows GOG | |
games wouldn't run, partially because the DXVK (directX to vulkan) Wine | |
rendering can't be used because bumblebee doesn't allow using Vulkan | |
graphical API and error messages were unhelpful. I have literally lost | |
two days of my life trying to achieve something useful with the | |
discrete GPU mode but nothing came out of it, except native Linux | |
games. | |
Playing Control on Gentoo (windowed for the screen) | |
# Why using an eGPU? | |
Laptops are very limited in their upgrade capabilities, adding a GPU | |
could avoid someone to own a "gaming" tower PC and a good laptop. The | |
GPU is 100% replaceable because the case offers a pci express port and | |
a standard PSU (which can be replaced too!). The EGPU could be shared | |
among a few users in a home too. This is a nice way to recycling old | |
GPUs for a nice graphic boost to play everything that is more than 5 | |
years old (and that's a bunch of good games!). I think using a top | |
notch GPU in this would be a waste though. | |
# Conclusion | |
I'm pretty happy with the experience so far, now I can play my | |
favorites games on Linux using the same computer I like to use all the | |
day. While the experience is not as plug and play than it is on | |
Windows, it is solid and stable. | |
# Troubleshoot | |
Some reminders when something is wrong. | |
## OpenSUSE setup | |
This distribution ships with a tool "prime-select" which is very | |
convenient, you can pick which driver you want to enable first, or if | |
you want to do discrete rendering. | |
## No sound | |
An udev rule is certainly blocking the audio device for some reasons... | |
On a system, I found the file | |
"/lib/udev/rules.d/90-nvidia-udev-pm-G05.rules" with a comment about | |
disabling audio devices, commenting it solves the problem. |