Nvidia driver repository updated

I’ve updated the Nvidia driver repository to the latest 331.20 release. Since this release has been promoted by Nvidia to a long lived branch release; also the CentOS/RHEL 6 repository has been updated to this version. This means all currently supported Fedora releases have the same driver version as in CentOS/RHEL.

This driver release brings the usual assortment of fixes and features; but the most important things are the additions of the Unified Video Memory kernel module, the “private” Nvidia OpenGL Framebuffer Compression libraries and the packaging introduction of the multiple kernel modules as an alternative to the single module; as specified by the driver documentation.

Starting from the less important things, the Nvidia OpenGL Framebuffer Compression libraries have been packaged into a separate package as their usage is very specific and according to the documentation their usage is documented only with specific approved Nvidia partners. I’m pretty sure we will not miss these libraries on our systems.

Kernel module packages now contain/generate also the nvidia-uvm.ko kernel module and the multiple nvidia.ko modules that can be used to assign separate kernel module instances to separate GPU devices.

The resulting install of the kernel module packages ends up like this:

$ ls -laghs
total 127M
4.0K drwxr-xr-x. 2 root 4.0K Nov  7 20:20 .
4.0K drwxr-xr-x. 6 root 4.0K Nov  7 20:20 ..
 15M -rw-r--r--. 1 root  15M Nov  7 20:20 nvidia0.ko
 15M -rw-r--r--. 1 root  15M Nov  7 20:20 nvidia1.ko
 15M -rw-r--r--. 1 root  15M Nov  7 20:20 nvidia2.ko
 15M -rw-r--r--. 1 root  15M Nov  7 20:20 nvidia3.ko
 15M -rw-r--r--. 1 root  15M Nov  7 20:20 nvidia4.ko
 15M -rw-r--r--. 1 root  15M Nov  7 20:20 nvidia5.ko
 15M -rw-r--r--. 1 root  15M Nov  7 20:20 nvidia6.ko
 15M -rw-r--r--. 1 root  15M Nov  7 20:20 nvidia7.ko
 12K -rw-r--r--. 1 root  11K Nov  7 20:20 nvidia-frontend.ko
 15M -rw-r--r--. 1 root  15M Nov  7 20:20 nvidia.ko
 48K -rw-r--r--. 1 root  48K Nov  7 20:20 nvidia-uvm.ko
$ du -hs .
127M    .

As you can see, the space used by these modules is huge; and they are only used in specific setups. I’m planning to make the multiple kernel modules in an optional package that can be installed separately from the main nvidia.ko and nvidia-uvm.ko modules.

Currently DKMS and AKMODs packages have these modules enabled; but the binary kMOD package for CentOS/RHEL 6 does not contain them. If I try to integrate them into the package, the kABI list of symbols is not exported correctly and I don’t know why. All the numbered modules are very similar (each one contains the 12 mb binary object that is included in the normal module) and for some reason this screws up the package assembly. In detail, this is the binary kMOD package that does not contain the numbered modules:

$ rpm -qp --requires kmod-nvidia-331.20-1.el6.x86_64.rpm
rpmlib(VersionedDependencies) <= 3.0.3-1
nvidia-driver = 2:331.20
/sbin/depmod
/sbin/depmod
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
kernel(__free_pages) = 0xffd35acd
kernel(__init_rwsem) = 0xa2b8a2ba
kernel(__list_add) = 0x0343a1a8
kernel(__lock_page) = 0xda778235
kernel(__stack_chk_fail) = 0xf0fdf6cb
kernel(_cond_resched) = 0xa1c76e0a
kernel(alloc_chrdev_region) = 0x29537c9e
kernel(alloc_pages_current) = 0x4f3bf785
kernel(cdev_add) = 0xa6d1bdca
kernel(cdev_del) = 0x42e80c19
kernel(cdev_init) = 0xc45a9f63
kernel(copy_from_user) = 0x3302b500
kernel(copy_to_user) = 0x85f8a266
kernel(down_read) = 0xb4b0ee4e
kernel(down_write) = 0x45d55543
kernel(find_vma) = 0x38e4e189
kernel(get_page) = 0xe46d84e9
kernel(kmem_cache_alloc) = 0xee065ced
kernel(kmem_cache_create) = 0xe4a639f8
kernel(kmem_cache_destroy) = 0x806e575f
kernel(kmem_cache_free) = 0x7329e40d
kernel(list_del) = 0x0521445b
kernel(mcount) = 0xb4390f9a
kernel(memset) = 0xde0bdcff
kernel(module_layout) = 0x14522340
kernel(per_cpu__current_task) = 0x4f1939c7
kernel(printk) = 0xea147363
kernel(unmap_mapping_range) = 0x310b6f21
kernel(unregister_chrdev_region) = 0x7485e15e
kernel(up_read) = 0xe23d7acb
kernel(up_write) = 0xd851af78
kernel(vfree) = 0x999e8297
kernel(vm_insert_page) = 0x44986362
kernel(vmalloc) = 0xd6ee688f
kernel(warn_slowpath_null) = 0x16305289
ksym(nvUvmInterfaceDeRegisterUvmOps) = 0x2103c3ad
ksym(nvUvmInterfaceRegisterUvmOps) = 0x9b2a1db7
rpmlib(PayloadIsXz) <= 5.2-1

And this is the binary kMOD package that does contain them. As you can see the symbols are missing. This happens independently of the fact that the base module and  / or the UVM module are included in the same package.

$ rpm -qp --requires kmod-nvidia-331.20-1.el6.x86_64.rpm
rpmlib(VersionedDependencies) <= 3.0.3-1
nvidia-driver = 2:331.20
/sbin/depmod
/sbin/depmod
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
kernel(__per_cpu_offset) = 0x32047ad5
kernel(__register_chrdev) = 0xfa0d49c7
kernel(__tracepoint_module_get) = 0xacdeb154
kernel(__unregister_chrdev) = 0x6bc3fbc0
kernel(create_proc_entry) = 0x6d6b15ff
kernel(down) = 0x748caf40
kernel(mcount) = 0xb4390f9a
kernel(module_layout) = 0x14522340
kernel(module_put) = 0xcbd81171
kernel(per_cpu__cpu_number) = 0x9629486a
kernel(printk) = 0xea147363
kernel(remove_proc_entry) = 0x1a6d6e4f
kernel(up) = 0x3f1899f1
rpmlib(PayloadIsXz) <= 5.2-1

RPM spec files are in the same place, so if you have any hint on how to fix it, please drop me a note.

5 thoughts to “Nvidia driver repository updated”

  1. Hi!

    I’m trying to install dkms-nvidia and it doesn’t work. Looks like it can’t build nvidia-uvm.ko module. I saw you are using dkms-nvidia. Do you still use it? It works for you?

    Thanks!

    PS. akmod-nvidia works fine.

      1. I made a stupid mistake in the dkms.conf file that is shipped inside the dkms-nvidia package. An update is coming in a few moments.

        Thanks for reporting!

        1. Thank you! Could you explain, what’s a difference between akmod and dkms? What’s better to use and why do you use dkms-nvidia instead of akmod?

          1. Differences are pretty big and comments here are not the best place to explain it in length. If you look on Google there are a lot of pages explaining differences; the most notable ones are that DKMS is widely used in the Enterprise and aKMODs are Fedora only.

Leave a Reply