NVIDIA UVM driver not loaded at boot

I reinstalled Tumbleweed last night after a brief distrohop (Turns out I missed a lot about openSUSE that I didn’t realise) and I decided to remove the NVIDIA repos at install time and try the 610 run file instead. It worked well (And was actually so fast I wasn’t sure it had actually worked). The only issue I had was that I had to blacklist nouveau manually, and on first boot I have to type nvidia-smi before playing a game otherwise my GPU isn’t detected (I have also had this issue installing from the repos, so I can’t blame the run file for that). Just posting my anecdote incase it helps someone.

Running nvidia-smi is actually a known quirk with manual NVIDIA driver installs. Because no graphical service explicitly requests the NVIDIA driver during early boot, the kernel modules may not be loaded automatically.

Refer
https://en.opensuse.org/SDB:NVIDIA_drivers#NVIDIA_UVM_driver_not_loaded_at_boot

Also, which DE are you using? There are ways to launch graphical applications and ensure the NVIDIA modules are loaded when the they start.

How did you manage to blacklist nouveau? blacklist nouveau in a modprobe.d conf didn’t work for me, adding rd.driver.blacklist and two other arguments I can’t remember now to boot options just made the whole system panic when I tried.

Thanks Deano, I’ve actually seen this from a repo install as well, but also I load nvidia + uvm/drm/modeset in the initramfs with dracut, I diffed lsmod before/after running nvidia-smi and nothing changed. It’s very weird.

I am on KDE Plasma, I could just write a systemd service but it seems like a hack, if you know of a better fix I would be very happy!

Strange. modprobe.blacklist=nouveau and rd.driver.blacklist=nouveau should work.

Did you rebuild your initramfs and update your bootloader entries after changing the commandline?

Hmmm…post the output of ls -l /dev/nvidia* before and after running nvidia-smi? Show its output too.

Assuming that’s what dracut -f does, then yes. i added those entries to /etc/kernel/cmdline (using systemd-boot) and got nouveau spewing errors during boot. I admit I wasn’t paying full attention because I was pretty annoyed at that point and wanted it to be over with.

Interesting, yeah I can see UVM doesn’t appear there until I run nvidia-smi. Can I just throw it into modules-load.d?

crw-rw-rw-. 1 root root 195, 255 Aug 20 00:22 /dev/nvidiactl
crw-rw-rw-. 1 root root 195, 254 Aug 20 00:22 /dev/nvidia-modeset
crw-rw-rw-. 1 root root 195,   0 Aug 20 00:22 /dev/nvidia0
crw-rw-rw-. 1 root root 195, 255 Aug 20 00:22 /dev/nvidiactl
crw-rw-rw-. 1 root root 195, 254 Aug 20 00:22 /dev/nvidia-modeset
crw-rw-rw-. 1 root root 239,   0 Aug 20 00:25 /dev/nvidia-uvm
crw-rw-rw-. 1 root root 239,   1 Aug 20 00:25 /dev/nvidia-uvm-tools

/dev/nvidia-caps:
total 0
cr--------. 1 root root 242, 1 Aug 20 00:25 nvidia-cap1
cr--r--r--. 1 root root 242, 2 Aug 20 00:25 nvidia-cap2
Thu Aug 20 00:25:40 2026       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 610.57.04              KMD Version: 610.57.04     CUDA UMD Version: 13.3     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4090        Off |   00000000:01:00.0  On |                  Off |
|  0%   45C    P8             26W /  450W |    1395MiB /  24564MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            2301    C+G   /usr/bin/kwin_wayland                   164MiB |
|    0   N/A  N/A            2359      G   /usr/bin/Xwayland                         9MiB |
|    0   N/A  N/A            2494      G   /usr/bin/plasmashell                    314MiB |
|    0   N/A  N/A            2866      G   /usr/bin/xwaylandvideobridge              6MiB |
|    0   N/A  N/A            3071      G   ...share/Steam/ubuntu12_32/steam         13MiB |
|    0   N/A  N/A            3259      G   ./steamwebhelper                         44MiB |
|    0   N/A  N/A            3292      G   ...am/ubuntu12_64/steamwebhelper         44MiB |
|    0   N/A  N/A            4585      G   gwenview                                  6MiB |
|    0   N/A  N/A            6237      G   /app/lib/firefox/firefox                301MiB |
+-----------------------------------------------------------------------------------------+

I would try loading it manually

sudo modprobe nvidia_uvm
ls -l /dev/nvidia*

then
sudo dracut -f
Reboot and check again.

@Shortwave8115 See https://forums.developer.nvidia.com/t/nvidia-unified-memory-kernel-module-to-load-at-boot/174562

Create a /etc/systemd/system/nvidia-uvm.service file with;

[Unit]
Description=Load nvidia-uvm module at boot time
After=nvidia-persistenced.service

