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会有所提高。

相关推荐
姜鱼问生12 分钟前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
钱工的门窗技术笔记29 分钟前
智能门窗的边界与前提:为什么“智能”不能替代本体性能
网络·物联网·智能家居
catoop40 分钟前
用 Shell 包装函数,让单个命令拥有专属配置
git
是真的小外套44 分钟前
2021年软考中级信息安全工程师:选择题+案例分析真题全解析(含答案)
网络
盟接之桥1 小时前
盟接之桥谈线束数字化-按单入按单出:线束企业库存管理的破局之道
大数据·前端·网络·数据库·人工智能·制造
南棋网络安全1 小时前
ssrf跨站请求伪造(保姆级教程)
运维·服务器·网络·网络安全
科技象限2 小时前
数据防泄漏系统:文件是怎么溜出门的,就该怎么堵
运维·网络·网络安全·安企神
51ai2 小时前
学生用 AI 做了个 AI Agent:453 测试全过,求大佬说句真话——它算玩具还是工具?
github
听说6662 小时前
信息安全工程师 - 第二十二章 网站安全需求分析与安全保护工程
网络·安全·web安全·网络安全·系统安全
Zguigo3 小时前
学会更高效的理解AI的输出?
人工智能·git·ai