PRIME dedicated GPU usage results in FPS drops and a hotter laptop!

Hey folks, got a rather odd one - wonder if anyone can help. I’ve got a Dell laptop with integrated Iris Plus graphics on the Intel chip, but also a dedicated GeForce MX330 NVIDIA graphics card. I’ve configured this using mhwd to use PRIME, and all seems to be working - I get the expected output from prime-run glxinfo and glxinfo respectively:

[curtispf@curtis-laptop ~]$ prime-run glxinfo | grep OpenGL
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce MX330/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 455.45.01
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.6.0 NVIDIA 455.45.01
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 455.45.01
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
[curtispf@curtis-laptop ~]$ glxinfo | grep OpenGL
OpenGL vendor string: Intel
OpenGL renderer string: Mesa Intel(R) Iris(R) Plus Graphics (ICL GT2)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 20.2.3
OpenGL core profile shading language version string: 4.60
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.2.3
OpenGL shading language version string: 4.60
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.2.3
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:

Trouble is, well, actually trying to use the GPU absolutely tanks performance. I don’t mean it tanks the rest of the system performance, I mean that using the integrated graphics outperforms the dedicated card by a country mile! Here’s my glmark2 results from using the integrated graphics:

[curtispf@curtis-laptop ~]$ glmark2          
=======================================================
    glmark2 2014.03
=======================================================
    OpenGL Information
    GL_VENDOR:     Intel
    GL_RENDERER:   Mesa Intel(R) Iris(R) Plus Graphics (ICL GT2)
    GL_VERSION:    4.6 (Compatibility Profile) Mesa 20.2.3
=======================================================
[build] use-vbo=false: FPS: 3721 FrameTime: 0.269 ms
[build] use-vbo=true: FPS: 5274 FrameTime: 0.190 ms
[texture] texture-filter=nearest: FPS: 4558 FrameTime: 0.219 ms
[texture] texture-filter=linear: FPS: 4587 FrameTime: 0.218 ms
[texture] texture-filter=mipmap: FPS: 3408 FrameTime: 0.293 ms
[shading] shading=gouraud: FPS: 3938 FrameTime: 0.254 ms
[shading] shading=blinn-phong-inf: FPS: 3823 FrameTime: 0.262 ms
[shading] shading=phong: FPS: 3612 FrameTime: 0.277 ms
[shading] shading=cel: FPS: 3730 FrameTime: 0.268 ms
[bump] bump-render=high-poly: FPS: 2073 FrameTime: 0.482 ms
[bump] bump-render=normals: FPS: 4742 FrameTime: 0.211 ms
[bump] bump-render=height: FPS: 4509 FrameTime: 0.222 ms
libpng warning: iCCP: known incorrect sRGB profile
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 3076 FrameTime: 0.325 ms
libpng warning: iCCP: known incorrect sRGB profile
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 1878 FrameTime: 0.532 ms
[pulsar] light=false:quads=5:texture=false: FPS: 3621 FrameTime: 0.276 ms
libpng warning: iCCP: known incorrect sRGB profile
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 1535 FrameTime: 0.651 ms
libpng warning: iCCP: known incorrect sRGB profile
[desktop] effect=shadow:windows=4: FPS: 2340 FrameTime: 0.427 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 1146 FrameTime: 0.873 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 902 FrameTime: 1.109 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 1228 FrameTime: 0.814 ms
[ideas] speed=duration: FPS: 3037 FrameTime: 0.329 ms
[jellyfish] <default>: FPS: 2723 FrameTime: 0.367 ms
[terrain] <default>: FPS: 247 FrameTime: 4.049 ms
[shadow] <default>: FPS: 655 FrameTime: 1.527 ms
[refract] <default>: FPS: 401 FrameTime: 2.494 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 3578 FrameTime: 0.279 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 3476 FrameTime: 0.288 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 3889 FrameTime: 0.257 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 3676 FrameTime: 0.272 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 3694 FrameTime: 0.271 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 3815 FrameTime: 0.262 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 3659 FrameTime: 0.273 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 3875 FrameTime: 0.258 ms
=======================================================
                                  glmark2 Score: 3043 
