Mit dem Arbeitslaptop hatte ich meine eGPU relativ problemlos zum Laufen gebracht: Eine Sonnet eGFX Breakaway Box 550 mit einer Radeon Vega 56. Probleme hat mein Hauptrechner gemacht; Dort war der CPU-Kühler der Thunderbolt-PCIe-Karte im Weg, sodass ich endlich einen Anlass hatte, die Wasserkühlung nachzurüsten. Dann nur die Thunderbolt-PCIe-Karte reinzustecken hat es nicht ganz gebracht, etwas mehr war noch zu tun.

alles alt

Mein Rechner ist ein hornaltes Teil: Mainboard Asrock B75M-ITX, Intel Core i5-3570T, 4 Cores, kein Hyperthreading, 16GB, Gigabyte TITAN RIDGE (Rev. 2.0), Thunderbolt 3, SATA-SSDs. Sowas war Mitte 2012 aktuell, reicht aber immer noch für meine Bedürfnisse.

Das BIOS weiß nichts von Thunderbolt und seinen Sicherheitsmodi. Immerhin wird die Karte schonmal mit lspci gelistet:

01:00.0 PCI bridge: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] (rev 06)
02:00.0 PCI bridge: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] (rev 06)
02:01.0 PCI bridge: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] (rev 06)
02:02.0 PCI bridge: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] (rev 06)
02:04.0 PCI bridge: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] (rev 06)
03:00.0 System peripheral: Intel Corporation JHL7540 Thunderbolt 3 NHI [Titan Ridge 4C 2018] (rev 06)
05:00.0 USB controller: Intel Corporation JHL7540 Thunderbolt 3 USB Controller [Titan Ridge 4C 2018] (rev 06)

Um die Sonnet-Box aktivieren und sehen zu können, benötigt man unter Linux bolt, unter Arch heißt das Paket auch so:
$ pacman -S bolt

Mit boltctl list kann man alle angeschlossenen Geräte sehen, ein anschließendes boltctl enroll device_uuid autorisiert das gewünschte Gerät dauerhaft. Spätestens jetzt sollte die Box anspringen und ein einfaches boltctl die Box anzeigen:
● Sonnet Technologies, Inc. eGFX Breakaway Box 550
├─ type: peripheral
├─ name: eGFX Breakaway Box 550
├─ vendor: Sonnet Technologies, Inc.
├─ uuid: 00000000-0000-0000-ffff-ffffffffffff
├─ generation: Thunderbolt 3
├─ status: authorized
│ ├─ domain: 00000000-0000-0000-0000-000000000000
│ ├─ rx speed: 40 Gb/s = 2 lanes * 20 Gb/s
│ ├─ tx speed: 40 Gb/s = 2 lanes * 20 Gb/s
│ └─ authflags: none
├─ authorized: Mo 20 Feb 2023 21:43:46 UTC
├─ connected: Mo 20 Feb 2023 21:43:46 UTC
└─ stored: Mo 30 Jan 2023 17:51:00 UTC
├─ policy: auto
└─ key: no

Ein beherztes lspci listet aber leider noch keine neue Grafikkarte. Selbst wenn ich einen Rescan der pci Bussysteme mit echo 1 > /sys/bus/pci/rescan forciere, taucht sie nicht auf. Dafür finden sich im journal interessante Einträge:
Sesta kernel: pci 0000:04:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
Sesta kernel: pci_bus 0000:05: busn_res: [bus 05] end is updated to 05
Sesta kernel: pci 0000:04:00.0: devices behind bridge are unusable because [bus 05] cannot be assigned for them
Sesta kernel: pcieport 0000:02:01.0: bridge has subordinate 04 but max busn 05
Sesta kernel: pcieport 0000:02:01.0: bridge window [mem 0x00100000-0x000fffff] to [bus 04] add_size 200000 add_align 100000
Sesta kernel: pcieport 0000:02:04.0: bridge window [mem 0x00100000-0x000fffff] to [bus 06] add_size 200000 add_align 100000
Sesta kernel: pcieport 0000:02:01.0: BAR 14: no space for [mem size 0x00200000]
Sesta kernel: pcieport 0000:02:01.0: BAR 14: failed to assign [mem size 0x00200000]
Sesta kernel: pcieport 0000:02:04.0: BAR 14: no space for [mem size 0x00200000]
Sesta kernel: pcieport 0000:02:04.0: BAR 14: failed to assign [mem size 0x00200000]
Sesta kernel: pcieport 0000:02:04.0: BAR 14: no space for [mem size 0x00200000]
Sesta kernel: pcieport 0000:02:04.0: BAR 14: failed to assign [mem size 0x00200000]
Sesta kernel: pcieport 0000:02:01.0: BAR 14: no space for [mem size 0x00200000]
Sesta kernel: pcieport 0000:02:01.0: BAR 14: failed to assign [mem size 0x00200000]

