Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Is there a way to check the size of the video memory? Specifically, is there one that works accurately for both integrated GPU's as well as PCI/AGP graphics cards?

Many integrated GPU's have dynamically allocated memory, so the solution would hopefully return either the maximum available video memory or the currently allocated amount. For stand-alone NVidia or ATI cards it would obviously return the total amount of physical GPU RAM.

lspci -v does output memory figures, but I do not believe it is the video memory. I suspect the figure reported is some system memory allocation or block or channel size, but I don't know for sure. You can see in these test results that lspci was wrong in 5 of the 6 tests:

** 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]
share|improve this question
So because you do not believe it is the figure, you do not accept answers that suggest it? – RolandiXor Aug 17 '11 at 16:18
@Roland, perhaps my wording is wrong. I am no expert regarding lspci output, but as you can see in the test results link, it does not give the total size of video memory, and hence does not answer the question. – drgrog Aug 19 '11 at 0:48

This is the o/p of dmesg with a ATI 6370HD discrete 1G graphics card. "Detected VRAM RAM=1024M, BAR=256M", check for this line.

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.
share|improve this answer
This is the one that ended up working for me, slight tweak just to filter out more of dmesg: dmesg | grep VRAM – Ron E Jun 26 '14 at 15:09
confused by Memory usable by graphics device = 2048M when everything else says 256M on my intel i5 integrated graphics (might be shared memory or something). EDIT: just read – Wilf Apr 14 '15 at 10:19

nvidia-settings does this for cards using the proprietary nvidia driver. It may be inaccurate but it is correct for my particular card. I don't know of any other userspace tool that specifically queries the video driver.

You can also try sudo lshw -class display but I can't guarantee that it will be any more accurate than lspci. Also it reports memory ranges, not amounts, so you'd have to do some math.

I find that grep -i memory /var/log/Xorg.0.log correctly reports the VRAM on my system's card. It does not work for my laptop using driver radeon with integrated Radeon Mobility device.

share|improve this answer
Thanks, but nvidia-settings is card-specific. And yes, I believe lshw reports the same system memory resources as lspci, only lshw reports them as address ranges instead of sizes. – drgrog Jun 5 '11 at 13:48
I should have thought to go check phoronix before trying to answer this. On my system my 768MB G80 video card is reported as 256MB in lspci, as you note. The folks in the forum have said that this is actually the aperture which is visible over the PCI bus, which makes sense. Doing a 'dmesg |grep VGA' gives the same problem on my system, though I've heard it works correctly for others. The memory is reported correctly in /var/log/Xorg.0.log: 'NVIDIA(0): Memory: 786432 kBytes'. From this forum post:…! – koanhead Jun 6 '11 at 0:00
It seems as if I will have to write my own script. So far grep kB /var/log/Xorg.0.log or grep -i mem /var/log/Xorg.0.log give me the most accurate and workable data for nvidia cards and VirtualBox VMs. I do not have any ATI cards to test, and have not got around to testing my integrated intel cards or VMware VMs. – drgrog Jun 6 '11 at 1:27
fglrx: grep kByte will result in something like this: Video RAM: 1048576 kByte, Type: GDDR5, grepping for just kB will also show some VESA items. – taneli Aug 11 '11 at 13:00
xserver-xorg-video-ati: grep "mem size" will result in something like this: RADEON(0): mem size init: gart size :1fdff000 vram size: s:40000000 visible:f6f6000 which is the best I could get out of it, where memory size is in hex after s: – taneli Aug 11 '11 at 13:02
LC_ALL=C lspci -v | grep -EA10 "3D|VGA" | grep 'prefetchable' 

My system outputs

Memory at d0000000 (64-bit, non-prefetchable) [size=4M]
Memory at c0000000 (64-bit, prefetchable) [size=256M]

Which means it has 256 MB of memory dedicated to the integrated video card.

Update: however, beware if you use one of the Intel HD Graphics cards. Its memory is usually shared with the main RAM of the system and it is dynamic, which means it increases and decreases on demand. In my system, I later discovered that it can grow until 1,7 GB, and this value seems to be standard if you have a system with 4,0 GB of RAM (my case). If you use a graphic card like this, the above output won't be of much help.

share|improve this answer
You might be able to find how much by running sudo dmesg | grep drm as in the first answer - I got 2048M, which I used for a app under Wine and it worked. – Wilf Apr 14 '15 at 10:39
For graphics cards that share with the main memory, is this memory use exposed by things like top or free or is it invisible to the OS? How does one find out how much RAM is taken up by the shared IGP? – CMCDragonkai Jan 24 at 15:32

There is a program called hardinfo, available in the Software Center, which will list out each video card (under the Devices drop-down, in the PCI Devices category) and the specs for each card, including the memory and vendor/model.

share|improve this answer
Thanks Nathan, but hardinfo is just a gui frontend for the information obtained from lshw and lspci etc. I remember this being suggested before, although it seems the answer has been removed by the author. – drgrog Jul 16 '11 at 6:05

You can try this:

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

or this if the above command fails:

echo $(dmesg | grep -o -P -i "(?<=vram:).*(?=M 0x)")$" Mb"

Nothing new - just looked at other posts and added pattern matching for a better formatted output.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.