Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

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

I notice on 64-bit Windows and Ubuntu, there is a small amount of memory that isn't even reported to the OS. For example: I have 16GiB (16384MiB) of memory in my box according to BIOS, but Ubuntu reports I have "16043MB" of total memory. I see this on multiple systems with AMD or Intel chipsets running Windows or Linux, the amount of 'missing' memory varying.

Neither number adds up to the actual amount of physical memory installed, so what is it being used for? Is some memory reserved for communication with a graphics card or other devices? If so, how? What else could be using the memory and in what way? Why is the real amount of memory not visible within the operating system? Where can I read more about this as hardware designer?

When I try to research this I only find people bewildered by their 32-bit OS not recognizing all of their 4GiB memory upgrade.

share|improve this question
If you downvote, please explain how I can improve the question. – jerkstore Dec 19 '13 at 20:56
Note that 16043 / 1024 = 15.7, so if you accidentally meant to say that Ubuntu reports 16043 (instead of 160043)MB, that's the same as 15.7GiB. – ChrisInEdmonton Dec 19 '13 at 21:00
Chris, that comment makes a good answer. – Yitzchak Dec 19 '13 at 21:02
@ChrisInEdmonton thanks, fixed that typo. – jerkstore Dec 19 '13 at 21:23
up vote 3 down vote accepted

If you have some kind of Integrated Graphics chipset (iGPU), it very likely reserves some system memory as an alternative to using dedicated Video Memory (VRAM).

So the story goes like this: AMD Accelerated Processing Units (APUs) and Intel HD Graphics contain essentially cut-down versions of a graphics card, mounted onto the same package as the CPU. In recent years, both AMD and Intel have started pushing these iGPUs into almost every desktop processor sold. Historically, these chips were on the motherboard, but they started moving them into the CPU. You can still buy processors without them, but the vast majority now have them, even on systems with dedicated graphics cards that are much more powerful.

If you have drivers installed for your iGPU, chances are that the operating system is technically able to use it. In order to use it, though, it needs to reserve some of your system memory to use for storing graphics data (textures, framebuffer, etc). This is because iGPUs don't come with their own dedicated VRAM, because there isn't enough space on the processor die to fit it. Well, usually; the Intel "Iris Pro" graphics chip contains 128 MB of eMMC; but I digress...

On the other hand, if the only graphics chipset your system has is the iGPU, then of course you have no alternative than to accept that some of your system memory is going to be used by this iGPU, or else you will have no graphics display at all.

For some iGPUs, you can configure in the BIOS how much RAM is reserved for the iGPU, usually from a minimum of 64 MB up to a maximum amount of about 1 GB, though the exact figures vary.

In theory, the iGPU isn't the only possible system component that could reserve some system RAM for a special purpose, but it is certainly the most common. I have also heard of some dedicated graphics cards using a hybrid of both system RAM and VRAM, which means that there is a smaller amount of VRAM built into the graphics card itself, but the driver also asks for an amount of system RAM to set aside to supplement the VRAM as additional space for graphics data.

If you want the gory details, look up something like "Unified Memory Architecture" (not to be confused with a similar term such as NUMA, used to distinguish normal systems from distributed systems), or look for the open hardware specifications for Intel's GMA or HD Graphics chipsets. Since the Linux graphics drivers for these chipsets are open source, you can dive as deep as you want by grabbing the spec documents or reading the Mesa or Linux DRM (Direct Rendering Manager) source code. Here you go -- have fun.

share|improve this answer
Excellent answer, thank you! – jerkstore Dec 20 '13 at 13:56

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .