https://bugs.kde.org/show_bug.cgi?id=527244

Malek Haroun <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |[email protected]

--- Comment #7 from Malek Haroun <[email protected]> ---
Confirming the same root cause on a second Intel-iGPU + AMD-dGPU machine, with
before/after quantification.

Hardware: HP ZBook 15 G3, Intel Core i7-6700HQ
 - iGPU: Intel HD Graphics 530, 0000:00:02.0, boot_vga=1, drives the internal
panel -> card1 / renderD128
 - dGPU: AMD Radeon R9 M375X (Verde, amdgpu), 0000:01:00.0, no connected
outputs -> card0 / renderD129
 - dGPU power settings are distro defaults and were never changed:
power/control=auto, autosuspend_delay_ms=5000
Software: CachyOS, kwin 6.8.0-1.1, Mesa 26.2.4, kernel 7.2.9-2-cachyos, Plasma
Wayland session

libudev returns the render nodes in the same order already reported in comments
3/4/6 (the dGPU sits under root port 0000:00:01.0, which enumerates before the
iGPU's 0000:00:02.0):

    /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/renderD129   (dGPU,
first)
    /sys/devices/pci0000:00/0000:00:02.0/drm/renderD128                (iGPU)

so WaylandServer::updateSyncobjSupport() binds the single
wp_linux_drm_syncobj_manager_v1 global to the
runtime-suspended dGPU. Both GPUs report DRM_CAP_SYNCOBJ_TIMELINE=1, so only
the list order decides.

Quantification before the workaround (ftrace kprobes on amdgpu_drm_ioctl, 103 s
window on a normally animated desktop):
 - 6458 ioctls on amdgpu's DRM fd, all in the kwin_wayland main thread (~63/s)
 - decoded with /usr/include/drm/drm.h: SYNCOBJ_CREATE 0xc00864bf,
SYNCOBJ_FD_TO_HANDLE 0xc01864c2,
   SYNCOBJ_TRANSFER 0xc02064cc, SYNCOBJ_EVENTFD 0xc01864cf (same command as in
the bpftrace trace in comment 0)
 - rpm_resume for 0000:01:00.0 followed the first ioctl of every burst with cnt
1->2 (only the compositor's own
   reference; no PM reference leak)
 - in one boot's journal: 19 x "main thread was hanging temporarily!" from
kwin_wayland and 44 x
   "PCIE GART of 1024M enabled"; each hang follows the GART resume line by ~1.0
s

After setting KWIN_RENDER_NODES=/dev/dri/renderD128:/dev/dri/renderD129
(~/.config/environment.d + re-login;
the iGPU stays the compositing device because it is the only device with an
output):
 - 252 s of continuous 60 fps video playback plus an explicit-sync client:
   dGPU runtime_active_time +0 ms, runtime_suspended_time +252409 ms,
runtime_status "suspended" throughout,
   0 new "main thread was hanging", 0 new GART resumes
 - power/control=auto and autosuspend_delay_ms=5000 unchanged; DRI_PRIME=1
glxinfo -B still reports the R9 M375X,
   Accelerated: yes, so PRIME offload is untouched
 - render/card numbering unchanged after re-login (pci-0000:00:02.0-render ->
renderD128)

This also matches comment 5: as long as the syncobj manager is bound to the
dGPU, every explicit-sync client
(including anything running through PRIME/Vulkan) keeps taking per-frame ioctls
on the dGPU's fd, so the
battery drain is the same bug, not a separate one.

Attached: measurement details (ioctl decoding, runtime-PM counters, journal
excerpts).

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to