如何检查我的 GPU 使用了哪些驱动程序/代码层?

如何检查我的 GPU 使用了哪些驱动程序/代码层?

我在 Macbook Pro 上运行 Elementary OS。我读到,Bumblebee 通过一种名为 Optimus 的东西提高了单个 NVIDIA GPU 与 Intel CPU 对的效率,但我并不完全理解。但这些都不是问题,只是一些背景信息。

问题是:我如何知道现在正在处理我的 GPU 的是什么? 在我开始搞事情之前,我想知道我现在的设置是什么,并有一个很好的理解。我不希望有一个函数可以告诉我一切,也不希望它总是相同,但目前我什至不知道从哪里开始嗅探。

答案1

我见过很多人问这个问题,但似乎总是回答错误。您可以简单地查看相应发行版的文档,并根据软件包名称找出哪个。但这会遇到问题。也就是说,因为开源驱动程序通常随 Linux 一起分发,如果您使用 wayland,您甚至不能依赖于查看 x11 视频软件包。

Nvidia Optimus 是一种运行时 GPU 切换技术,旨在按需打开和关闭专用 GPU 以节省电量。

DRM 是 Linux 的子系统,它通过通用接口将 GPU 暴露给其他模块和用户空间应用程序。每个 GPU 系列都必须存在一个驱动程序。

此外,KMS 用于控制显示以及在输出设备之间缓冲视频。该子系统在 GPU 中很常见。

最终,在 X Window 系统中,这两个子系统都由 3d 图形驱动程序使用。图形驱动程序实际上有几个部分,包括 DRI 驱动程序、X Window 驱动程序(用于 2d 加速和模式设置)和 OpenGL。 Wayland 使用 EGL 在显示服务器上进行 2d 和 3d 渲染,并自行进行模式设置,客户端需要额外的 2d 库来加速。当谈论旧版本的 Linux 时,这会变得复杂,因为专有驱动程序提供了一个“黑匣子”功能,仅提供其自己的 OpenGL 库和 X Window 作为依赖项。

对于大多数现代 Linux,您可以简单地查看加载了哪个 DRI 驱动程序,但 OpenGL 实现需要通过所谓的 GLX 提供程序进行仲裁。大多数专有驱动程序都提供自己的隐藏架构。开源驱动程序使用 Mesa。过去加载哪一个很容易被破坏。现在使用 libglvnd,它提供了一种选择使用哪个的方法。

所以你的 3d 驱动程序实际上由几个不同的内核模块和库组成。多个驱动程序可以共存并同时运行。

因此,要查看安装了哪些 dri 驱动程序:

ls /lib/modules/[linux version]/kernel/drivers/gpu/drm/

并查看安装了哪些 x11 2d 驱动程序:

ls /lib/xorg/modules/drivers/

(希望这些目录在发行版之间不会有太大差异)

要查看加载了哪些模块,您可以查看哪些模块需要 drm。

lsmod | grep drm

如果 drm_kms_helper 也需要某个模块,则它适合大多数现代图形驱动程序。然后找出模块的路径:

modinfo -F filename [module name]

然后您可以使用各自的包管理器来查找提供它的包。使用 apt-get/dpkg 你可以这样做:

dpkg -S <path to module>

最后,您的 GPU 驱动程序可能会提供自己的专有接口。例如nvidia提供了vdpau用于视频编码和解码。

相关内容