VRAM leak: orphaned DMA-BUFs sized to physical monitor accumulate while streaming a virtual headless output (wlr capture, NVENC)
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- cpp, linux
- Ambito
- computer-graphics, performance
Direzione di ricerca
Start by tracing Sunshine's wlr capture entry point and its zwlr_screencopy_manager_v1 DMA-BUF lifecycle while reproducing the headless-output case with the measurements described. Compare allocation and release behavior during streaming, disconnect, and Sunshine restart; done means unattributed VRAM and orphaned DMA-BUF counts remain flat and return to baseline after disconnect.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the Bug
Streaming from a virtual headless output leaks VRAM as orphaned DMA-BUFs that
are visible in neither nvidia-smi's process list nor any process's fd table.
The leak accumulates continuously (~1.3 GB/h) while a stream is active, and
survives client disconnect — only restarting Sunshine frees it.
Measured on an RTX 5090 32GB over two sessions:
- ~30 GB VRAM unaccounted for after ~2 days of intermittent streaming
- 24.9 GB leaked after one overnight session; freed instantly by
systemctl --user restart sunshine(24893 → 2723 MiB) - 1-hour instrumented run: unattributed VRAM grows 1819 → 2570 MiB while
streaming, stays flat after client disconnect, grows again on reconnect
Key observation: leaked buffers match the physical monitor, not the streamed one
/sys/kernel/debug/dma_buf/bufinfo (as root) shows thousands of leaked
buffers with refcount 2 and no attached devices:
size flags mode count exp_name ino name
39321600 00000002 02080007 00000002 drm 00974892 <none>
Attached Devices:
Total 0 devices attached
... (repeated ~800x, plus a second size class)
20971520 00000002 02080007 00000002 drm 00974746 <none>
- 39321600 bytes = exactly 3840×2560×4 → the physical monitor (BenQ RD280U)
- 20971520 bytes = 2048×2560×4 (aligned variant)
- The streamed output is a virtual headless monitor "SUNSHINE" at 1512×982
(output_name = SUNSHINE), i.e. the leaked buffers are the wrong size for
the capture target — they appear to be allocated per capture cycle against
the physical display and never released.
Config
capture = wlr
output_name = SUNSHINE
Hyprland (Wayland). Sunshine uses the zwlr_screencopy_manager_v1 path
("Screencasting with Wayland's protocol" in the log), NVENC encoder.
Environment
- Sunshine 2026.914.233613, commit 63d35f702ee9e362e43263742981836ec0710384
(includes #4757, #4588, #5023 — behavior persists) - Arch Linux, Hyprland (wlroots screencopy), NVIDIA RTX 5090
- Driver: nvidia-open-dkms 610.57.04
- Note: nvidia-open 610.x exposes no /sys/kernel/debug/nvidia client list, so
the leak is only visible via dma_buf/bufinfo and by diffing
nvidia-smi --query-gpu=memory.usedagainst the attributed process sum.
Reproduction
- Hyprland with one physical 4K monitor + one headless output (e.g.
hyprctl output create headless SUNSHINE), Sunshineoutput_name= the
headless output, capture = wlr - Stream for ~1 hour; periodically measure unattributed VRAM =
nvidia-smi --query-gpu=memory.usedminus the process sum - Disconnect the client — leak does not drop
systemctl --user restart sunshine— leak drops to baseline instantly
Expected behavior
DMA-BUFs used for capture should be released when the frame is consumed; VRAM
usage should stay flat (minus normal encoder buffers) for the session
lifetime and drop on client disconnect.
- Lingua principale
- C++
- Stelle
- 41.4k
- Fork
- 2.1k
- Merge medio
- 20h 19m
- PR unite (30g)
- 125
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di LizardByte/Sunshine
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
LizardByte/Sunshine#5795 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
LizardByte/Sunshine#5467 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
LizardByte/Sunshine#5812 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
LizardByte/Sunshine#5803 · 6 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
LizardByte/Sunshine#5792 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di LizardByte/Sunshine
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
hyprwm/aquamarine#426 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
amnezia-vpn/amnezia-client#3222 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
valkey-io/valkey-search#1465 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
KhronosGroup/Vulkan-Tutorial#524 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
microsoft/onnxruntime-genai#2633 ·
I maintainer di solito rispondono entro 1 giorno