Davon hatte ich schon gelesen: In irgendeiner Weise wird vom BIOS vorgegeben, wie und wo die Adressbereiche der Busse angelegt werden. Von zusätzlichen Bridges mit wechselnden PCI-Geräten weiß das BIOS aber nichts und hat keinen Platz übrig.

alles neu

Kreatives googlen hat diverse Ergebnisse zur Folge, das relevanteste findet sich in einem Beitrag bei superuser. In aller Kürze: der Kernel braucht ein paar zusätzliche Parameter. Da ich noch mit GRUB boote, müssen diese in der /boot/grub/grub.cfg eingebaut werden. Dort habe ich den default-Boot-Eintrag dupliziert und angepasst. Der Kernel bekommt bei mir zusätzlich
pcie_ports=native pci=assign-busses,nocrs,hpbussize=0x20,realloc,hpmmiosize=32M,hpmmioprefsize=8G
mitgegeben.

Beim nächsten Boot (die Sonnet ist eingesteckt) wähle ich den neuen Boot-Eintrag. Lightdm erscheint kurz, dann startet Xorg nochmal neu. Kurzes Rauschen der Sonnet macht klar: Die eGPU ist verfügbar! Nach dem Login bestätigt sich das, die Vega ist unter den PCI-Geräten gelistet.

01:00.0 PCI bridge: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] (rev 06)
02:00.0 PCI bridge: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] (rev 06)
02:01.0 PCI bridge: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] (rev 06)
02:02.0 PCI bridge: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] (rev 06)
02:04.0 PCI bridge: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] (rev 06)
03:00.0 System peripheral: Intel Corporation JHL7540 Thunderbolt 3 NHI [Titan Ridge 4C 2018] (rev 06)
24:00.0 USB controller: Intel Corporation JHL7540 Thunderbolt 3 USB Controller [Titan Ridge 4C 2018] (rev 06)
25:00.0 PCI bridge: Intel Corporation DSL6540 Thunderbolt 3 Bridge [Alpine Ridge 4C 2015]
26:01.0 PCI bridge: Intel Corporation DSL6540 Thunderbolt 3 Bridge [Alpine Ridge 4C 2015]
27:00.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Vega 10 PCIe Bridge (rev c3)
28:00.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Vega 10 PCIe Bridge
29:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Vega 10 XL/XT [Radeon RX Vega 56/64] (rev c3)
29:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Vega 10 HDMI Audio [Radeon Vega 56/64]

Benutzt wird sie aber noch nicht, dass muss man Xorg noch beibiegen. An einfachsten geht das mit dem egpu-switcher – der kann beim Start direkt die richtige Xorg-Konfiguration laden, wenn die eGPU dran steckt. Für Arch gibt es gleich drei Pakete im AUR. Jedes davon tut es.

Zuerst konfiguriere ich meine eGPU: $ sudo egpu-switcher config
Found 2 possible GPU(s)…
1: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (i915)
2: Advanced Micro Devices, Inc. [AMD/ATI] Reference RX 5700 XT (amdgpu)
Which one is your external GPU? [1-2]:

Mit ‚2‘ ist die eGPU ausgewählt und der Aufruf sudo egpu-switcher enable sorgt dafür, dass eGPU beim Booten ausgewählt wird, wenn sie verfügbar ist.

Manchmal ist nach dem Booten und Login die eGPU doch nicht aktiv. Dann rufe ich kurz sudo egpu-switcher switch auf und logge mich aus und wieder ein; Spätestens dann ist die eGPU aktiv und verwendbar.

Stecke ich die eGPU nach dem Booten an, bleibt nach dem Umschalten mit dem egpu-switcher und Ausloggen der Bildschirm schwarz. Lightdm und Xorg scheint zu laufen, aber zu sehen ist nix; Muss ich andermal untersuchen.

Let’s play

In den Kleinanzeigen hab ich schon vor einer ganzen Weile zwei Gamepads geschossen: Ein erster Test mit SuperTuxKart :)Mal sehen, wie lange ich meinen Rechner noch nutzen kann. Eine Grenze kenne ich schon: Die Onboard-Grafik schafft höchstens eine Auflösung von 1920 x 1200 pro Display-Ausgang. Mit einem größeren Monitor (was schon irgendwie nett wäre) müsste ich ein Upgrade von Mainboard, Prozessor und RAM vornehmen.

(swg)