a800上gazebo无法使用gpu的问题修复

这是偶然发现的问题,来自于使用gazebo进行训练时,查看nvidia-smi发现并没有使用gpu资源,虽然使用的非常少但是如果不使用的话fps还是会非常小的,所以才发现了xorg没有使用gpu的问题,这个其实也算是驱动安装的问题,如果正常安装好的话应该是不会有这个问题才对(此时可以自由调节分辨率)

为什么我的 Gazebo / OpenGL 一直是 llvmpipe?

直接查询通过glxinfo | grep "OpenGL vendor",只要不是nvidia的就应该是有问题的。

------一次服务器图形栈「显卡存在但不被使用」的完整剖析

1. 问题现象回顾

环境在修复前是:

DISPLAY = :1

OpenGL vendor = Mesa/X.org

OpenGL renderer = llvmpipe

bash 复制代码
xrandr --listproviders

Provider 0: modesetting

Provider 1: NVIDIA-G0

关键现象总结:

NVIDIA GPU 被内核识别(NVIDIA-G0 存在)

但 Xorg 的 OpenGL 实际使用的是 Mesa

Gazebo / glxinfo 全部走 CPU software renderer

服务器 + NVIDIA 显卡 + 默认图形配置下最典型的一种"半可用状态"。

2. 根本原因:GPU 存在 ≠ OpenGL 使用 GPU

2.1 Linux 图形栈的三层结构(关键背景)

很多人误以为:

装了 NVIDIA 驱动 → OpenGL 就会用 GPU

这是 不成立的。

Linux 图形栈是 三层解耦的:

sh 复制代码
┌──────────────┐
│  Application │  ← gazebo / glxinfo
└──────────────┘
        ↓ OpenGL
┌──────────────┐
│   libGL.so   │  ← Mesa or NVIDIA
└──────────────┘
        ↓
┌──────────────┐
│     Xorg     │  ← 选择哪个 GPU provider
└──────────────┘
        ↓
┌──────────────┐
│  Kernel DRM  │  ← nvidia / modesetting
└──────────────┘

只要其中任何一层没选 NVIDIA,最终就会 fallback 到 llvmpipe

3. 这台服务器「具体卡在哪里」

3.1 DISPLAY=:1 ------ 你不是主显示会话

在服务器上:

:0 → 通常是 物理主显示

:1 → 往往是:

GDM / LightDM 创建的 次级会话

或远程 / 登录管理器生成的 X session

很多发行版默认让 :1 走 modesetting

3.2 xrandr --listproviders

Provider 0: modesetting ← 被 Xorg 选中

Provider 1: NVIDIA-G0 ← 只是"存在",没被用

这说明:

NVIDIA GPU 已经注册为 Render Provider

但 没有被 Xorg 绑定为主 provider

所以 OpenGL 默认走:

modesetting → Mesa → llvmpipe

3.3 OpenGL vendor string: Mesa/X.org

这是决定性证据:

OpenGL 的 libGL.so 来自 Mesa,而不是 NVIDIA

即使:

nvidia-smi 正常

CUDA 可用

👉 OpenGL 仍然是 CPU

4. nvidia-xconfig 重新配置

执行了:

bash 复制代码
sudo nvidia-xconfig
sudo systemctl restart display-manager

这一步的本质是:

4.1 生成 /etc/X11/xorg.conf

nvidia-xconfig 自动生成了类似这样的配置:

Section "Device"

Identifier "NVIDIA Device"

Driver "nvidia"

BusID "PCI:xx:yy:z"

EndSection

并强制:

Xorg 使用 nvidia 驱动

而不是 modesetting

4.2 结果:Xorg 主 provider 切换

修复后会看到:

复制代码
xrandr --listproviders

变成类似:

Provider 0: NVIDIA-0

这意味着:

Xorg → NVIDIA DRM → NVIDIA libGL → GPU

于是:

复制代码
glxinfo | grep "OpenGL vendor"

变成:

OpenGL vendor string: NVIDIA Corporation

Gazebo、OGRE、OpenGL 才真正上了 GPU。

5. 为什么服务器默认"不用 NVIDIA"

这是设计选择,不是 bug。

服务器发行版(Ubuntu Server / CentOS)默认策略:

优先稳定、兼容

不假设一定有显示器

不假设一定需要 OpenGL

因此:

组件 默认

Xorg driver modesetting

OpenGL Mesa

GPU 仅 CUDA

👉 这对 深度学习服务器 是合理的

👉 对 Gazebo / 仿真 则是灾难

  1. 如果我想「还回去」,该怎么做?

你这个问题问得非常专业 👍

下面给你 三种安全回退方式。

✅ 方式:删除 xorg.conf(最干净)

复制代码
sudo rm /etc/X11/xorg.conf
sudo systemctl restart display-manager

系统会回到:

bash 复制代码
modesetting

Mesa

llvmpipe
bash 复制代码
注意,服务器上是用不了的。所以不能用于gazebo训练~

经过配置之后,gazebo的fps会有所提高。

相关推荐
mzhan0172 小时前
Linux: netlink 内核网络数据变化通知应用
linux·网络·netlink
廋到被风吹走2 小时前
gRPC 深度解析:Protocol Buffers、HTTP/2、流式传输与拦截器设计
网络·网络协议·http
双层吉士憨包2 小时前
如何注册Talkatone免费美国号码?实测有效方案
大数据·运维·网络
BHXDML2 小时前
TCP/IP 协议栈深度解析:互联网的神经系统
网络·网络协议·tcp/ip
CS创新实验室2 小时前
《计算机网络》深入学:点对点协议 (PPP)
网络·计算机网络·php·ppp协议·点对点协议
Python_Study20253 小时前
工程材料企业如何通过智慧获客软件破解市场困局:方法论、架构与实践
大数据·网络·数据结构·人工智能·架构
零基础的修炼3 小时前
Linux网络---TCP原理
linux·网络·tcp/ip
Lam㊣3 小时前
Ubuntu永久网络静态路由配置
linux·运维·服务器·网络·ubuntu
青果网络_xz3 小时前
国外动态IP在海外市场拓展中怎么用?提升业务安全性和稳定性
网络·网络协议·tcp/ip