Skip to content

GPU performance drop tied to stream framerate on Linux #4567

@amarshall

Description

@amarshall

Is there an existing issue for this?

  • I have searched the existing issues

Is your issue described in the documentation?

  • I have read the documentation

Is your issue present in the latest beta/pre-release?

This issue is present in the latest pre-release

Describe the Bug

GPU performance is limited, tied to the stream framerate. Using Unigine Superposition to induce GPU load and nvidia-smi to monitor GPU utilization (these are all eye-balled numbers, but broadly show scaling).

  • Not streaming: 99% GPU utilization
  • Stream @ 30 fps: 94%
  • Stream @ 60 fps: 90%
  • Stream @ 100 fps: 80%
  • Stream @ 144 fps: 70%

The non-vsync fps in Superposition is also reduced accordingly. This behavior mirrors what I see in games.

When at 144 fps, the stream fps is indeed that per Moonlight info. Host processing latency avg 6.0 ms. No dropped frames. Codec is HEVC.

Expected Behavior

No GPU perf reduction with increased framerate.

Additional Context

I have also corroborated the issue with the latest Bazzite image to rule out guest OS config.

The display framerate seems irrelevant.

The stream resolution seems irrelevant.

This occurs with both KMS (on Plasma 6 Wayland) and NvFBC (on X11).

This occurs with both nvenc and the software encoder.

Desktop is Plasma 6.

This is in a VM using GPU passthrough, and over a virtual ethernet connection.

Host Operating System

Linux

Operating System Version

NixOS unstable fb7944c (Kernel 6.12.63)

also tested on Bazzite

Architecture

amd64/x86_64

Sunshine commit or version

v2026.105.231052

Package

Linux - nixpkgs (Third Party)

GPU Type

NVIDIA

GPU Model

5090

GPU Driver/Mesa Version

Nvidia Open 580.119.02

Capture Method

KMS (Linux)

also tested on NvFBC

Config

# most values irrelevant so redacted
cert=...
file_apps=...
global_prep_cmd=[{"do":"/bin/sunshine-prep"}]
pkey=...
port=...
sunshine_name=...

Apps

Relevant log output

Tested several different configs, only including the logs from NixOS+Plasma6+KMS+nvenc.

Info: Sunshine version: 2026.105.231052 commit: 
Info: Package Publisher: nixpkgs
Info: Publisher Website: https://nixos.org
Info: Get support: https://github.com/NixOS/nixpkgs/issues
Info: config: 'cert' = ...
Info: config: 'global_prep_cmd' = [{"do":"/bin/sunshine-prep"}]
Info: config: 'file_apps' = ...
Info: config: 'pkey' = ...
Info: config: 'port' = ...
Info: config: 'sunshine_name' = ...
Error: Failed to create session: 
Info: Found display [wayland-0]
Info: Found interface: zxdg_output_manager_v1(31) version 3
Info: Found interface: zwp_linux_dmabuf_v1(58) version 5
Info: Found interface: wl_output(65) version 4
Warning: Missing Wayland wire for wlr-export-dmabuf
Info: /dev/dri/card0 -> nvidia-drm
Info: Found display [wayland-0]
Info: Found display [wayland-0]
Info: Found interface: zxdg_output_manager_v1(31) version 3
Info: Found interface: zwp_linux_dmabuf_v1(58) version 5
Info: Found interface: wl_output(65) version 4
Info: Resolution: 3840x2160
Info: Offset: 0x0
Info: Logical size: 2259x1271
Info: Name: DP-3
Info: Found monitor: GSM LG ULTRAGEAR+
Info: -------- Start of KMS monitor list --------
Info: Monitor 0 is DP-3: GSM LG ULTRAGEAR+
Info: --------- End of KMS monitor list ---------
Warning: Gamepad ds5 is disabled due to Permission denied
Info: // Testing for available encoders, this may generate errors. You can safely ignore those errors. //
Info: Trying encoder [nvenc]
Info: Screencasting with KMS
Info: /dev/dri/card0 -> nvidia-drm
Info: Found monitor for DRM screencasting
Info: Found connector ID [138]
Info: Found cursor plane [55]
Info: Creating encoder [h264_nvenc]
Info: Color coding: SDR (Rec. 601)
Info: Color depth: 8-bit
Info: Color range: JPEG
Info: Streaming bitrate is 1000000
Info: Creating encoder [hevc_nvenc]
Info: Color coding: SDR (Rec. 601)
Info: Color depth: 8-bit
Info: Color range: JPEG
Info: Streaming bitrate is 1000000
Info: Creating encoder [av1_nvenc]
Info: Color coding: SDR (Rec. 601)
Info: Color depth: 8-bit
Info: Color range: JPEG
Info: Streaming bitrate is 1000000
Info: Screencasting with KMS
Info: /dev/dri/card0 -> nvidia-drm
Info: Found monitor for DRM screencasting
Info: Found connector ID [138]
Info: Found cursor plane [55]
Info: Creating encoder [hevc_nvenc]
Info: Color coding: SDR (Rec. 709)
Info: Color depth: 10-bit
Info: Color range: JPEG
Info: Streaming bitrate is 1000000
Info: Creating encoder [av1_nvenc]
Info: Color coding: SDR (Rec. 709)
Info: Color depth: 10-bit
Info: Color range: JPEG
Info: Streaming bitrate is 1000000
Info: 
Info: // Ignore any errors mentioned above, they are not relevant. //
Info: 
Info: Found H.264 encoder: h264_nvenc [nvenc]
Info: Found HEVC encoder: hevc_nvenc [nvenc]
Info: Found AV1 encoder: av1_nvenc [nvenc]
Info: Starting system tray
Info: Adding avahi service ...
Info: Configuration UI available at [https://localhost:47990]
Info: System tray created
Info: Starting main loop
Info: Avahi service ... successfully established.
Info: // Testing for available encoders, this may generate errors. You can safely ignore those errors. //
Info: Trying encoder [nvenc]
Info: Screencasting with KMS
Info: /dev/dri/card0 -> nvidia-drm
Info: Found monitor for DRM screencasting
Info: Found connector ID [138]
Info: Found cursor plane [55]
Info: Creating encoder [h264_nvenc]
Info: Color coding: SDR (Rec. 601)
Info: Color depth: 8-bit
Info: Color range: JPEG
Info: Streaming bitrate is 1000000
Info: Creating encoder [hevc_nvenc]
Info: Color coding: SDR (Rec. 601)
Info: Color depth: 8-bit
Info: Color range: JPEG
Info: Streaming bitrate is 1000000
Info: Creating encoder [av1_nvenc]
Info: Color coding: SDR (Rec. 601)
Info: Color depth: 8-bit
Info: Color range: JPEG
Info: Streaming bitrate is 1000000
Info: Screencasting with KMS
Info: /dev/dri/card0 -> nvidia-drm
Info: Found monitor for DRM screencasting
Info: Found connector ID [138]
Info: Found cursor plane [55]
Info: Creating encoder [hevc_nvenc]
Info: Color coding: SDR (Rec. 709)
Info: Color depth: 10-bit
Info: Color range: JPEG
Info: Streaming bitrate is 1000000
Info: Creating encoder [av1_nvenc]
Info: Color coding: SDR (Rec. 709)
Info: Color depth: 10-bit
Info: Color range: JPEG
Info: Streaming bitrate is 1000000
Info: 
Info: // Ignore any errors mentioned above, they are not relevant. //
Info: 
Info: Found H.264 encoder: h264_nvenc [nvenc]
Info: Found HEVC encoder: hevc_nvenc [nvenc]
Info: Found AV1 encoder: av1_nvenc [nvenc]
Info: Executing Do Cmd: [/bin/sunshine-prep]
Info: Executing [Desktop]
Info: New streaming session started [active sessions: 1]
Info: CLIENT CONNECTED
Info: /dev/dri/card0 -> nvidia-drm
Info: Found display [wayland-0]
Info: Found interface: zxdg_output_manager_v1(31) version 3
Info: Found interface: zwp_linux_dmabuf_v1(58) version 5
Info: Found interface: wl_output(65) version 4
Info: Resolution: 3840x2160
Info: Offset: 0x0
Info: Logical size: 2259x1271
Info: Name: DP-3
Info: Found monitor: GSM LG ULTRAGEAR+
Info: -------- Start of KMS monitor list --------
Info: Monitor 0 is DP-3: GSM LG ULTRAGEAR+
Info: --------- End of KMS monitor list ---------
Info: Screencasting with KMS
Info: /dev/dri/card0 -> nvidia-drm
Info: Found monitor for DRM screencasting
Info: Found connector ID [138]
Info: Found cursor plane [55]
Info: Creating encoder [hevc_nvenc]
Info: Color coding: SDR (Rec. 709)
Info: Color depth: 8-bit
Info: Color range: JPEG
Info: Streaming bitrate is 62988000
Info: Minimum FPS target set to ~30fps (33.3333ms)
Info: Setting default sink to: [sink-sunshine-stereo]
Info: Found default monitor by name: sink-sunshine-stereo.monitor
Info: Opus initialized: 48 kHz, 2 channels, 512 kbps (total), LOWDELAY

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions