[RESPONDED] External monitor stuck at 30 fps when using egpu

RAM is 32GB of DDR4-3200 JEDEC (2 x 16GB sticks)
gnome-settings monitor config ($HOME/.config/monitors.xml):

<monitors version="2">
  <configuration>
    <logicalmonitor>
      <x>0</x>
      <y>0</y>
      <scale>1</scale>
      <primary>yes</primary>
      <monitor>
        <monitorspec>
          <connector>eDP-1</connector>
          <vendor>BOE</vendor>
          <product>0x095f</product>
          <serial>0x00000000</serial>
        </monitorspec>
        <mode>
          <width>2256</width>
          <height>1504</height>
          <rate>59.999</rate>
        </mode>
      </monitor>
    </logicalmonitor>
  </configuration>
  <configuration>
    <logicalmonitor>
      <x>0</x>
      <y>0</y>
      <scale>1</scale>
      <primary>yes</primary>
      <monitor>
        <monitorspec>
          <connector>HDMI-1</connector>
          <vendor>ACI</vendor>
          <product>VS248</product>
          <serial>HALMQS145821</serial>
        </monitorspec>
        <mode>
          <width>1920</width>
          <height>1080</height>
          <rate>60.000</rate>
        </mode>
      </monitor>
    </logicalmonitor>
    <logicalmonitor>
      <x>1920</x>
      <y>0</y>
      <scale>1</scale>
      <monitor>
        <monitorspec>
          <connector>eDP-1</connector>
          <vendor>BOE</vendor>
          <product>0x095f</product>
          <serial>0x00000000</serial>
        </monitorspec>
        <mode>
          <width>2256</width>
          <height>1504</height>
          <rate>59.999</rate>
        </mode>
      </monitor>
    </logicalmonitor>
  </configuration>
</monitors>

@Anachron also, I tried installing and testing wlr-randr as I’m guessing that it’s something you’re familiar with:
wlr-randr
compositor doesn't support wlr-output-management-unstable-v1

@Anachron @Loell_Framework any ideas?

Probably good to know which BIOS version you’ve installed?

I’ve installed the 03.06 beta one.

(The Firmware handles the ReBar support)

Can you also tell us why you think it’s limiting to 30fps? Because I don’t see anything showing 30fps.

Please tell us more about what programs and show us what is giving you the 30fps value.

It could be that you’re running a game for example and you use vsync. Vsync locks the fps to either 30 or 60 afaik.

anything using VSync is limited to 30 FPS when on the external display. bios 3.06 beta here too

External screen on eGPU:


Laptop screen:

Am starting to wonder if this is a gnome mutter issue. will test with KDE later to be sure.

Someone on Mastodon posted this recently:

The ritual to convince Linux to run both of my 4k displays at 60 Hz when it initially refuses to recognize that both are 60 Hz capable:

1. Turn off the 60 Hz one.
2. Turn off the 30 Hz one.
3. Turn that one back on. It is now 60 Hz.
4. Turn the first one back on.

I’ve sunk many evenings into debugging this and so far this is the best solution that works consistently.

So maybe you just need to force 60hz on your display. Not sure how you do that with Mutter, for me I would have to modify my river config.

Edit:
Also, do you need vsync? You could turn it off and check if that allows the programs to have more fps.

I know that vsync off would allow me to reach (and exceed) my monitor’s target, but that doesn’t help either, as it still appears to render at 30fps. it’s almost as if the compositor doesn’t actually know my external monitor’s refresh rate.

Yeah, please try my 2 suggestions.

See archwiki, specifically 2.2 and 2.2.1.

Should also add modprobe.blacklist=noveau

Last ditch, can you use the monitoring tools at the end of the archwiki link and see if this gist is relevant?

2.2 and 2.2.1 are specific to southern islands support (HD 7000, not RX 7000) and sea islands support (HD 8000), and so are pointless in regards to my setup (RX 6800). Module nouveau is specific to nvidia, and is not loaded either, so blacklisting that is also pointless. Your last point, however, is interesting as it points out similar issues that I have been having. It may also be worth pointing out that I have never seen the GPU in my enclosure spin up it’s fans past boot (I at least know they work), so stuck clocks may be a real thing here.

@Marcus_Taylor

I tried helping you but you’re either ignoring the replies or only half-heartly try my suggestions.

So I hope you’ll figure this out,- but I’m out of this.

@Anachron
was moving house during all of this, please be patient!

I just tested @Anachron 's suggestion, but no dice. hope your idea works, @Be_Far !

@Be_Far after monitoring my clocks with corectrl, I can see that my GPU clocks are not spooling up at all. using the same tool, I was able to switch the GPU from low performance to high performance, with the clocks now engaging! Unfortunately however, I’m still limited to 30 FPS. going to try fix outlined in the gist now

@Be_Far gist did not work either, sadly. I have, however, come up with a half decent workaround that allows my external display to work at full speed:
using all-ways-egpu and some extra scripts I typed up myself, I was able to get very close to 60 FPS on my external display while at the cost of hot plug and unplug support.
Current state of things now:

  • No hot plug support (requires logging out, plugging in, and logging back in)
  • No hot unplug support (requires logging out, unplugging, and logging back in)
  • When using the eGPU, my internal display is now stuck at rendering 30 FPS with VSync (inverse of original problem, but I can live with that)
  • When I plug in the eGPU at the login screen, I have to wait for the enclosure to finish bringing up all attached hardware or nothing will work right in KDE (left with only software rendering). Issues caused by this can be solved by logging out and back in.
  • If the laptop lid is closed when logging out and unplugging the eGPU from the laptop, everything will hang, requiring a hard shutdown.