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

相关推荐
JoySSLLian14 分钟前
手把手教你安装免费SSL证书(附宝塔/Nginx/Apache配置教程)
网络·人工智能·网络协议·tcp/ip·nginx·apache·ssl
Zach_yuan20 分钟前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
猫头虎44 分钟前
如何解决 OpenClaw “Pairing required” 报错:两种官方解决方案详解
网络·windows·网络协议·macos·智能路由器·pip·scipy
charlotte102410241 小时前
高并发:关于在等待学校教务系统选课时的碎碎念
java·运维·网络
Zaralike2 小时前
Linux 服务器网络不通排查 SOP(标准操作流程)
linux·服务器·网络
云姜.2 小时前
网络协议----OSI七层网络协议 和 TCP/IP四层(五层)网络协议
网络·网络协议
!chen2 小时前
LabVIEW TCP Server端工具TCP通信
网络·tcp/ip·labview
枷锁—sha3 小时前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
郝学胜-神的一滴3 小时前
深入解析C/S模型下的TCP通信流程:从握手到挥手的技术之旅
linux·服务器·c语言·网络·网络协议·tcp/ip
池央3 小时前
CANN 算子诊断与故障定位:oam-tools 在异构计算错误解析中的作用
网络