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

相关推荐
珠海西格电力科技11 分钟前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
QT.qtqtqtqtqt17 分钟前
未授权访问漏洞
网络·安全·web安全
半壶清水43 分钟前
[软考网规考点笔记]-软件开发、项目管理与知识产权核心知识与真题解析
网络·笔记·压力测试
JMchen1231 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
yuanmenghao1 小时前
Linux 性能实战 | 第 7 篇 CPU 核心负载与调度器概念
linux·网络·性能优化·unix
那就回到过去1 小时前
MPLS多协议标签交换
网络·网络协议·hcip·mpls·ensp
那就回到过去2 小时前
VRRP协议
网络·华为·智能路由器·ensp·vrrp协议·网络hcip
极客小云2 小时前
【ComfyUI API 自动化利器:comfyui_xy Python 库使用详解】
网络·python·自动化·comfyui
符哥20083 小时前
用Apollo + RxSwift + RxCocoa搭建一套网络请求框架
网络·ios·rxswift
xuhe23 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr