Skip to content

Swapchain present overhead on Niri very high (~5-30ms, up to 1500x higher than GNOME) #3562

@LDAP

Description

@LDAP

Calling present on a Vulkan application takes about 5-30ms on Niri (while only taking about 0.06 ms on GNOME for example). This is around the frame time of the application (might be related). The time seems to be scaling with increasing load on the GPU. The same numbers can be observed in Mailbox and Fifo mode.

Screenshot from the merian-quake profiler in Niri (look at CPU/submit callbacks/present):

Image

Mean and variance over 500 ms:

Image

Screenshot from merian-quake profiler in GNOME:

Image

Might be related: The ray tracing kernel varies between 3-20ms on Niri (see again the screenshot) while being at a stable 3.1ms on GNOME. Other kernels also have this huge variance and from profiling with NSight it seems that Niri is interrupting too often and taking too much GPU time: #3556. You can actually see the larger interruptions in the profiler as spikes. While GNOME interrupts as well it happens very infrequently and that's also what I am used to seeing in Nsight when I was using GNOME.

I am happy to help debugging this issue - thanks for the great compositor!

Config
environment {
  XDG_CURRENT_DESKTOP "niri"
  QT_QPA_PLATFORM "wayland"
  ELECTRON_OZONE_PLATFORM_HINT "auto"
  QT_QPA_PLATFORMTHEME "gtk3"
  QT_QPA_PLATFORMTHEME_QT6 "gtk3"
  XDG_MENU_PREFIX "arch-"
}

spawn-sh-at-startup "xdg_menu && kbuildsycoca6"

input {
    keyboard {
        xkb {
            // fetch xkb settings from systemd-localed at org.freedesktop.locale1 over D-Bus. This way, for example, system installers can dynamically set the niri keyboard layout.
        }
        numlock
    }

    touchpad {
        tap
        natural-scroll
        // dwt  // disable-while-typing
    }

    mouse {
        accel-profile "flat"
        // accel-speed 0.0
    }

    trackpoint {
        // accel-profile "flat"
    }

    warp-mouse-to-focus
    focus-follows-mouse max-scroll-amount="0%"
}

layout {
    gaps 16
    center-focused-column "never"
   
    preset-column-widths {
        proportion 0.33333
        proportion 0.5
        proportion 0.66667
    }

    default-column-width { proportion 0.5; }
   
    focus-ring {
        width 4

        active-color "#7fc8ff"

        inactive-color "#505050"
    }

    border {
        off

        width 4
        active-color "#ffc87f"
        inactive-color "#505050"
        urgent-color "#9b0000"
    }

    shadow {
        on
        softness 30
        spread 5
        offset x=0 y=5
        color "#0007"
    }
}


spawn-at-startup "bash" "-c" "wl-paste --watch cliphist store"

hotkey-overlay {
    // DMS has its own keybind viewer (Mod+Shift+/)
    skip-at-startup
}

prefer-no-csd
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"

animations {
}

// DMS renders its wallpaper as a Quickshell surface in the background layer.
// dms:blurwallpaper (in backdrop via wpblur.kdl) shows behind it during overview.
layer-rule {
    match namespace="^quickshell$"
}

// ── DMS includes ─────────────────────────────────────────────────────────────
include "dms/colors.kdl"
include "dms/layout.kdl"
include "dms/alttab.kdl"
include "dms/cursor.kdl"
include "dms/outputs.kdl"
include "dms/windowrules.kdl"
include "dms/wpblur.kdl"
include "dms/binds.kdl"

binds {
    Mod+Shift+Ctrl+D { debug-toggle-damage; }
}

System Information

  • niri version: niri 25.11
  • Distro: Fedora 43
  • GPU: NVIDIA RTX 5070 Ti Laptop
  • CPU: Intel(R) Core(TM) Ultra 9 285H

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions