Closed Bug 1735305 Opened 3 years ago Closed 5 months ago

WebRender compatibility issues with legacy NVIDIA optimus on Arch Linux

Categories

(Core :: Graphics: WebRender, defect)

Firefox 93
x86_64
Linux
defect

Tracking

()

RESOLVED INCOMPLETE
Tracking Status
firefox-esr78 --- wontfix
firefox-esr91 --- fix-optional
firefox93 --- wontfix
firefox94 --- wontfix
firefox95 --- fix-optional

People

(Reporter: hute37, Unassigned)

References

(Blocks 1 open bug)

Details

Attachments

(10 files)

User Agent: Mozilla/5.0 (X11; Linux x86_64; rv:93.0) Gecko/20100101 Firefox/93.0

Steps to reproduce:

runnin firefox with optimux nvidia GPU on Arch Linux

Actual results:

  • using 'primus' bridge:
    GL Context init failure => Fallback WR to SW-WR

  • using "virtualgl" bridge
    huge performance degradation, artifactcs cause by slow rendering

Expected results:

  • WebRender enabled with HW acceleration

started with primus bridge

➜  ~ optirun -b primus -vvv firefox             
[  410.897274] [DEBUG]Reading file: /etc/bumblebee/bumblebee.conf
[  410.897886] [DEBUG]optirun version 3.2.1 starting...
[  410.897901] [DEBUG]Active configuration:
[  410.897906] [DEBUG] bumblebeed config file: /etc/bumblebee/bumblebee.conf
[  410.897910] [DEBUG] X display: :8
[  410.897915] [DEBUG] LD_LIBRARY_PATH: /usr/lib/nvidia:/usr/lib32/nvidia:/usr/lib:/usr/lib32
[  410.897919] [DEBUG] Socket path: /var/run/bumblebee.socket
[  410.897923] [DEBUG] Accel/display bridge: primus
[  410.897927] [DEBUG] VGL Compression: proxy
[  410.897932] [DEBUG] VGLrun extra options: 
[  410.897942] [DEBUG] Primus LD Path: /usr/lib/primus:/usr/lib32/primus
[  410.898620] [INFO]Response: Yes. X is active.

[  410.898640] [INFO]Running application using primus.
[  410.898924] [DEBUG]Process firefox started, PID 4148.
[GFX1-]: Failed GL context creation for WebRender: 0
[GFX1-]: FEATURE_FAILURE_WEBRENDER_INITIALIZE_UNSPECIFIED
[GFX1-]: Failed to connect WebRenderBridgeChild.
[GFX1-]: Fallback WR to SW-WR

started with virtualgl bridge

➜  ~ optirun -b virtualgl -vvv firefox 
[ 3061.780977] [DEBUG]Reading file: /etc/bumblebee/bumblebee.conf
[ 3061.781277] [DEBUG]optirun version 3.2.1 starting...
[ 3061.781292] [DEBUG]Active configuration:
[ 3061.781296] [DEBUG] bumblebeed config file: /etc/bumblebee/bumblebee.conf
[ 3061.781300] [DEBUG] X display: :8
[ 3061.781303] [DEBUG] LD_LIBRARY_PATH: /usr/lib/nvidia:/usr/lib32/nvidia:/usr/lib:/usr/lib32
[ 3061.781307] [DEBUG] Socket path: /var/run/bumblebee.socket
[ 3061.781310] [DEBUG] Accel/display bridge: virtualgl
[ 3061.781314] [DEBUG] VGL Compression: proxy
[ 3061.781317] [DEBUG] VGLrun extra options: 
[ 3061.781321] [DEBUG] Primus LD Path: /usr/lib/primus:/usr/lib32/primus
[ 3061.813543] [INFO]Response: Yes. X is active.

[ 3061.813566] [INFO]Running application using virtualgl.
[ 3061.813790] [DEBUG]Process vglrun started, PID 6395.

nvidia-smi (primus bridge)

➜  ~ optirun -vvv nvidia-smi                    
[  309.397328] [DEBUG]Reading file: /etc/bumblebee/bumblebee.conf
[  309.397804] [DEBUG]optirun version 3.2.1 starting...
[  309.397822] [DEBUG]Active configuration:
[  309.397827] [DEBUG] bumblebeed config file: /etc/bumblebee/bumblebee.conf
[  309.397832] [DEBUG] X display: :8
[  309.397836] [DEBUG] LD_LIBRARY_PATH: /usr/lib/nvidia:/usr/lib32/nvidia:/usr/lib:/usr/lib32
[  309.397841] [DEBUG] Socket path: /var/run/bumblebee.socket
[  309.397846] [DEBUG] Accel/display bridge: primus
[  309.397850] [DEBUG] VGL Compression: proxy
[  309.397858] [DEBUG] VGLrun extra options: 
[  309.397862] [DEBUG] Primus LD Path: /usr/lib/primus:/usr/lib32/primus
[  313.226687] [INFO]Response: Yes. X is active.

[  313.226706] [INFO]Running application using primus.
[  313.226877] [DEBUG]Process nvidia-smi started, PID 3292.
Tue Oct 12 11:27:06 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.144                Driver Version: 390.144                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GT 540M     Off  | 00000000:01:00.0 N/A |                  N/A |
| N/A   49C    P0    N/A /  N/A |      5MiB /   964MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0                    Not Supported                                       |
+-----------------------------------------------------------------------------+
[  313.347380] [DEBUG]SIGCHILD received, but wait failed with No child processes
[  313.347433] [DEBUG]Socket closed.
[  313.347486] [DEBUG]Killing all remaining processes.

The Bugbug bot thinks this bug should belong to the 'Core::Graphics: WebRender' component, and is moving the bug to that component. Please revert this change in case you think the bot is wrong.

Component: Untriaged → Graphics: WebRender
Product: Firefox → Core

Thanks for the report!

Blocks: wr-nv-linux
OS: Unspecified → Linux
Hardware: Unspecified → x86_64

Hm, wierd case here. Our glxtest hardware detection for some reason find the Intel card. I wonder if it has something to do with

[DEBUG] X display: :8

I increasingly wonder if we should move all the hardware detection out of glxtest and into widget/gtk/GfxInfo.cpp. Then we could much easier make sure that our results do not diverge for odd reasons. The time when creating gl contexts crashed drivers should be long over.

Problem already existed in 2019: https://github.com/Bumblebee-Project/Bumblebee/issues/1035
Bumblebee seems to run a separate X server for the Nvidia card while the regular X server uses the Intel GPU the display is connected to.
The Archlinux wiki discourages legacy Bumblebee and recommends regular Nvidia Optimus: https://wiki.archlinux.org/title/bumblebee
Are you able to use Nvidia Optimus with PRIME instead?

I think my GPU does not support the switch ...

nvidia driver >= 435.17 required, but i have to stick with 390 drivers for GPU compatibility

One "strange" fact ...

If i run 'alacritty' and nomachine client (nxplayer) with virtualgl bridge they crash sometimes,
but when i run them with "primus" bridge they seems to work

With firefox, if I select 'primus', HW rendering is not initialized (Fallback to SW)
while with virtualgl, hw rendering work but i see flickering on refresh (mainly on top bar)

(see: https://drive.google.com/file/d/1xz93TxRziSUImhXT-jx5mvzqehwrsh22/view?usp=sharing)

I know, nvidia optimus support is far from optimus ... (for my GPU)


just some other diagnostic references

~ lspci | grep VGA

00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
01:00.0 VGA compatible controller: NVIDIA Corporation GF108M [GeForce GT 540M] (rev a1)

# inxi -SMG

System:    Host: *** Kernel: 5.14.11-arch1-1 x86_64 bits: 64 Desktop: GNOME 40.5 Distro: Arch Linux 
Machine:   Type: Laptop System: ASUSTeK product: K73SV v: 1.0 serial: ***
           Mobo: ASUSTeK model: K73SV v: 1.0 serial: *** BIOS: American Megatrends v: K73SV.209 
           date: 08/16/2011 
Graphics:  Device-1: Intel 2nd Generation Core Processor Family Integrated Graphics driver: i915 v: kernel 
           Device-2: NVIDIA GF108M [GeForce GT 540M] driver: nvidia v: 390.144 
           Device-3: Alcor Micro Asus Integrated Webcam type: USB driver: uvcvideo 
           Display: server: X.Org 1.20.13 driver: loaded: intel unloaded: fbdev,modesetting,vesa resolution: 1: 1600x900~60Hz 
           2: 1680x1050~60Hz 
           OpenGL: renderer: Mesa DRI Intel HD Graphics 3000 (SNB GT2) v: 3.3 Mesa 21.2.3 

# lsmod | grep -e nv -e bb | sort

bbswitch               20480  0
ipmi_msghandler        73728  2 ipmi_devintf,nvidia
nvidia              15888384  772 nvidia_modeset
nvidia_modeset       1060864  18

Attached image ff-flickering.jpg

flickerin effect on top bar (only with ff)

How does Firefox Nightly behave with primus and virtualgl after setting gfx.webrender.all=true and gfx.x11-egl.force-enabled=true and restarting Nightly?

nightly: 95.0a1 (2021-10-12) (64-bit) - primus bridge

gfx.webrender.all=true
gfx.x11-egl.force-enabled=true

WebRender HW - Intel GPU (no NVIDIA)

~ optirun -b primus -vvv /opt/firefox/firefox -P nightly

[37986.647116] [DEBUG]Reading file: /etc/bumblebee/bumblebee.conf
[37986.647668] [DEBUG]optirun version 3.2.1 starting...
[37986.647681] [DEBUG]Active configuration:
[37986.647686] [DEBUG] bumblebeed config file: /etc/bumblebee/bumblebee.conf
[37986.647690] [DEBUG] X display: :8
[37986.647694] [DEBUG] LD_LIBRARY_PATH: /usr/lib/nvidia:/usr/lib32/nvidia:/usr/lib:/usr/lib32
[37986.647698] [DEBUG] Socket path: /var/run/bumblebee.socket
[37986.647702] [DEBUG] Accel/display bridge: primus
[37986.647706] [DEBUG] VGL Compression: proxy
[37986.647710] [DEBUG] VGLrun extra options: 
[37986.647717] [DEBUG] Primus LD Path: /usr/lib/primus:/usr/lib32/primus
[37986.649048] [INFO]Response: Yes. X is active.

[37986.649095] [INFO]Running application using primus.
[37986.649290] [DEBUG]Process /opt/firefox/firefox started, PID 24961.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.

see attachment: nightly-about-support-primus.txt

ff nightly - primus bridge

nightly: 95.0a1 (2021-10-12) (64-bit) - virtualgl bridge

gfx.webrender.all=true
gfx.x11-egl.force-enabled=true

WebRender HW - Intel GPU (no NVIDIA)

~ optirun -b virtualgl -vvv /opt/firefox/firefox -P nightly
[38498.996533] [DEBUG]Reading file: /etc/bumblebee/bumblebee.conf
[38498.997053] [DEBUG]optirun version 3.2.1 starting...
[38498.997067] [DEBUG]Active configuration:
[38498.997077] [DEBUG] bumblebeed config file: /etc/bumblebee/bumblebee.conf
[38498.997086] [DEBUG] X display: :8
[38498.997096] [DEBUG] LD_LIBRARY_PATH: /usr/lib/nvidia:/usr/lib32/nvidia:/usr/lib:/usr/lib32
[38498.997104] [DEBUG] Socket path: /var/run/bumblebee.socket
[38498.997112] [DEBUG] Accel/display bridge: virtualgl
[38498.997122] [DEBUG] VGL Compression: proxy
[38498.997131] [DEBUG] VGLrun extra options: 
[38498.997141] [DEBUG] Primus LD Path: /usr/lib/primus:/usr/lib32/primus
[38498.998376] [INFO]Response: Yes. X is active.

[38498.998448] [INFO]Running application using virtualgl.
[38498.998586] [DEBUG]Process vglrun started, PID 26272.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.


see attachment: nightly-about-support-virtualgl.txt

nightly - virtualgl bridge

in ff nightly, NVIDIA support (bumblee) isn't activated

nightly: 95.0a1 (2021-10-12) (64-bit) - no optirun

gfx.webrender.all=true
gfx.x11-egl.force-enabled=true

WebRender HW - Intel GPU (no NVIDIA)

~ /opt/firefox/firefox -P nightly
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.

see attachment: nightly-about-support-no-optirun.txt

nightly without optirun

in dual-boot on the same machine

using Ubuntu 21.04

with

gfx.webrender.all=true
gfx.x11-egl.force-enabled=true

nightly looks good: WebRender HW, NVIDIA GPU

/opt/firefox/firefox -P nightly
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.


see attachment: nightly-about-support-ubuntu-hirsute.txt


system info:

# inxi -SMG
System:    Host: heka Kernel: 5.11.0-37-generic x86_64 bits: 64 Desktop: GNOME 3.38.4 Distro: Ubuntu 21.04 (Hirsute Hippo) 
Machine:   Type: Laptop System: ASUSTeK product: K73SV v: 1.0 serial: *** 
           Mobo: ASUSTeK model: K73SV v: 1.0 serial: *** BIOS: American Megatrends v: K73SV.209 
           date: 08/16/2011 
Graphics:  Device-1: Intel 2nd Generation Core Processor Family Integrated Graphics driver: i915 v: kernel 
           Device-2: NVIDIA GF108M [GeForce GT 540M] driver: nvidia v: 390.144 
           Device-3: Alcor Micro Asus Integrated Webcam type: USB driver: uvcvideo 
           Display: server: X.Org 1.20.11 driver: loaded: modesetting,nvidia resolution: 1: 1600x900~60Hz 2: 1680x1050~60Hz 
           OpenGL: renderer: GeForce GT 540M/PCIe/SSE2 v: 4.6.0 NVIDIA 390.144 

# lsmod | grep -e nv -e bb | sort
drm                   552960  8 drm_kms_helper,nvidia_drm,i915
drm_kms_helper        245760  2 nvidia_drm,i915
ipmi_msghandler       114688  2 ipmi_devintf,nvidia
nvidia              15851520  428 nvidia_modeset
nvidia_drm             45056  7
nvidia_modeset       1056768  6 nvidia_drm

# nvidia-smi
Tue Oct 12 22:44:50 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.144                Driver Version: 390.144                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GT 540M     Off  | 00000000:01:00.0 N/A |                  N/A |
| N/A   65C    P0    N/A /  N/A |    318MiB /   964MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0                    Not Supported                                       |
+-----------------------------------------------------------------------------+

# dmesg | grep -i -e nvidia -evga -evesa

[    0.458289] pci 0000:00:02.0: vgaarb: setting as boot VGA device
[    0.458289] pci 0000:00:02.0: vgaarb: VGA device added: decodes=io+mem,owns=io+mem,locks=none
[    0.458289] pci 0000:01:00.0: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none
[    0.458289] pci 0000:00:02.0: vgaarb: no bridge control possible
[    0.458289] pci 0000:01:00.0: vgaarb: bridge control possible
[    0.458289] vgaarb: loaded
[    1.159451] vesafb: mode is 1024x768x32, linelength=4096, pages=0
[    1.159456] vesafb: scrolling: redraw
[    1.159459] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    1.159480] vesafb: framebuffer at 0xb0000000, mapped to 0x(____ptrval____), using 3072k, total 3072k
[    1.221295] fb0: VESA VGA frame buffer device
[    7.889353] nvidia: loading out-of-tree module taints kernel.
[    7.937351] nvidia: module license 'NVIDIA' taints kernel.
[    8.080281] nvidia: module verification failed: signature and/or required key missing - tainting kernel
[    8.126085] nvidia-nvlink: Nvlink Core is being initialized, major device number 236
[    8.153177] fb0: switching to inteldrmfb from VESA VGA
[    8.153447] nvidia 0000:01:00.0: enabling device (0000 -> 0003)
[    8.204616] nvidia 0000:01:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=none
[    8.204623] i915 0000:00:02.0: vgaarb: deactivate vga console
[    8.204739] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  390.144  Wed Jun  2 23:02:41 UTC 2021 (using threaded interrupts)
[    8.207619] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  390.144  Wed Jun  2 22:58:46 UTC 2021
[    8.208005] i915 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=io+mem
[    8.208523] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver
[    8.228804] caller os_map_kernel_space.part.0+0x100/0x140 [nvidia] mapping multiple BARs
[    9.460235] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 1
[   17.029869] snd_hda_intel 0000:01:00.1: Handle vga_switcheroo audio client

