Noticeably slow startup with PCIe runtime PM enabled (or with NVIDIA GPU)
Settings is sporadically noticeably slow to start - I've seen up to 5.5 seconds (more often then not; but sometimes it is fast).
This is with GNOME 43.3 on Fedora 37, but it has been like this for a long time.
It looks like the issue is that gnome-control-center-print-renderer
is spawned synchronously and it takes about 1.5-2 seconds to exit:
G_MESSAGES_DEBUG=all gnome-control-center
G_MESSAGES_DEBUG=all gnome-control-center --verbose
(process:25400): cc-object-storage-DEBUG: 22:43:46.545: Initializing object storage
(gnome-control-center:25400): GLib-GIO-DEBUG: 22:43:46.545: Using cross-namespace EXTERNAL authentication (this will deadlock if server is GDBus < 2.73.3)
(gnome-control-center:25400): GLib-GIO-DEBUG: 22:43:46.557: _g_io_module_get_default: Found default implementation dconf (DConfSettingsBackend) for ‘gsettings-backend’
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.557: watch_fast: "/org/gnome/desktop/interface/" (establishing: 0, active: 0)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.558: watch_fast: "/org/gnome/desktop/peripherals/mouse/" (establishing: 0, active: 0)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.558: watch_fast: "/org/gnome/desktop/sound/" (establishing: 0, active: 0)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.558: watch_fast: "/org/gnome/desktop/privacy/" (establishing: 0, active: 0)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.558: watch_fast: "/org/gnome/desktop/wm/preferences/" (establishing: 0, active: 0)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.558: watch_fast: "/org/gnome/settings-daemon/plugins/xsettings/" (establishing: 0, active: 0)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.558: watch_fast: "/org/gnome/desktop/a11y/" (establishing: 0, active: 0)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.558: watch_fast: "/org/gnome/desktop/a11y/interface/" (establishing: 0, active: 0)
(gnome-control-center:25400): GLib-GIO-DEBUG: 22:43:46.558: Using cross-namespace EXTERNAL authentication (this will deadlock if server is GDBus < 2.73.3)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.559: watch_established: "/org/gnome/desktop/interface/" (establishing: 1)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.559: watch_established: "/org/gnome/desktop/peripherals/mouse/" (establishing: 1)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.559: watch_established: "/org/gnome/desktop/sound/" (establishing: 1)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.559: watch_established: "/org/gnome/desktop/privacy/" (establishing: 1)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.559: watch_established: "/org/gnome/desktop/wm/preferences/" (establishing: 1)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.559: watch_established: "/org/gnome/settings-daemon/plugins/xsettings/" (establishing: 1)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.560: watch_established: "/org/gnome/desktop/a11y/" (establishing: 1)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.560: watch_established: "/org/gnome/desktop/a11y/interface/" (establishing: 1)
(gnome-control-center:25400): Gtk-DEBUG: 22:43:46.562: Connecting to session manager
(gnome-control-center:25400): GLib-GIO-DEBUG: 22:43:46.565: _g_io_module_get_default: Found default implementation gvfs (GDaemonVfs) for ‘gio-vfs’
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.634: watch_fast: "/org/gnome/control-center/" (establishing: 0, active: 0)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.634: watch_established: "/org/gnome/control-center/" (establishing: 1)
(gnome-control-center:25400): firmware-security-cc-panel-DEBUG: 22:43:46.689: Firmware Security panel visible: yes as chassis was laptop
(gnome-control-center:25400): network-cc-panel-DEBUG: 22:43:46.689: Monitoring NetworkManager for Wi-Fi devices
(gnome-control-center:25400): cc-object-storage-DEBUG: 22:43:46.709: Adding object NMClient (CcObjectStorage::nm-client → 0x557f04142000) to the storage
(gnome-control-center:25400): network-cc-panel-DEBUG: 22:43:46.709: Wi-Fi panel visible: yes
(gnome-control-center:25400): wacom-cc-panel-DEBUG: 22:43:46.719: Wacom panel visible: no
(gnome-control-center:25400): cc-object-storage-DEBUG: 22:43:46.720: Adding object MMManager (CcObjectStorage::mm-manager → 0x557f041ad9e0) to the storage
(gnome-control-center:25400): cc-wwan-panel-DEBUG: 22:43:46.720: Monitoring ModemManager for WWAN devices
(gnome-control-center:25400): cc-wwan-panel-DEBUG: 22:43:46.720: WWAN panel visible: no
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.726: change_fast
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.802: watch_fast: "/org/gnome/software/" (establishing: 0, active: 0)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.802: unwatch_fast: "/org/gnome/software/" (active: 0, establishing: 1)
(gnome-control-center:25400): cc-object-storage-DEBUG: 22:43:46.803: Asynchronously creating D-Bus proxy for CcObjectStorage::dbus-proxy(org.gnome.Shell,/org/gnome/Shell,org.gnome.Shell)
(gnome-control-center:25400): dconf-DEBUG: 22:43:46.803: watch_established: "/org/gnome/software/" (establishing: 0)
(gnome-control-center:25400): info-overview-cc-panel-DEBUG: 22:43:46.808: Getting renderer from helper for GPU 'NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q]'
(gnome-control-center:25400): info-overview-cc-panel-DEBUG: 22:43:46.808: About to launch '/usr/libexec/gnome-control-center-print-renderer'
(gnome-control-center:25400): info-overview-cc-panel-DEBUG: 22:43:46.808: With environment:
(gnome-control-center:25400): info-overview-cc-panel-DEBUG: 22:43:46.808: __GLX_VENDOR_LIBRARY_NAME = nvidia
(gnome-control-center:25400): info-overview-cc-panel-DEBUG: 22:43:46.808: __NV_PRIME_RENDER_OFFLOAD = 1
(gnome-control-center:25400): info-overview-cc-panel-DEBUG: 22:43:46.808: __VK_LAYER_NV_optimus = NVIDIA_only
(gnome-control-center:25400): info-overview-cc-panel-DEBUG: 22:43:48.436: Getting renderer from helper for GPU 'Intel® UHD Graphics 630'
(gnome-control-center:25400): info-overview-cc-panel-DEBUG: 22:43:48.436: About to launch '/usr/libexec/gnome-control-center-print-renderer'
(gnome-control-center:25400): info-overview-cc-panel-DEBUG: 22:43:48.436: With environment:
(gnome-control-center:25400): info-overview-cc-panel-DEBUG: 22:43:48.436: DRI_PRIME = pci-0000_00_02_0
(gnome-control-center:25400): cc-window-DEBUG: 22:43:48.553: Time to open panel 'About': 1.826553s
(gnome-control-center:25400): GLib-DEBUG: 22:43:48.556: setenv()/putenv() are not thread-safe and should not be used after threads are created
22:43:48.0673 cc-object-storage: DEBUG: Finished creating D-Bus proxy for CcObjectStorage::dbus-proxy(org.gnome.Shell,/org/gnome/Shell,org.gnome.Shell)
22:43:48.0673 cc-object-storage: DEBUG: Adding object GDBusProxy (CcObjectStorage::dbus-proxy(org.gnome.Shell,/org/gnome/Shell,org.gnome.Shell) → 0x557f042abf30) to the storage
22:43:48.0673 diagnostics-cc-panel: DEBUG: ABRT appeared
strace -r gnome-control-center-print-renderer
calls are prefixed with time in seconds
...
0.000019 stat("/dev/nvidiactl", {st_mode=S_IFCHR|0666, st_rdev=makedev(0xc3, 0xff), ...}) = 0
0.000024 openat(AT_FDCWD, "/dev/nvidiactl", O_RDWR) = 12
0.000025 fcntl(12, F_SETFD, FD_CLOEXEC) = 0
0.000019 ioctl(12, _IOC(_IOC_READ|_IOC_WRITE, 0x46, 0xd2, 0x48), 0x7ffdd86b9f80) = 0
0.000023 openat(AT_FDCWD, "/sys/devices/system/memory/block_size_bytes", O_RDONLY) = 13
0.000033 read(13, "8000000\n", 99) = 8
0.000024 close(13) = 0
0.000019 ioctl(12, _IOC(_IOC_READ|_IOC_WRITE, 0x46, 0xd6, 0x8), 0x7ffdd86ba010) = 0
0.000019 ioctl(12, _IOC(_IOC_READ|_IOC_WRITE, 0x46, 0xc8, 0x900), 0x7f7e622a3a60) = 0
0.000019 ioctl(12, _IOC(_IOC_READ|_IOC_WRITE, 0x46, 0x2b, 0x20), 0x7ffdd86ba0e0) = 0
1.536483 ioctl(12, _IOC(_IOC_READ|_IOC_WRITE, 0x46, 0x2a, 0x20), 0x7ffdd86b96a0) = 0
...
This also happens if gnome-control-center-print-renderer
is called for Intel GPU or with no arguments (env) - it still accesses /dev/nvidiactl
and get the delay.
I wanted to test without nvidia driver loaded, because, I remember that slowness was there even when nvidia card was removed from PCIe bus. Please note - this test was done on battery power, which might be important:
strace -r gnome-control-center-print-renderer with no nvidia driver loaded on battery
...
0.000015 stat("/sys/bus/pci/devices", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
0.000022 openat(AT_FDCWD, "/sys/bus/pci/devices", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 12
0.000017 newfstatat(12, "", {st_mode=S_IFDIR|0755, st_size=0, ...}, AT_EMPTY_PATH) = 0
0.000023 getdents64(12, 0x55e14e17f540 /* 32 entries */, 32768) = 1008
0.000025 openat(AT_FDCWD, "/sys/bus/pci/devices/0000:03:00.0/config", O_RDONLY) = 13
0.000047 read(13, "\206\200\332\25\6\4\20\0\2\0\4\6 \0\1\0\0\0\0\0\0\0\0\0\3\4\4\0\361\1\0\0\0\352\0\352\361\377\1\0\0\0\0\0\0\0\0\0", 48) = 48
2.763194 close(13) = 0
...
0000:03:00.0
is just a PCI bridge, and it looks like the issue lies with power management - this device takes 2.7s to transition from D3
to D0
(OMG)...
So this is not specific to nvidia and can happen with just power management.
Delays also compound - just had 5.5s of delays (1.2s from some PCIe device and 4.3s from gnome-control-center-print-renderer
which in turn was something similar on another device).