=======================================================

And here’s the NVIDIA card invoked through prime-run:

[curtispf@curtis-laptop ~]$ prime-run glmark2 
=======================================================
    glmark2 2014.03
=======================================================
    OpenGL Information
    GL_VENDOR:     NVIDIA Corporation
    GL_RENDERER:   GeForce MX330/PCIe/SSE2
    GL_VERSION:    4.6.0 NVIDIA 455.45.01
=======================================================
[build] use-vbo=false: FPS: 585 FrameTime: 1.709 ms
[build] use-vbo=true: FPS: 713 FrameTime: 1.403 ms
[texture] texture-filter=nearest: FPS: 712 FrameTime: 1.404 ms
[texture] texture-filter=linear: FPS: 708 FrameTime: 1.412 ms
[texture] texture-filter=mipmap: FPS: 711 FrameTime: 1.406 ms
[shading] shading=gouraud: FPS: 717 FrameTime: 1.395 ms
[shading] shading=blinn-phong-inf: FPS: 706 FrameTime: 1.416 ms
[shading] shading=phong: FPS: 702 FrameTime: 1.425 ms
[shading] shading=cel: FPS: 710 FrameTime: 1.408 ms
[bump] bump-render=high-poly: FPS: 674 FrameTime: 1.484 ms
[bump] bump-render=normals: FPS: 720 FrameTime: 1.389 ms
[bump] bump-render=height: FPS: 724 FrameTime: 1.381 ms
libpng warning: iCCP: known incorrect sRGB profile
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 691 FrameTime: 1.447 ms
libpng warning: iCCP: known incorrect sRGB profile
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 632 FrameTime: 1.582 ms
[pulsar] light=false:quads=5:texture=false: FPS: 709 FrameTime: 1.410 ms
libpng warning: iCCP: known incorrect sRGB profile
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 598 FrameTime: 1.672 ms
libpng warning: iCCP: known incorrect sRGB profile
[desktop] effect=shadow:windows=4: FPS: 643 FrameTime: 1.555 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 417 FrameTime: 2.398 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 519 FrameTime: 1.927 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 413 FrameTime: 2.421 ms
[ideas] speed=duration: FPS: 691 FrameTime: 1.447 ms
[jellyfish] <default>: FPS: 671 FrameTime: 1.490 ms
[terrain] <default>: FPS: 301 FrameTime: 3.322 ms
[shadow] <default>: FPS: 689 FrameTime: 1.451 ms
[refract] <default>: FPS: 461 FrameTime: 2.169 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 722 FrameTime: 1.385 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 709 FrameTime: 1.410 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 714 FrameTime: 1.401 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 724 FrameTime: 1.381 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 705 FrameTime: 1.418 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 718 FrameTime: 1.393 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 718 FrameTime: 1.393 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 716 FrameTime: 1.397 ms
=======================================================
                                  glmark2 Score: 652 
=======================================================

Needless to say, those scores should not be that way around! I can hear the fans going like wild when I use the prime-run invoked version, and the GPU gets hot according to psensor, but the performance doesn’t seem to show either of those benefits… I don’t get it :frowning:

The GPU temperature never reaches above 80C from what psensor reports, so I don’t think it’s throttling - and I’m not a graphics expert, so I’m not really sure where to go from here in terms of troubleshooting this. Can anyone offer any advice or suggestions?

Thank you!

PRIME limits the fps to your monitor’s refresh rate, if you want to see the full potential, run with:

$ vblank_mode=0 prime-run glmark2

or use an actual game or something else that utilizes the dGPU, you should see the iGPU struggling vs the dGPU.

Thanks very much - running a more demanding benchmark worked! I now have a different issue, but I’ll open a separate thread for that.