You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux无图形环境下获取VRAM及GPU缓存大小的技术问询

问题描述

我想写一个脚本(语言不限)来显示VRAM大小。目前只有sudo lspci -vnn能用,但在没开启Resizeable BAR的系统上没法正常工作;glxinfo能显示VRAM大小,但必须等图形环境加载后才能运行,导致脚本在SSH或TTY环境下失效。

我的PC上的lspci -vnn输出示例:

08:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] [1002:73bf] (rev c1) (prog-if 00 [VGA controller])
    Memory at 7800000000 (64-bit, prefetchable) [size=16G]
    Memory at 7c00000000 (64-bit, prefetchable) [size=256M]

朋友笔记本上的输出示例:

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] [10de:1f91] (rev a1) (prog-if 00 [VGA controller])
        Memory at a3000000 (32-bit, non-prefetchable) [size=16M]
        Memory at 90000000 (64-bit, prefetchable) [size=256M]
        Memory at a0000000 (64-bit, prefetchable) [size=32M]

两个具体问题:

  1. 如何在未运行X11或Wayland的环境下获取真实VRAM大小?(hyprctl等工具无法使用)另外不能要求每台机器都开启Resizeable BAR,希望脚本通用,有跨平台方案更好,至少支持AMD/Nvidia/Intel中的两种。
  2. 我的Radeon显卡上的256M内存是什么?我原以为是Infinity Cache,但它应该只有128M。如何获取GPU缓存大小?

解决方案

1. 无图形环境下获取真实VRAM大小

针对AMD显卡

直接读取sysfs系统文件,不受Resizeable BAR状态影响:

  • 执行cat /sys/class/drm/card0/device/mem_info_vram_total,输出为字节数,自行换算成GB/MB即可。
  • 可先通过cat /sys/class/drm/card0/device/vendor确认是AMD(输出值为0x1002)后再执行上述命令,避免误读其他设备。

针对NVIDIA显卡

  • 若系统已安装NVIDIA驱动核心组件(无需图形环境),执行nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits,直接获取VRAM大小(单位MB)。
  • 未装驱动时,可尝试读取sysfs路径/sys/class/drm/card0/device/mem_info_vram_total;或用sudo dmidecode -t memory | grep -A5 "Device Locator: *GPU"读取SPD信息(部分笔记本支持)。

通用兼容方案

优先遍历/sys/class/drm/card*/device/路径,按品牌分支处理:

  1. 读取vendor文件判断品牌:0x1002=AMD,0x10de=NVIDIA,0x8086=Intel。
  2. AMD:使用mem_info_vram_total;NVIDIA:优先调用nvidia-smi, fallback到mem_info_vram_total;Intel:读取mem_info_vram_total(集成显卡显示分配的VRAM大小)。
  3. 若sysfs不可用,退而解析lspci -vnn输出,累加所有prefetchable类型的内存大小(注意:未开Resizeable BAR时此值不准确,仅作备用)。

2. Radeon显卡的256M内存及GPU缓存获取

256M内存的本质

你看到的256M内存是VRAM的PCIe BAR映射区域,不是Infinity Cache。未开启Resizeable BAR时,PCIe BAR只能映射小部分VRAM(通常256M或1G),这条记录是BAR分配的另一段VRAM映射区间,和缓存无关。

获取GPU缓存大小

  • AMD显卡:读取/sys/class/drm/card0/device/cache_info_size,输出为字节数,换算后即为GPU缓存大小(比如RX 6800 XT的128M Infinity Cache会显示为134217728字节);也可安装amdgpu-top(无需图形环境),执行amdgpu-top -d 1 | grep "Cache"查看详情。
  • NVIDIA显卡:执行nvidia-smi --query-gpu=l2_cache_size --format=csv,noheader,nounits获取L2缓存大小;或读取/sys/class/drm/card0/device/cache_info_size(部分驱动支持)。

内容的提问来源于stack exchange,提问作者Unknown User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:43:23