如何检查视频内存大小?

有没有一种方法来检查视频内存的大小?特别是,有没有一个对于集成GPU以及PCI/AGP显卡都能准确工作的解决方案?
许多集成GPU具有动态分配的内存,因此解决方案将希望返回可用视频内存的最大值或当前分配的数量。对于独立的NVidia或ATI显卡,它显然会返回物理GPU RAM的总量。 lspci -v 确实输出内存数字,但我不认为它是视频内存。我怀疑报告的数字是一些系统内存分配或块或通道大小,但我不确定。您可以在这些test results中看到,lspci在6个测试中有5个测试错误。
** ASUS EN210 PCIe - 1024 Mb *** 

01:00.0 VGA compatible controller: nVidia Corporation GT218 [GeForce 210] (rev a2)
        Subsystem: ASUSTeK Computer Inc. Device 8354
        Memory at e3000000 (32-bit, non-prefetchable) [size=16M]
        Memory at d0000000 (64-bit, prefetchable) [size=256M]
        Memory at e0000000 (64-bit, prefetchable) [size=32M]

*** Galaxy 8400GS PCIe - 512 Mb *** 

01:00.0 VGA compatible controller: nVidia Corporation G98 [GeForce 8400 GS] (rev a1)
    Subsystem: nVidia Corporation Device 05cc
    Region 0: Memory at e4000000 (32-bit, non-prefetchable) [size=16M]
    Region 1: Memory at d0000000 (64-bit, prefetchable) [size=256M]
    Region 3: Memory at e2000000 (64-bit, non-prefetchable) [size=32M]

*** VirtualBox VM - 10 Mb (headless server) *** 

00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
        Memory at e0000000 (32-bit, prefetchable) [size=16M]

*** VirtualBox VM - 128 Mb *** 

00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter (prog-if 00 [VGA Controller])
        Memory at e0000000 (32-bit, prefetchable) [size=128M]

*** S3 Savage 4 AGP - unknown Mb (old lspci log), but I don't think they made these cards with 128Mb memory! *** 

00:01.0 VGA compatible controller: S3 Inc. Savage 4 (rev 06) (prog-if 00 [VGA controller])
    Subsystem: IBM Unknown device 01c5
    Region 0: Memory at feb80000 (32-bit, non-prefetchable) [size=512K]
    Region 1: Memory at f0000000 (32-bit, prefetchable) [size=128M]

*** NVIDIA Quadro FX 1800 integrated - 1024 Mb *** 

01:00.0 VGA compatible controller: nVidia Corporation GT215 [Quadro FX 1800M] (rev a2) (prog-if 00 [VGA controller])
    Subsystem: Dell Device 040c
    Memory at e2000000 (32-bit, non-prefetchable) [size=16M]
    Memory at d0000000 (64-bit, prefetchable) [size=256M]
    Memory at e0000000 (64-bit, prefetchable) [size=32M]

因为你不相信这个数字,所以你不接受暗示它的答案吗? - RolandiXor
5@Roland,也许我的措辞不准确。我对于lspci输出并不是专家,但正如你在测试结果链接中所看到的,它并没有给出视频内存的总大小,因此并没有回答这个问题。 - drgrog
可能是重复的问题,与如何查找我的计算机有多少内存?相似。 - Waldir Leoncio
6个回答

这是带有ATI 6370HD独立1G显卡的dmesg输出结果。 "检测到VRAM RAM=1024M,BAR=256M",请查找此行。
sourajit@sourajit:~$ sudo dmesg | grep drm
[    6.126816] [drm] Initialized drm 1.1.0 20060810
[    6.541907] [drm] radeon defaulting to kernel modesetting.
[    6.541910] [drm] radeon kernel modesetting enabled.
[    6.542102] [drm] initializing kernel modesetting (CEDAR 0x1002:0x68E4 0x17AA:0x397A).
[    6.542142] [drm] register mmio base: 0xE0600000
[    6.542143] [drm] register mmio size: 131072
[    7.406572] [drm] Detected VRAM RAM=1024M, BAR=256M
[    7.406576] [drm] RAM width 64bits DDR
[    7.406654] [drm] radeon: 1024M of VRAM memory ready
[    7.406655] [drm] radeon: 512M of GTT memory ready.

9这是最终适用于我的方法,只需稍作调整以过滤更多的dmesg内容:dmesg | grep VRAM - Ron E
2当我看到我的英特尔i5集成显卡上显示“可供图形设备使用的内存=2048M”,而其他地方都显示为“256M”时,我感到很困惑(可能是共享内存或其他原因)。编辑:刚刚阅读了http://askubuntu.com/a/475405/178596 - Wilf
这些信息也可以从/var/log/syslog(以及syslog.1syslog.2.gz)中获取,使用grepzgrep(用于gz文件)。 - Gea-Suan Lin
@RonE 你的方法无疑是最简单的!它有效。 - 71GA

以下方法对我有效:
glxinfo | egrep -i 'device|memory'

2它就像魔法一样有效! - obayhan
这绝对是在Ubuntu系统中获取有关显卡信息的最佳命令。 - Capaj
在Redhat 8上使用Nvidia GeForce 9600(NV96)进行工作。 - Daniel Antonio Nuñez Carhuayo
要显示glxinfo的内存部分,可以使用glxinfo | grep -A3 'Memory info' - jnas

LC_ALL=C lspci -v | grep -EA10 "3D|VGA" | grep 'prefetchable' 

我的系统输出
Memory at d0000000 (64-bit, non-prefetchable) [size=4M]
Memory at c0000000 (64-bit, prefetchable) [size=256M]

这意味着它有256 MB的内存专用于集成显卡。

更新:然而,如果您使用Intel HD Graphics之类的显卡,请注意。它的内存通常与系统的主要RAM共享,并且是动态的,这意味着根据需要增加和减少。在我的系统中,我后来发现它可以增长到1.7 GB,并且这个值似乎是标准的,如果您具有4.0 GB的RAM的系统(我的情况)。
如果您使用这样的显卡,上述输出将不会有太大帮助。


3你可以通过运行sudo dmesg | grep drm来找到具体数值,就像第一个回答中所说的那样。我得到的结果是2048M,我在Wine下使用了这个数值,并且它有效。 - Wilf
1对于与主内存共享的显卡,这些内存使用情况是否会被像 topfree 这样的工具显示出来,还是对操作系统来说是不可见的?如何查找由共享集成显卡占用的内存量? - CMCDragonkai
我真的无法确定哪个命令正在附加共享内存并导致总内存增加;因为glxinfo和dmesg都报告了比lspci上报的VRAM数量多一倍的情况,这是在一个带有APU的笔记本电脑上,而在另一个带有另一个英特尔APU的台式机上则不一致,这次甚至dmesg都没有报告任何信息。 - polendina

nvidia-settings对使用专有驱动程序的显卡进行此操作。它可能不准确,但对于我的特定显卡来说是正确的。我不知道是否有其他用户空间工具可以专门查询视频驱动程序。
您还可以尝试sudo lshw -class display,但我不能保证它比lspci更准确。此外,它报告的是内存范围,而不是数量,所以您需要进行一些计算。
我发现grep -i memory /var/log/Xorg.0.log在我的系统显卡上正确报告了VRAM。但对于使用集成Radeon Mobility设备的radeon驱动程序的笔记本电脑,它起作用。

谢谢,但是nvidia-settings是针对特定显卡的。是的,我相信lshw报告的系统内存资源与lspci相同,只是lshw将它们报告为地址范围而不是大小。 - drgrog
3在回答这个问题之前,我应该想到去查看Phoronix。在我的系统上,我的768MB G80显卡在lspci中被报告为256MB,正如你所指出的。论坛上的人说这实际上是通过PCI总线可见的孔洞,这是有道理的。在我的系统上,执行'dmesg |grep VGA'也会出现同样的问题,尽管我听说对其他人来说它可以正常工作。在/var/log/Xorg.0.log中,内存的报告是正确的:'NVIDIA(0): Memory: 786432 kBytes'。从这个论坛帖子中可以找到更多信息:http://phoronix.com/forums/showthread.php?26231-r600-uses-only-256-mb-video-ram! - koanhead
1看起来我得自己写脚本了。到目前为止,grep kB /var/log/Xorg.0.log 或者 grep -i mem /var/log/Xorg.0.log 给我提供了关于Nvidia显卡和VirtualBox虚拟机最准确可行的数据。我没有ATI显卡可以测试,也还没来得及测试我的集成Intel显卡或VMware虚拟机。 - drgrog
1fglrx:使用grep kByte将会得到类似以下结果:视频内存:1048576 kByte,类型:GDDR5,仅使用kB进行grep也会显示一些VESA项目。 - taneli
xserver-xorg-video-ati: grep "mem size" 将返回类似于以下内容的结果:RADEON(0): mem size init: gart size :1fdff000 vram size: s:40000000 visible:f6f6000,这是我能得到的最好结果,其中内存大小以十六进制表示在s:之后。 - taneli
i915: 使用grep VideoRam命令会得到类似这样的结果:intel(0): VideoRam: 262144 KB。只用KB进行搜索可能还会显示一些XKB项。 - taneli

你可以试试这个:
echo $"VRAM: "$(($(grep -P -o -i "(?<=memory:).*(?=kbytes)" /var/log/Xorg.0.log) / 1024))$" Mb"

如果上述命令失败,可以尝试以下方法:
echo $(dmesg | grep -o -P -i "(?<=vram:).*(?=M 0x)")$" Mb"

没什么新的 - 只是看了其他帖子,并添加了模式匹配以获得更好的格式化输出。

Ubuntu 14.04 Asus G551JM笔记本(双显卡,包括GeForce GTX 860M)都不适用。 - Adam Ryczkowski
2第一个命令返回错误 bash: / 1024: 语法错误: 需要操作数(错误标记为 "/ 1024") - Adam Ryczkowski
这是唯一一个对我有效的解决方案,通过命令行实现! - Panayotis
第二个命令返回视频RAM的准确大小。 - Mudit Kapil

有一个叫做hardinfo的程序,在软件中心可用,它会列出每个视频卡(在设备下拉菜单中,PCI设备类别下),以及每个卡的规格,包括内存和供应商/型号。

2谢谢Nathan,但是hardinfo只是一个用于显示从lshw和lspci等获取的信息的图形界面前端。我记得以前有人提过这个建议,尽管似乎作者已经删除了答案。 - drgrog
3Hardinfo很酷,但不能显示GPU内存。 - Adam Ryczkowski