Bug 506993 - Intel GPU usage works initially but stops working
Summary: Intel GPU usage works initially but stops working
Status: RESOLVED UPSTREAM
Alias: None
Product: plasma-systemmonitor
Classification: Applications
Component: general (other bugs)
Version First Reported In: 6.4.2
Platform: Arch Linux Linux
: NOR normal
Target Milestone: ---
Assignee: KSysGuard Developers
URL: https://gitlab.freedesktop.org/drm/ig...
Keywords:
Depends on:
Blocks:
 
Reported: 2025-07-13 14:43 UTC by yanc2410
Modified: 2025-11-04 14:35 UTC (History)
8 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments
Reproduced the bug 6 hours after boot. (192.24 KB, image/png)
2025-07-13 22:16 UTC, yanc2410
Details
intel_gpu_top only showing per-process use but not total numbers (91.33 KB, image/png)
2025-11-03 09:55 UTC, Alexey "Kitsune" Rusakov
Details

Note You need to log in before you can comment on or make changes to this bug.
Description yanc2410 2025-07-13 14:43:22 UTC
SUMMARY
GPU usage always  shows 0 after almost one hour's work and nvtop can show my GPU useage correctly

STEPS TO REPRODUCE
1. log in,open the systemmonitor(or not)
2. watch video in firefox or do nothing for a while(almost an hour)
3. check the systemmonitor 

OBSERVED RESULT
the GPU useage stuck at 0

EXPECTED RESULT
it should show my GPU activity just as nvtop since my gpu works correctly

SOFTWARE/OS VERSIONS
Linux/KDE Plasma: Arch Linux
KDE Plasma Version: 6.4.2
KDE Frameworks Version:6.16.0 
Qt Version: 6.9.1

ADDITIONAL INFORMATION
it seems that something similer happened in this page two years before
https://forum.endeavouros.com/t/plasma-system-monitor-sensor-gpu/34563/14 
my  GPU: Intel Iris Xe Graphics @ 1.45 GHz [Integrated]
Comment 1 yanc2410 2025-07-13 22:16:04 UTC
Created attachment 183210 [details]
Reproduced the bug  6 hours after boot.
Comment 2 Alexey "Kitsune" Rusakov 2025-07-18 15:45:35 UTC
Same thing on Lenovo X1 nano gen2 with Fedora 42.
Comment 3 David Redondo 2025-07-21 14:12:19 UTC
What is the output of 

/usr/lib/ksystemstats_intel_helper

