https://bugs.kde.org/show_bug.cgi?id=521239
Bug ID: 521239
Summary: kwin_wayland event loop stalls cause GPU to drop to
idle during fullscreen gaming (Proton/Wine)
Classification: Plasma
Product: kwin
Version First unspecified
Reported In:
Platform: CachyOS
OS: Linux
Status: REPORTED
Severity: major
Priority: NOR
Component: platform-drm
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected]
Target Milestone: ---
DESCRIPTION
While playing Path of Exile 2 fullscreen via Proton/Steam on Wayland, the GPU
randomly
drops from full load to near-idle and stays there until I manually switch focus
to a
neutral window like System Monitor. During this state the entire system feels
like it
is running at 5fps - not just the game, but also moving other windows like the
Steam
client feels completely frozen. This confirms the compositor itself is
affected, not
just the game's render pipeline. Switching to Steam does not resolve it, only
switching
to something like System Monitor does.
I noticed that setting KWIN_DRM_NO_DIRECT_SCANOUT=1 changes the behavior
noticeably:
instead of the GPU getting stuck at 0% until I intervene manually, it now dips
but
recovers most of the time on its own. It still stutters, but it no longer locks
up permanently. That
pointed me toward KWin's direct scanout handling as a likely factor.
This only happens in Path of Exile 2. Other games I regularly play - including
4K modded
Skyrim and Deadlock, both via DX11/Proton - run fine at 230-240W with 100% GPU
usage
continuously. The hardware itself is not the issue.
I am not sure what exactly triggers it. A KDE notification seems to increase
the chance
but is not a guaranteed trigger. It does not happen while AFK in the game menu,
only
during active gameplay. More background applications open means higher
frequency.
STEPS TO REPRODUCE
1. Launch Path of Exile 2 fullscreen via Steam/Proton (tested: Vulkan and DX12,
both
behave identically - rules out a renderer-specific issue on the game side)
2. Actively play with other applications running in the background
3. Trigger a KDE notification, or just play - timing is random
OBSERVED RESULT
The GPU drops from ~225W / 99% usage to near-idle in two stages within a few
seconds,
then gets stuck there. Usage percentage and wattage drop simultaneously - this
is not
thermal or power throttling (in throttling scenarios usage stays high while
clocks drop).
Here the GPU simply stops receiving work. MCLK stays at 1000MHz throughout, DPM
level
stays "manual" throughout - nothing external is changing power management
during the event.
The drop happens in two stages as visible in the log below: first a partial
drop to
around 110-115W with unstable clocks, then a full collapse to 45-50W / 0%
usage.
GPU monitoring log (sysfs, 0.5s interval):
[16:06:47.659] Busy:99% | 239W 68C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz <-
full load
[16:06:48.187] Busy:99% | 237W 67C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:06:48.714] Busy:30% | 201W 66C | DPM:manual | SCLK:2015Mhz MCLK:1000Mhz <-
first dip begins
[16:06:49.242] Busy:79% | 113W 62C | DPM:manual | SCLK:1990Mhz MCLK:1000Mhz
[16:06:49.770] Busy:82% | 114W 62C | DPM:manual | SCLK:2050Mhz MCLK:1000Mhz
[16:06:50.299] Busy:77% | 116W 61C | DPM:manual | SCLK:2230Mhz MCLK:1000Mhz
[16:06:50.828] Busy:74% | 117W 61C | DPM:manual | SCLK:2000Mhz MCLK:1000Mhz
[16:06:51.355] Busy:96% | 111W 60C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:06:51.883] Busy:87% | 112W 60C | DPM:manual | SCLK:1905Mhz MCLK:1000Mhz
[16:06:52.411] Busy:74% | 113W 61C | DPM:manual | SCLK:1920Mhz MCLK:1000Mhz
[16:06:52.938] Busy:80% | 112W 60C | DPM:manual | SCLK:1720Mhz MCLK:1000Mhz
[16:06:53.466] Busy:90% | 112W 59C | DPM:manual | SCLK:1940Mhz MCLK:1000Mhz
[16:06:53.993] Busy:84% | 112W 60C | DPM:manual | SCLK:1980Mhz MCLK:1000Mhz
[16:06:54.520] Busy:75% | 112W 59C | DPM:manual | SCLK:1990Mhz MCLK:1000Mhz
[16:06:55.048] Busy:81% | 112W 59C | DPM:manual | SCLK:1765Mhz MCLK:1000Mhz
[16:06:55.576] Busy:72% | 100W 59C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:06:56.105] Busy:32% | 60W 57C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:06:56.631] Busy:63% | 60W 56C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:06:57.162] Busy:99% | 216W 62C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz <-
brief recovery
[16:06:57.698] Busy:99% | 224W 65C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:06:58.230] Busy:66% | 93W 59C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:06:58.757] Busy:39% | 178W 62C | DPM:manual | SCLK:1880Mhz MCLK:1000Mhz
[16:06:59.287] Busy:89% | 145W 61C | DPM:manual | SCLK:1735Mhz MCLK:1000Mhz
[16:06:59.815] Busy:99% | 170W 62C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:00.343] Busy:58% | 57W 57C | DPM:manual | SCLK:1840Mhz MCLK:1000Mhz <-
second drop, KWin messages start
[16:07:00.870] Busy:17% | 48W 56C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:07:01.396] Busy:52% | 75W 57C | DPM:manual | SCLK:2180Mhz MCLK:1000Mhz
[16:07:01.924] Busy:88% | 186W 61C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:02.452] Busy:99% | 145W 60C | DPM:manual | SCLK:2360Mhz MCLK:1000Mhz
[16:07:02.979] Busy:92% | 187W 61C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:03.507] Busy:92% | 175W 62C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:04.033] Busy:95% | 197W 61C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:04.562] Busy:97% | 192W 62C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:05.090] Busy:97% | 216W 63C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:05.617] Busy:95% | 208W 63C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:06.144] Busy:77% | 89W 59C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:07:06.672] Busy:61% | 92W 58C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:07:07.200] Busy:98% | 196W 61C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:07.728] Busy:98% | 195W 62C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:08.254] Busy:32% | 115W 60C | DPM:manual | SCLK:2020Mhz MCLK:1000Mhz
[16:07:08.781] Busy:35% | 66W 58C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:07:09.309] Busy:56% | 63W 57C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:07:09.835] Busy:34% | 61W 56C | DPM:manual | SCLK:500Mhz MCLK:1000Mhz <-
KWin messages again
[16:07:10.362] Busy:40% | 64W 56C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:07:10.889] Busy:45% | 64W 56C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:07:11.417] Busy:7% | 57W 56C | DPM:manual | SCLK:500Mhz MCLK:1000Mhz
[16:07:11.944] Busy:22% | 53W 56C | DPM:manual | SCLK:500Mhz MCLK:1000Mhz
[16:07:12.471] Busy:33% | 57W 56C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz
[16:07:13.000] Busy:38% | 65W 56C | DPM:manual | SCLK:500Mhz MCLK:1000Mhz
[16:07:13.527] Busy:0% | 43W 55C | DPM:manual | SCLK:1600Mhz MCLK:1000Mhz <-
complete idle
[16:07:14.055] Busy:99% | 212W 60C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz <-
recovered (window switch)
[16:07:14.582] Busy:99% | 219W 63C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:19.331] Busy:99% | 220W 65C | DPM:manual | SCLK:2425Mhz MCLK:1000Mhz
[16:07:19.858] Busy:0% | 45W 58C | DPM:manual | SCLK:500Mhz MCLK:1000Mhz <-
drops again immediately
Corresponding journalctl output at the same timestamps:
Jun 08 16:07:00 kwin_wayland_wrapper[3471]: Key repeat discarded, Wayland
compositor doesn't seem to be processing events fast enough!
Jun 08 16:07:00 kwin_wayland_wrapper[3471]: Key repeat discarded, Wayland
compositor doesn't seem to be processing events fast enough!
Jun 08 16:07:00 kwin_wayland_wrapper[3471]: Key repeat discarded, Wayland
compositor doesn't seem to be processing events fast enough!
Jun 08 16:07:09 kwin_wayland_wrapper[3471]: Key repeat discarded, Wayland
compositor doesn't seem to be processing events fast enough!
Jun 08 16:07:09 kwin_wayland_wrapper[3471]: Key repeat discarded, Wayland
compositor doesn't seem to be processing events fast enough!
Jun 08 16:07:09 kwin_wayland_wrapper[3471]: Key repeat discarded, Wayland
compositor doesn't seem to be processing events fast enough!
Jun 08 16:07:11 kwin_wayland_wrapper[3471]: Key repeat discarded, Wayland
compositor doesn't seem to be processing events fast enough!
Jun 08 16:07:13 kwin_wayland_wrapper[3471]: Key repeat discarded, Wayland
compositor doesn't seem to be processing events fast enough!
(repeated several more times at 16:07:13)
EXPECTED RESULT
The compositor struggling with its own event queue should not cause GPU load to
collapse
and the entire display stack to stall.
WORKAROUND
export KWIN_DRM_NO_DIRECT_SCANOUT=1
systemctl --user restart plasma-plasmashell.service
With direct scanout disabled, the GPU still dips occasionally but recovers most
of the time automatically
without requiring a manual window switch. The system no longer locks up
completely.
SOFTWARE/OS VERSIONS
Operating System: CachyOS (Arch-based, rolling)
KDE Plasma Version: 6.6.5
KWin Version: 6.6.5
Kernel: linux-cachyos 7.0.11
GPU: AMD RX 6800 XT (amdgpu driver, Mesa mesa 2:26.1.2-1)
Display setup: 3 monitors, all 165Hz, same resolution, KDE Wayland session
CPU: AMD Ryzen 7 5800X3D, RAM: 48GB
ADDITIONAL INFORMATION
- Only reproducible in Path of Exile 2 so far. Deadlock (DX11) and fully modded
4K
Skyrim (DX11) maintain 100% GPU usage with no drops at all.
- Both Vulkan and DX12 mode in PoE2 are equally affected, ruling out a
renderer-specific
issue on the game side.
- Never observed while AFK in the game menu, only during active gameplay.
- More background applications running = higher frequency of occurrence.
- KDE notifications appear to be a likely trigger but are not a guaranteed one.
- The "Key repeat discarded" message in kwin_wayland_wrapper appears around the
same second
as the GPU drop in every captured instance and keeps logging while the game
stutters.
- During the stall, moving non-game windows (e.g. Steam client) also feels like
5fps.
--
You are receiving this mail because:
You are watching all bug changes.