Nvidia - chinatsu/niri GitHub Wiki

High VRAM usage fix

Presently, there is a quirk in the NVIDIA drivers that affects niri's VRAM usage (the driver does not properly release VRAM back into the pool). Niri should use on the order of 100 MiB of VRAM (as checked in nvtop); if you see anywhere close to 1 GiB of VRAM in use, you are likely hitting this issue (heap not returning freed buffers to the driver).

Luckily, you can mitigate this by configuring the NVIDIA drivers with a per-process application profile as follows:

  • sudo mkdir -p /etc/nvidia/nvidia-application-profiles-rc.d to make the config dir if it does not exist (it most likely does not if you are reading this)

  • write the following JSON blob to set the GLVidHeapReuseRatio config value for the niri process into the file /etc/nvidia/nvidia-application-profiles-rc.d/50-limit-free-buffer-pool-in-wayland-compositors.json:

    {
        "rules": [
            {
                "pattern": {
                    "feature": "procname",
                    "matches": "niri"
                },
                "profile": "Limit Free Buffer Pool On Wayland Compositors"
            }
        ],
        "profiles": [
            {
                "name": "Limit Free Buffer Pool On Wayland Compositors",
                "settings": [
                    {
                        "key": "GLVidHeapReuseRatio",
                        "value": 0
                    }
                ]
            }
        ]
    }
    

    (The file in /etc/nvidia/nvidia-application-profiles-rc.d/ can be named anything, and does not actually need an extension).

Restart niri after writing the config file to apply the change.

The upstream issue that this solution was pulled from is here. There is a (slim) chance that NVIDIA updates their built-in application profiles to apply this to niri automatically; it is unlikely that the underlying heuristic will see a proper fix.

The fix shipped in the driver at the time of writing uses a value of 0, while the initial config posted by an Nvidia engineer approximately a year prior used a value of 1.

Screencast flickering fix

If you have screencast glitches or flickering on NVIDIA, set this in the niri config:

debug {
    wait-for-frame-completion-in-pipewire
}

This will become unnecessary once niri supports explicit sync for PipeWire screencasts: https://github.com/YaLTeR/niri/issues/1432