?
Comment 4 Alexey "Kitsune" Rusakov 2025-07-21 19:05:21 UTC
(In reply to David Redondo from comment #3)
> What is the output of 
> 
> /usr/lib/ksystemstats_intel_helper

918130|Frequency|0|Interrupts|0|Render|0|Copy|0|Video|0|Enhance|0
1001154944|Frequency|62|Interrupts|150|Render|0|Copy|0|Video|0|Enhance|0
2001713162|Frequency|116|Interrupts|301|Render|0|Copy|0|Video|0|Enhance|0
3002230498|Frequency|177|Interrupts|454|Render|0|Copy|0|Video|0|Enhance|0
4002790081|Frequency|237|Interrupts|606|Render|0|Copy|0|Video|0|Enhance|0
5003320181|Frequency|281|Interrupts|748|Render|0|Copy|0|Video|0|Enhance|0
6003757837|Frequency|335|Interrupts|901|Render|0|Copy|0|Video|0|Enhance|0
7004205303|Frequency|391|Interrupts|1050|Render|0|Copy|0|Video|0|Enhance|0
8004662581|Frequency|477|Interrupts|1204|Render|0|Copy|0|Video|0|Enhance|0
9005085214|Frequency|530|Interrupts|1354|Render|0|Copy|0|Video|0|Enhance|0
10005403405|Frequency|582|Interrupts|1506|Render|0|Copy|0|Video|0|Enhance|0
Comment 5 David Redondo 2025-07-22 12:40:37 UTC
OK we can open events at least and no obvious errors logged.  Also frequency is correctly reported. 

Could you please attach the output of 
strace /usr/lib/ksystemstats_intel_helper

You can stop it after printing a few
918130|Frequency|0|Interrupts|0|Render|0|Copy|0|Video|0|Enhance|0 
lines.
Comment 6 Alexey "Kitsune" Rusakov 2025-07-22 14:58:09 UTC
execve("/usr/libexec/ksystemstats_intel_helper", ["/usr/libexec/ksystemstats_intel_"...], 0x7ffe66f01620 /* 28 vars */) = 0
brk(NULL)                               = 0x5598209e4000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe2d5103000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=119551, ...}) = 0
mmap(NULL, 119551, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fe2d50e5000
close(3)                                = 0
openat(AT_FDCWD, "/lib64/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2635488, ...}) = 0
mmap(NULL, 2580552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fe2d4e00000
mmap(0x7fe2d4f41000, 1179648, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x141000) = 0x7fe2d4f41000
mmap(0x7fe2d5061000, 73728, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x260000) = 0x7fe2d5061000
mmap(0x7fe2d5073000, 12360, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fe2d5073000
close(3)                                = 0
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2607\0\0\0\0\0\0"..., 832) = 832
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
fstat(3, {st_mode=S_IFREG|0755, st_size=2448320, ...}) = 0
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
mmap(NULL, 2038872, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fe2d4c0e000
mmap(0x7fe2d4d7d000, 479232, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16f000) = 0x7fe2d4d7d000
mmap(0x7fe2d4df2000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e3000) = 0x7fe2d4df2000
mmap(0x7fe2d4df8000, 31832, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fe2d4df8000
close(3)                                = 0
openat(AT_FDCWD, "/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=984456, ...}) = 0
mmap(NULL, 970768, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fe2d4b20000
mmap(0x7fe2d4b9c000, 458752, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7c000) = 0x7fe2d4b9c000
mmap(0x7fe2d4c0c000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xeb000) = 0x7fe2d4c0c000
close(3)                                = 0
openat(AT_FDCWD, "/lib64/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=182368, ...}) = 0
mmap(NULL, 176584, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fe2d50b9000
mmap(0x7fe2d50dc000, 28672, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x23000) = 0x7fe2d50dc000
mmap(0x7fe2d50e3000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2a000) = 0x7fe2d50e3000
mmap(0x7fe2d50e4000, 456, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fe2d50e4000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe2d50b7000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe2d50b5000
arch_prctl(ARCH_SET_FS, 0x7fe2d50b8580) = 0
set_tid_address(0x7fe2d50b8850)         = 898675
set_robust_list(0x7fe2d50b8860, 24)     = 0
rseq(0x7fe2d50b84a0, 0x20, 0, 0x53053053) = 0
mprotect(0x7fe2d4df2000, 16384, PROT_READ) = 0
mprotect(0x7fe2d50e3000, 4096, PROT_READ) = 0
mprotect(0x7fe2d4c0c000, 4096, PROT_READ) = 0
mprotect(0x7fe2d5061000, 69632, PROT_READ) = 0
mprotect(0x5597e4995000, 4096, PROT_READ) = 0
mprotect(0x7fe2d5141000, 8192, PROT_READ) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
munmap(0x7fe2d50e5000, 119551)          = 0
futex(0x7fe2d50736bc, FUTEX_WAKE_PRIVATE, 2147483647) = 0
getrandom("\xea\xc6\xac\xee\x8e\xcf\xe8\xa4", 8, GRND_NONBLOCK) = 8
brk(NULL)                               = 0x5598209e4000
brk(0x559820a05000)                     = 0x559820a05000
newfstatat(AT_FDCWD, "/sys/bus/event_source/devices/i915", {st_mode=S_IFDIR|0755, st_size=0, ...}, 0) = 0
newfstatat(AT_FDCWD, "/sys/bus/event_source/devices/i915", {st_mode=S_IFDIR|0755, st_size=0, ...}, 0) = 0
openat(AT_FDCWD, "/sys/bus/event_source/devices/i915/type", O_RDONLY) = 3
read(3, "14\n", 8191)                   = 3
close(3)                                = 0
openat(AT_FDCWD, "/sys/bus/event_source/devices/i915/events", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
fcntl(3, F_GETFL)                       = 0x18000 (flags O_RDONLY|O_LARGEFILE|O_DIRECTORY)
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
getdents64(3, 0x5598209f6990 /* 41 entries */, 32768) = 1512
openat(AT_FDCWD, "/sys/bus/event_source/devices/i915/events/rcs0-busy", O_RDONLY) = 4
read(4, "config=0x0\n", 8191)           = 11
close(4)                                = 0
openat(AT_FDCWD, "/sys/bus/event_source/devices/i915/events/vecs0-busy", O_RDONLY) = 4
read(4, "config=0x3000\n", 8191)        = 14
close(4)                                = 0
openat(AT_FDCWD, "/sys/bus/event_source/devices/i915/events/vcs1-busy", O_RDONLY) = 4
read(4, "config=0x2010\n", 8191)        = 14
close(4)                                = 0
openat(AT_FDCWD, "/sys/bus/event_source/devices/i915/events/vcs0-busy", O_RDONLY) = 4
read(4, "config=0x2000\n", 8191)        = 14
close(4)                                = 0
openat(AT_FDCWD, "/sys/bus/event_source/devices/i915/events/bcs0-busy", O_RDONLY) = 4
read(4, "config=0x1000\n", 8191)        = 14
close(4)                                = 0
getdents64(3, 0x5598209f6990 /* 0 entries */, 32768) = 0
close(3)                                = 0
perf_event_open({type=0xe /* PERF_TYPE_??? */, size=0x88 /* PERF_ATTR_SIZE_??? */, config=0, sample_period=0, sample_type=0, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_ID|PERF_FORMAT_GROUP, precise_ip=0 /* arbitrary skid */, ...}, -1, 0, -1, PERF_FLAG_FD_CLOEXEC) = 3
ioctl(3, PERF_EVENT_IOC_ID, [187])      = 0
perf_event_open({type=0xe /* PERF_TYPE_??? */, size=0x88 /* PERF_ATTR_SIZE_??? */, config=0x3000, sample_period=0, sample_type=0, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_ID|PERF_FORMAT_GROUP, precise_ip=0 /* arbitrary skid */, ...}, -1, 0, 3, PERF_FLAG_FD_CLOEXEC) = 4
ioctl(4, PERF_EVENT_IOC_ID, [188])      = 0
perf_event_open({type=0xe /* PERF_TYPE_??? */, size=0x88 /* PERF_ATTR_SIZE_??? */, config=0x2010, sample_period=0, sample_type=0, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_ID|PERF_FORMAT_GROUP, precise_ip=0 /* arbitrary skid */, ...}, -1, 0, 3, PERF_FLAG_FD_CLOEXEC) = 5
ioctl(5, PERF_EVENT_IOC_ID, [189])      = 0
perf_event_open({type=0xe /* PERF_TYPE_??? */, size=0x88 /* PERF_ATTR_SIZE_??? */, config=0x2000, sample_period=0, sample_type=0, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_ID|PERF_FORMAT_GROUP, precise_ip=0 /* arbitrary skid */, ...}, -1, 0, 3, PERF_FLAG_FD_CLOEXEC) = 6
ioctl(6, PERF_EVENT_IOC_ID, [190])      = 0
perf_event_open({type=0xe /* PERF_TYPE_??? */, size=0x88 /* PERF_ATTR_SIZE_??? */, config=0x1000, sample_period=0, sample_type=0, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_ID|PERF_FORMAT_GROUP, precise_ip=0 /* arbitrary skid */, ...}, -1, 0, 3, PERF_FLAG_FD_CLOEXEC) = 7
ioctl(7, PERF_EVENT_IOC_ID, [191])      = 0
perf_event_open({type=0xe /* PERF_TYPE_??? */, size=0x88 /* PERF_ATTR_SIZE_??? */, config=0x100000, sample_period=0, sample_type=0, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_ID|PERF_FORMAT_GROUP, precise_ip=0 /* arbitrary skid */, ...}, -1, 0, 3, PERF_FLAG_FD_CLOEXEC) = 8
ioctl(8, PERF_EVENT_IOC_ID, [192])      = 0
perf_event_open({type=0xe /* PERF_TYPE_??? */, size=0x88 /* PERF_ATTR_SIZE_??? */, config=0x100002, sample_period=0, sample_type=0, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_ID|PERF_FORMAT_GROUP, precise_ip=0 /* arbitrary skid */, ...}, -1, 0, 3, PERF_FLAG_FD_CLOEXEC) = 9
ioctl(9, PERF_EVENT_IOC_ID, [193])      = 0
read(3, "\7\0\0\0\0\0\0\0\257\274\35\0\0\0\0\0\0\0\0\0\0\0\0\0\273\0\0\0\0\0\0\0"..., 128) = 128
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x2), ...}) = 0
write(1, "1948847|Frequency|0|Interrupts|0"..., 671948847|Frequency|0|Interrupts|0|Render|0|Copy|0|Video|0|Enhance|0
) = 67
clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=1, tv_nsec=0}, 0x7ffe268fa680) = 0
read(3, "\7\0\0\0\0\0\0\0\25>\277;\0\0\0\0\0\0\0\0\0\0\0\0\273\0\0\0\0\0\0\0"..., 128) = 128
write(1, "1002389013|Frequency|130|Interru"..., 741002389013|Frequency|130|Interrupts|336|Render|0|Copy|0|Video|0|Enhance|0
) = 74
Comment 7 David Redondo 2025-07-23 06:53:44 UTC
Thank you. Looks correct to me, not sure why we only read 0
Comment 8 Alexey "Kitsune" Rusakov 2025-07-24 09:25:17 UTC
One more thing I just noticed - it looks like my GPU applet stops showing actual values once I change the display configuration - like, physically unplug an external monitor. I'm not sure if it's the same problem the original poster has (the uptime when I reproduced the issue now was just about 2 hours) but that is at least one case. Once I reboot, the applet shows the GPU load again normally.
Comment 9 Alexey "Kitsune" Rusakov 2025-10-27 10:14:31 UTC
After upgrading to Fedora 43 (still with the same Plasma version - 6.4.5, that is - as just prior to the upgrade) - I see the GPU graph still alive for hours, surviving display config changes and all. So I think it is something lower on the stack, below KDE code that is; and therefore - NOTABUG?
Comment 10 David Redondo 2025-10-27 10:58:40 UTC
I don't have a xe gpu maybe the xe driver does thigns differently to i915. I need to do some research.
Comment 11 Alexey "Kitsune" Rusakov 2025-10-27 12:57:28 UTC
In my case it's still i915 driver, actually (even though the GPU is Iris Xe).
Comment 12 David Redondo 2025-10-27 12:58:40 UTC
I assume intel_gpu_top works? Then I can look what it does different
Comment 13 Alexey "Kitsune" Rusakov 2025-10-27 13:16:04 UTC
Hold on - what I meant to say is that after upgrading to Fedora 43 the GPU graph is alive and kicking and the issue doesn't manifest any more.
Comment 14 David Redondo 2025-10-27 13:17:05 UTC
So we can close it, seems something magically fixed it in the lower stack?
Comment 15 Alexey "Kitsune" Rusakov 2025-10-27 13:28:55 UTC
Yes, that's what I tried to say in https://bugs.kde.org/show_bug.cgi?id=506993#c9 :)
Comment 16 Alexey "Kitsune" Rusakov 2025-11-02 08:21:17 UTC
Unfortunately, it was a temporary blip - after ~30 hours straight running well, the graph went mute again, and after further restarts it never survived for more than a few hours.
Comment 17 David Redondo 2025-11-03 08:06:54 UTC
Other sesnsors do not stop working I guess. When it stops working is `ksystemstats_intel_helper` still runing?
Comment 18 Alexey "Kitsune" Rusakov 2025-11-03 09:46:12 UTC
They don't, only GPU % (even GPU frequency keeps working); and yes it does.
Comment 19 Alexey "Kitsune" Rusakov 2025-11-03 09:53:06 UTC
Hm, wait - actually I just realised that something is off: ksystemstats_intel_helper, as well as intel_gpu_top, show frequency and interrupts but when it comes to individual engines (Render/Video/etc.) the summary figures are 0. That said, intel_gpu_top still shows non-0 consumption of the engines by each process. That's likely the reason the GPU consumption is not shown in Plasma.
Comment 20 Alexey "Kitsune" Rusakov 2025-11-03 09:55:00 UTC
Created attachment 186452 [details]
intel_gpu_top only showing per-process use but not total numbers

Here's to illustrate what I wrote above.
Comment 21 David Redondo 2025-11-03 10:40:43 UTC
If intel_gpu_top is also affected it's likely it's not a bug in ksystemstats but something more fundamental
Comment 22 Alexey "Kitsune" Rusakov 2025-11-03 11:24:28 UTC
Yes - a random search on Internet actually brought me this: https://github.com/blakeblackshear/frigate/discussions/16120 - after a long trail of comments trying to pinpoint the issue the conclusion is in https://github.com/blakeblackshear/frigate/discussions/16120#discussioncomment-13316174
Comment 23 Méven 2025-11-04 11:56:57 UTC
The bug is in the driver:
https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/issues/175