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

相关推荐
@insist12327 分钟前
信息安全工程师考点精讲:身份认证核心原理与分类体系(上篇)
大数据·网络·分类·信息安全工程师·软件水平考试
SmartRadio42 分钟前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
laowangpython1 小时前
Rust 入门:GitHub 热门内存安全编程语言
开发语言·其他·rust·github
_.Switch1 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
习惯就好zz2 小时前
Git 交互式 rebase 实战:将后续修改合并到历史提交
git
金色光环2 小时前
FreeModbus释放底层的 TCP 监听端口
服务器·网络·tcp/ip
数智化精益手记局2 小时前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程
灰子学技术4 小时前
Envoy HTTP 过滤器处理技术文档
网络·网络协议·http
我科绝伦(Huanhuan Zhou)5 小时前
探索技术世界:我的GitHub数据库工具宝库
数据库·github
Olivia051405146 小时前
Voohu:音频变压器的屏蔽接地技术对50Hz工频噪声抑制的影响
网络·机器人·信息与通信