[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c "/usr/bin/nvidia-modprobe --unified-memory --create-nvidia-device-file=0 >> /var/log/nvidia-uvm.log 2>&1"

[Install]
WantedBy=multi-user.target

Then systemctl enable nvidia-uvm.service test on a reboot…

Likewise if using the run file, I use;

./NVIDIA-Linux-x86_64-$RUN_VERSION.run \
    --ui=none \
    --no-questions \
    --accept-license \
    --disable-nouveau \
    --no-install-libglvnd \
    --no-cc-version-check

I probably need to test with adding the --dkms option…

That’s the weird thing, I don’t have an nvidia-persistenced service, but I have the binary. I’ll look into it some more tonight, thanks for the pointers !

@Shortwave8115 … I added these lines to top of my /etc/modprobe.d/90-nvidia.conf

# Modprobe won't load nvidia_uvm automatically without this !?
softdep nvidia post: nvidia_uvm

Then you’re good to go

widowmaker:/home/dart/Downloads # lsmod | grep nvidia
nvidia_drm            167936  12
nvidia_modeset       1818624  30 nvidia_drm
nvidia_uvm           2334720  0
nvidia              118992896  413 nvidia_uvm,nvidia_drm,nvidia_modeset
drm_ttm_helper         20480  2 nvidia_drm
video                  81920  1 nvidia_modeset

From what I’ve tried, the UVM module is already loaded into the kernel on boot, I assume I need to use nvidia-modprobe instead but I haven’t had a chance to look at my PC yet.

@dart364 it loads, but no device files created, if you boot and check ls -l /dev/nvidia* Then run nvidia-modprobe --unified-memory --create-nvidia-device-file=0 and check device files. Note: If you run nvidia-smi nvidia-caps files are created, but I suspect only the uvm device files are needed, else could just change the service to run nvidia-smi

The only tweak I make these days is setting NVreg_EnableStreamMemOPs=1 for cuda stream memory operations in user mode applications.

Ok … nothing happens because they were already there … I have a separate 100-nvidia-uvm.conf that is the same as what you see commented out in my 90-nvidia.conf … those two lines are the only “tweak” that I make to the nvidia-drivers at the moment … an added bonus you can change the 100-nvidia-uvm.conf then load and unload it at will to change the params … that’s why I have it set up that way for now … eventually I might just use a “unified” 90-nvidia.conf that you see here without the comments … either way the problem is solved

widowmaker:/home/dart/Downloads # ls -l /dev/nvidia*
crw-rw-rw-. 1 root root 195,   0 Aug 20 02:00 /dev/nvidia0
crw-rw-rw-. 1 root root 195, 255 Aug 20 02:00 /dev/nvidiactl
crw-rw-rw-. 1 root root 195, 254 Aug 20 02:00 /dev/nvidia-modeset
crw-rw-rw-. 1 root root 237,   0 Aug 20 02:00 /dev/nvidia-uvm
crw-rw-rw-. 1 root root 237,   1 Aug 20 02:00 /dev/nvidia-uvm-tools

/dev/nvidia-caps:
total 0
cr--------. 1 root root 240, 1 Aug 20 02:00 nvidia-cap1
cr--r--r--. 1 root root 240, 2 Aug 20 02:00 nvidia-cap2
widowmaker:/home/dart/Downloads # nvidia-modprobe --unified-memory --create-nvidia-device-file=0
widowmaker:/home/dart/Downloads # ls -l /dev/nvidia*
crw-rw-rw-. 1 root root 195,   0 Aug 20 02:00 /dev/nvidia0
crw-rw-rw-. 1 root root 195, 255 Aug 20 02:00 /dev/nvidiactl
crw-rw-rw-. 1 root root 195, 254 Aug 20 02:00 /dev/nvidia-modeset
crw-rw-rw-. 1 root root 237,   0 Aug 20 02:00 /dev/nvidia-uvm
crw-rw-rw-. 1 root root 237,   1 Aug 20 02:00 /dev/nvidia-uvm-tools

/dev/nvidia-caps:
total 0
cr--------. 1 root root 240, 1 Aug 20 02:00 nvidia-cap1
cr--r--r--. 1 root root 240, 2 Aug 20 02:00 nvidia-cap2
widowmaker:/home/dart/Downloads # 
widowmaker:/home/dart/Downloads # cat /etc/modprobe.d/90-nvidia.conf 
# Modprobe won't load nvidia_uvm without this !?
softdep nvidia post: nvidia_uvm

# See 'modinfo nvidia | sort' for list and
# See "cat /proc/driver/nvidia/params" for the actual settings

options nvidia \
	NVreg_PreserveVideoMemoryAllocations=1 \
	NVreg_EnableStreamMemOPs=1 \
	NVreg_EnableResizableBar=1 \

# For Wayland 
options nvidia_drm \
	modeset=1 \

# Placeholder for nvidia_modeset
# See 'systool -vm nvidia_modeset'

# Placeholder - Unified memory
# use 'systool -vm nvidia_uvm' to see all settings
#options nvidia_uvm \
#        uvm_channel_pushbuffer_loc=vid \
#        uvm_channel_gpfifo_loc=vid \
#        uvm_channel_gpput_loc=vid \
#        uvm_fault_force_sysmem=1 \
#        uvm_exp_gpu_cache_sysmem=1 \
#        uvm_exp_gpu_cache_peermem=1 \
widowmaker:/home/dart/Downloads # 

Honestly I was thinking of just putting nvidia-smi into my .bash_profile, haha. I’ll give the service a shot, thanks!

Why bother with a systemd script? Just add the two lines:

Then run @malcolmlewis commands he gave us and see if the files are created … I can give you my 100-nvidia_uvm.conf to place in modprobe if you want but “Works for me”

@dart364 It can also be a feature of your GPU compared to @Shortwave8115’s which I think is Turing based like mine…

Ok … 3070ti (Ampere) … anything I can check to confirm? Here’s my 100-nvidia_uvm.conf just for fun. Did you try my two lines to see if it worked for you?

widowmaker:/home/dart/Downloads # cat /etc/modprobe.d/100-nvidia-uvm.conf
# Unified memory
# use 'systool -vm nvidia_uvm' to see all settings
options nvidia_uvm \
        uvm_channel_pushbuffer_loc=vid \
        uvm_channel_gpfifo_loc=vid \
        uvm_channel_gpput_loc=vid \
        uvm_fault_force_sysmem=1 \
        uvm_exp_gpu_cache_sysmem=1 \
        uvm_exp_gpu_cache_peermem=1 \