Abnaxos
2021-05-07, 10:25:36
Neuer Laptop, neue Leiden mit NVidia. :( Weil es inzwischen möglich sein sollte, auf Bumblebee zu verzichten, möchte ich gerne verzichten.
Also, das Ziel ist es, den NVidia-Chip so selten wie möglich zu benutzen. 99.99% der Arbeit macht die iGPU wunderbar, das soll also meine primäre GPU sein. Aber die externen Displays sind fest mit der NVidia-GPU verdrahtet. Diese möchte ich daher gerne mit Reverse PRIME ansteuern.
Zuerst ein paar Infos. Hier läuft das System allerdings umgekehrt, d.h. die NVidia-GPU ist die primäre GPU, das interne Display wird mit Reverse PRIME via iGPU verwendet.
$ lsb-release -d
Description: openSUSE Leap 15.2
$ uname -rvio
5.3.18-lp152.72-default #1 SMP Wed Apr 14 10:13:15 UTC 2021 (013936d) x86_64 GNU/Linux
$ inxi -G
Graphics: Device-1: Intel CometLake-H GT2 [UHD Graphics] driver: i915 v: kernel
Device-2: NVIDIA TU106GLM [Quadro RTX 3000 Mobile / Max-Q] driver: nvidia v: 460.73.01
Device-3: IMC Networks type: USB driver: uvcvideo
Display: x11 server: X.Org 1.20.3 driver: modesetting,nvidia
resolution: 1: 1920x1200~60Hz 2: 1920x1080~60Hz
OpenGL: renderer: Quadro RTX 3000/PCIe/SSE2 v: 4.6.0 NVIDIA 460.73.01
$ nvidia-smi
Fri May 7 09:24:24 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.73.01 Driver Version: 460.73.01 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Quadro RTX 3000 Off | 00000000:01:00.0 On | N/A |
| N/A 42C P8 6W / N/A | 519MiB / 5934MiB | 21% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 3935 G /usr/bin/X 248MiB |
| 0 N/A N/A 4905 G ksysguard 48MiB |
| 0 N/A N/A 4908 G kontact 22MiB |
| 0 N/A N/A 4966 G ...-211.7142.45/jbr/bin/java 2MiB |
| 0 N/A N/A 5202 G ...AAAAAAAAA= --shared-files 120MiB |
| 0 N/A N/A 5292 G ...oken=13555069662847211130 17MiB |
| 0 N/A N/A 6297 G ...AAAAAAAA== --shared-files 19MiB |
| 0 N/A N/A 6403 G ...akonadi_archivemail_agent 2MiB |
| 0 N/A N/A 6475 G ...bin/akonadi_imap_resource 2MiB |
| 0 N/A N/A 6505 G .../akonadi_mailfilter_agent 2MiB |
| 0 N/A N/A 6559 G ...n/akonadi_sendlater_agent 2MiB |
| 0 N/A N/A 6563 G ...nadi_unifiedmailbox_agent 2MiB |
+-----------------------------------------------------------------------------+
$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x29d; cap: 0x1 (Source Output); crtcs: 4; outputs: 5; associated providers: 1;
name: NVIDIA-0
output DP-0
output DP-1
output DP-2
output HDMI-0
output DP-3
Provider 1: id: 0x43; cap: 0xf (Source Output, Sink Output, Source Offload, Sink Offload);
crtcs: 3; outputs: 1; associated providers: 1; name: modesetting
output eDP-1-1
In xorg.conf.d/90-cards.conf habe ich Folgendes stehen:
Section "Device"
Identifier "intel"
Driver "modesetting"
BusID "PCI:0:2:0"
#Option "AccelMethod" "none"
Option "DRI" "3"
Option "ReprobeOutputs" "True"
#Option "TearFree" "True"
#Option "DRI" "2"
#Option "VirtualOutputs" "2"
#Option "TearFree" "true"
#Option "VideoRam" "1048576" # 1G
#Option "AccelMethod" "uxa"
EndSection
Section "Device"
Identifier "nvidia"
Driver "nvidia"
BusID "PCI:1:0:0"
Option "DPI" "96 x 96"
#Option "AllowPRIMEDisplayOffloadSink" "True"
#Option "AllowEmptyInitialConfiguration"
#Option "PrimaryGPU"
EndSection
Section "Screen"
Identifier "intel"
Device "intel"
EndSection
Section "Screen"
Identifier "nvidia"
Device "nvidia"
#Option "AllowEmptyInitialConfiguration" "True"
EndSection
Section "ServerLayout"
Identifier "layout"
Screen 0 "nvidia"
Inactive "intel"
Option "AllowNVIDIAGPUScreens" "True"
EndSection
Die vielen Kommentare zeigen auch die vielen Experimente, die ich bereits gemacht habe. Praktisch jede Option war mal ein- oder auskommentiert. :)
Die Idee wäre, im ServerLayout "nvidia" und "intel" zu vertauschen. Wenn ich das tue, bringt mir xrandr das:
$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x24e; cap: 0xf (Source Output, Sink Output, Source Offload, Sink Offload);
crtcs: 3; outputs: 1; associated providers: 0; name: modesetting
output eDP-1
Provider 1: id: 0x218; cap: 0x0 (); crtcs: 4; outputs: 5; associated providers: 0; name: NVIDIA-G0
output 0x21d
output 0x227
output 0x228
output 0x229
output 0x22a
Wenig überraschend kriege ich dann einen Fehler, wenn ich "xrandr --setprovideroutputsource NVIDIA-G0 modesetting" ausführen will, denn das "cap: 0x0" sagt ja aus, dass nicht möglich sei (gar kein Offloading, weder Render noch Output). Das Internet meint, dass das heutzutage funktionieren müsste.
Momentan habe ich ausserdem sichergestellt, dass der NVidia-Treiber zuerst geladen wird (noch von der initrd, also sehr früh im Boot-Prozess) und i915 blacklisted. Ich habe irgendwo gelesen, es sei wichtig, dass NVidia zuerst geladen werde. Leider hilft das auch nicht, ich werde es wohl wieder entfernen.
Irgendwelche Ideen?
Wo ich schon dabei bin: picom mag NVidia nicht gerne, momentan muss ich auf Compositing verzichten. Wie kann ich im aktuellen Setup, wo NVidia die primäre GPU ist, einzelne Applikationen (z.B. eben picom) auf die iGPU offloaden? Google nach "prime offload" gibt mir nur Ergebnisse, wie ich auf die dGPU offloaden könnte, wenn ich das gewünschte Setup hinkriegen würde. Nicht aber umgekehrt.
Also, das Ziel ist es, den NVidia-Chip so selten wie möglich zu benutzen. 99.99% der Arbeit macht die iGPU wunderbar, das soll also meine primäre GPU sein. Aber die externen Displays sind fest mit der NVidia-GPU verdrahtet. Diese möchte ich daher gerne mit Reverse PRIME ansteuern.
Zuerst ein paar Infos. Hier läuft das System allerdings umgekehrt, d.h. die NVidia-GPU ist die primäre GPU, das interne Display wird mit Reverse PRIME via iGPU verwendet.
$ lsb-release -d
Description: openSUSE Leap 15.2
$ uname -rvio
5.3.18-lp152.72-default #1 SMP Wed Apr 14 10:13:15 UTC 2021 (013936d) x86_64 GNU/Linux
$ inxi -G
Graphics: Device-1: Intel CometLake-H GT2 [UHD Graphics] driver: i915 v: kernel
Device-2: NVIDIA TU106GLM [Quadro RTX 3000 Mobile / Max-Q] driver: nvidia v: 460.73.01
Device-3: IMC Networks type: USB driver: uvcvideo
Display: x11 server: X.Org 1.20.3 driver: modesetting,nvidia
resolution: 1: 1920x1200~60Hz 2: 1920x1080~60Hz
OpenGL: renderer: Quadro RTX 3000/PCIe/SSE2 v: 4.6.0 NVIDIA 460.73.01
$ nvidia-smi
Fri May 7 09:24:24 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.73.01 Driver Version: 460.73.01 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Quadro RTX 3000 Off | 00000000:01:00.0 On | N/A |
| N/A 42C P8 6W / N/A | 519MiB / 5934MiB | 21% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 3935 G /usr/bin/X 248MiB |
| 0 N/A N/A 4905 G ksysguard 48MiB |
| 0 N/A N/A 4908 G kontact 22MiB |
| 0 N/A N/A 4966 G ...-211.7142.45/jbr/bin/java 2MiB |
| 0 N/A N/A 5202 G ...AAAAAAAAA= --shared-files 120MiB |
| 0 N/A N/A 5292 G ...oken=13555069662847211130 17MiB |
| 0 N/A N/A 6297 G ...AAAAAAAA== --shared-files 19MiB |
| 0 N/A N/A 6403 G ...akonadi_archivemail_agent 2MiB |
| 0 N/A N/A 6475 G ...bin/akonadi_imap_resource 2MiB |
| 0 N/A N/A 6505 G .../akonadi_mailfilter_agent 2MiB |
| 0 N/A N/A 6559 G ...n/akonadi_sendlater_agent 2MiB |
| 0 N/A N/A 6563 G ...nadi_unifiedmailbox_agent 2MiB |
+-----------------------------------------------------------------------------+
$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x29d; cap: 0x1 (Source Output); crtcs: 4; outputs: 5; associated providers: 1;
name: NVIDIA-0
output DP-0
output DP-1
output DP-2
output HDMI-0
output DP-3
Provider 1: id: 0x43; cap: 0xf (Source Output, Sink Output, Source Offload, Sink Offload);
crtcs: 3; outputs: 1; associated providers: 1; name: modesetting
output eDP-1-1
In xorg.conf.d/90-cards.conf habe ich Folgendes stehen:
Section "Device"
Identifier "intel"
Driver "modesetting"
BusID "PCI:0:2:0"
#Option "AccelMethod" "none"
Option "DRI" "3"
Option "ReprobeOutputs" "True"
#Option "TearFree" "True"
#Option "DRI" "2"
#Option "VirtualOutputs" "2"
#Option "TearFree" "true"
#Option "VideoRam" "1048576" # 1G
#Option "AccelMethod" "uxa"
EndSection
Section "Device"
Identifier "nvidia"
Driver "nvidia"
BusID "PCI:1:0:0"
Option "DPI" "96 x 96"
#Option "AllowPRIMEDisplayOffloadSink" "True"
#Option "AllowEmptyInitialConfiguration"
#Option "PrimaryGPU"
EndSection
Section "Screen"
Identifier "intel"
Device "intel"
EndSection
Section "Screen"
Identifier "nvidia"
Device "nvidia"
#Option "AllowEmptyInitialConfiguration" "True"
EndSection
Section "ServerLayout"
Identifier "layout"
Screen 0 "nvidia"
Inactive "intel"
Option "AllowNVIDIAGPUScreens" "True"
EndSection
Die vielen Kommentare zeigen auch die vielen Experimente, die ich bereits gemacht habe. Praktisch jede Option war mal ein- oder auskommentiert. :)
Die Idee wäre, im ServerLayout "nvidia" und "intel" zu vertauschen. Wenn ich das tue, bringt mir xrandr das:
$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x24e; cap: 0xf (Source Output, Sink Output, Source Offload, Sink Offload);
crtcs: 3; outputs: 1; associated providers: 0; name: modesetting
output eDP-1
Provider 1: id: 0x218; cap: 0x0 (); crtcs: 4; outputs: 5; associated providers: 0; name: NVIDIA-G0
output 0x21d
output 0x227
output 0x228
output 0x229
output 0x22a
Wenig überraschend kriege ich dann einen Fehler, wenn ich "xrandr --setprovideroutputsource NVIDIA-G0 modesetting" ausführen will, denn das "cap: 0x0" sagt ja aus, dass nicht möglich sei (gar kein Offloading, weder Render noch Output). Das Internet meint, dass das heutzutage funktionieren müsste.
Momentan habe ich ausserdem sichergestellt, dass der NVidia-Treiber zuerst geladen wird (noch von der initrd, also sehr früh im Boot-Prozess) und i915 blacklisted. Ich habe irgendwo gelesen, es sei wichtig, dass NVidia zuerst geladen werde. Leider hilft das auch nicht, ich werde es wohl wieder entfernen.
Irgendwelche Ideen?
Wo ich schon dabei bin: picom mag NVidia nicht gerne, momentan muss ich auf Compositing verzichten. Wie kann ich im aktuellen Setup, wo NVidia die primäre GPU ist, einzelne Applikationen (z.B. eben picom) auf die iGPU offloaden? Google nach "prime offload" gibt mir nur Ergebnisse, wie ich auf die dGPU offloaden könnte, wenn ich das gewünschte Setup hinkriegen würde. Nicht aber umgekehrt.