Originally filed against the GTK project:
This was quickly identified as an nVidia driver issue.
As of gtk 4.16
the Vulkan rendering backend is used by default.
GTK4 apps are consuming unexpected CPU cycles while idle in the background when using the Vulkan
backend.
This does not occur with the NGL
renderer.
Steps to reproduce
- Launch a GTK4 app (e.g. GTK4-demo, Nautilus, gnome-text-editor) using the Vulkan backend
- Observe the CPU usage of a GTK4 window’s thread
Current behavior
CPU usage constantly hovering between 2-3%, even when the window is ‘idle’ in the background
Expected outcome
Minimal CPU usage when app is idle, similar to what’s seen when using the ngl
renderer
Version information
- Arch Linux | Kernel 6.11.5
- Gnome-shell | Mutter 47.1
- Wayland (meson_options: xwayland=false)
- Gtk4 4.16.3
- Mesa 24.2.5
nVidia 560.35.03
- vulkan-icd-loader 1.3.295
Additional information
Here’s where things are spinning:
$ sudo strace -v -fp 9082
strace: Process 9082 attached with 11 threads
[pid 9094] openat(AT_FDCWD, "/proc/stat", O_RDONLY) = 42
[pid 9094] read(42, "cpu 34964 19 18870 9203976 5872"..., 299) = 299
[pid 9094] close(42) = 0
[pid 9094] clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=0, tv_nsec=5000000}, <unfinished ...>
[pid 9100] <... restart_syscall resumed>) = -1 ETIMEDOUT (Connection timed out)
[pid 9100] futex(0x6322a993e0c0, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 9100] futex(0x7cab2c000f58, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, {tv_sec=1729865521, tv_nsec=735347000}, FUTEX_BITSET_MATCH_ANY <unfinished ...>
[pid 9094] <... clock_nanosleep resumed>0x7cab613ffb80) = 0
[pid 9094] openat(AT_FDCWD, "/proc/stat", O_RDONLY) = 42
[pid 9094] read(42, "cpu 34965 19 18870 9203988 5872"..., 299) = 299
[pid 9094] close(42) = 0
[pid 9094] clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=0, tv_nsec=5000000}, 0x7cab613ffb80) = 0
[pid 9094] openat(AT_FDCWD, "/proc/stat", O_RDONLY) = 42
[pid 9094] read(42, "cpu 34965 19 18870 9204001 5872"..., 299) = 299
[pid 9094] close(42) = 0
[pid 9094] clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=0, tv_nsec=5000000}, <unfinished ...>
[pid 9100] <... futex resumed>) = -1 ETIMEDOUT (Connection timed out)
[pid 9100] futex(0x6322a993e0c0, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 9100] futex(0x7cab2c000f58, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, {tv_sec=1729865521, tv_nsec=745883000}, FUTEX_BITSET_MATCH_ANY <unfinished ...>
[pid 9094] <... clock_nanosleep resumed>0x7cab613ffb80) = 0
[pid 9094] openat(AT_FDCWD, "/proc/stat", O_RDONLY) = 42
[pid 9094] read(42, "cpu 34965 19 18870 9204014 5872"..., 299) = 299
[pid 9094] close(42) = 0
[pid 9094] clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=0, tv_nsec=5000000}, 0x7cab613ffb80) = 0
[pid 9094] openat(AT_FDCWD, "/proc/stat", O_RDONLY) = 42
[pid 9094] read(42, "cpu 34965 19 18872 9204025 5872"..., 299) = 299
[pid 9094] close(42) = 0
[pid 9094] clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=0, tv_nsec=5000000}, <unfinished ...>
[pid 9100] <... futex resumed>) = -1 ETIMEDOUT (Connection timed out)
nvidia-bug-report-560.35.03.log (15.9 MB)