no bumblebee on ubuntu, same nvidia driver version (390.144)

differences in loaded modules

ubuntu 21.04 ff nightly about:support

alactitty initialize GL context with "primus" bridge
("virtualgl" crashes sometimes)

optirun -b primus -vvv alacritty

in term

➜  ~ glxinfo | grep -P 'server glx .* string'

server glx vendor string: NVIDIA Corporation
server glx version string: 1.4

I don't know implementation details, but it seems based on:

References:

I can run ff with 'primus' bridge thru vulkan

optirun -b primus -vvv vglrun -d :8 firefox
[ 5416.382487] [DEBUG]Reading file: /etc/bumblebee/bumblebee.conf
[ 5416.382981] [DEBUG]optirun version 3.2.1 starting...
[ 5416.383015] [DEBUG]Active configuration:
[ 5416.383020] [DEBUG] bumblebeed config file: /etc/bumblebee/bumblebee.conf
[ 5416.383024] [DEBUG] X display: :8
[ 5416.383028] [DEBUG] LD_LIBRARY_PATH: /usr/lib/nvidia:/usr/lib32/nvidia:/usr/lib:/usr/lib32
[ 5416.383033] [DEBUG] Socket path: /var/run/bumblebee.socket
[ 5416.383037] [DEBUG] Accel/display bridge: primus
[ 5416.383041] [DEBUG] VGL Compression: proxy
[ 5416.383047] [DEBUG] VGLrun extra options: 
[ 5416.383053] [DEBUG] Primus LD Path: /usr/lib/primus:/usr/lib32/primus
[ 5416.384385] [INFO]Response: Yes. X is active.

[ 5416.384436] [INFO]Running application using primus.
[ 5416.384609] [DEBUG]Process vglrun started, PID 19105.

not vulkan (pvkrun), just virtualgl (vglrun)

The severity field is not set for this bug.
:jimm, could you have a look please?

For more information, please visit auto_nag documentation.

Flags: needinfo?(jmathies)
Severity: -- → S4
Flags: needinfo?(jmathies)

The bug has a release status flag that shows some version of Firefox is affected, thus it will be considered confirmed.

Status: UNCONFIRMED → NEW
Ever confirmed: true

Hi! Can you still reproduce this issue or was it fixed somewhere in the meantime? Thanks!

Flags: needinfo?(hute37)

Redirect a needinfo that is pending on an inactive user to the triage owner.
:gw, since the bug has recent activity, could you have a look please?

For more information, please visit BugBot documentation.

Flags: needinfo?(hute37) → needinfo?(gwatson)
Status: NEW → RESOLVED
Closed: 5 months ago
Flags: needinfo?(gwatson)
Resolution: --- → INCOMPLETE
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: