I've an Asus U31SD Notebook with an i5-2430M CPU. The Asus site says that the maximum RAM is 8 GB, but Intel's says my CPU supports 16 GB. What is the maximum RAM I can use on this system under Ubuntu?
The limit is actually between your hardware (Motherboard memory support and amount of slots in it) and the version of Ubuntu (32 Bit, 32 Bit + PAE, x32ABI, 64 Bit)
If you have a motherboard that supports a maximum of 4GB, it does not matter if you use 32 Bit, 32 Bit PAE or 64 Bit since you will have a hardware limit of 4GB.
But if you buy a motherboard that supports a higher amount of memory, you can play around with the versions of Ubuntu, which have the following maximum supported memory:
Ubuntu 32 Bit - 4GB RAM
Ubuntu 32 Bit + PAE (Physical Address Extension) - 64GB RAM
Ubuntu x32ABI - 4GB RAM (This is for 32 Bit architecture modified with 64 Bit enhancements running on 64 Bit hardware. It is not yet available.)
Ubuntu 64 Bit - A LOT! (Actually 2^64) but because of hardware limits and real world computers the limit is around 1TB ( 1024GB RAM)
So the question about memory limit should be used when you are using more than 4GB of RAM. In this case you would need, either 32 Bit PAE or 64 BIT which support really big memory sizes.
Also note that if you have for example 4GB right now, and you buy 16GB of ram, there is no need to reinstall Ubuntu or do any changes. Just change the memories and Ubuntu should read and work with them out of the box. No configuration necessary. If you have 32 Bit with 4 GB RAM and you install 16GB or RAM, Ubuntu will automatically change from 32 Bit to 32 Bit PAE. I can vouch for this since I moved from 4GB to 16 GB in the beginning of this year.
Here is a link to a very good explanation for Ubuntu about memory in 32/64: https://help.ubuntu.com/community/32bit_and_64bit#Memory
UPDATE - Forgot to add that some motherboards have BIOS updates that enable, correct or enhance the maximum memory supported. For example, some Intel motherboards in the past had problems working with the maximum they supported. A BIOS update fixed this. Other motherboards had support for 4GB because of a BIOS problem, after upgrading they had support for more than 4GB.
Also comparing the Maximum supported memory for the CPU and the Motherboard, the Maximum you can have is the Minimum of any of them. So for example:
The reason behind this Memory Limit relation to the CPU is because of technical modifications by Intel with the latest Core CPUs.
So in your case, you have a motherboard that supports 8GB and a CPU that supports 16GB. This means the maximum you can have is 8GB which you can use depending on the amount of slots in the motherboard. In that Asus you have 2 Slots, which means you can have two 4GB of RAM to complete the Maximum of 8GB.
More Info about x32abi:
LWN - https://lwn.net/Articles/456731/ (Recommend reading comments for easy to learn explanations about memory limit)
Google - http://sites.google.com/site/x32abi/
Lastly, since Ubuntu 12.04, all 32 Bit versions of Ubuntu come with PAE activated by default so all 32 Bit will support a maximum of 64 GB of RAM. In case you are using 12.04+ and want to know which architecture to use, you now know that you can use any of them as long as you follow some recommendations:
For 32 bit the theoretical limit is 2^32 = 4096 MB, but from Ubuntu 12.04 on the PAE (Physical Address Extension) is turned on by default with a limit of 2^36 = 64 GB.
For 64 bit it should be 2^64 = 16 777 216 TB (yes that's Terabyte) theroretically. In reality the amount of RAM is limited to 2^48 aka 256 TB of RAM.
Since the theoretical limits can't really be reached in a normal laptop the actual limitation is the amount memory slots (normally 1-2) in your notebook and the support by the chipset. 8-16 GB is realistic here if you're willing to pay serious money for 8 GB modules.
I just bought an extra 8GB to pop in my U31SD, for 12GB total. Despite the Asus spec page saying 8GB is the limit, this Works fine. Passed memtest86 and is visible to 64bit Ubuntu.
I have the latest bios update installed, not sure if that makes any difference.
FYI, output of
It is a restriction on the motherboard not on the CPU. The CPU may be able to support up to 16GB but if the motherboard can only take 8GB then that's your limit.
In Ubuntu if you're running 32-bit then your limit is 4GB and if you're running 64-bit it's much higher (can't remember for certain but it's way way above 16GB.
But you will always be restricted by your hardware. You must always compare the motherboard limit and the CPU limit and take the lowest value as the PC's limit.
In your specific case, 8 GB is due to your motherboard not supporting any more than that amount of RAM.
But Ubuntu itself supports 4 GB max for 32 bit , 64 GB on 32-bit PAE and 128 GB on 64 bit (although theoretically the cap is much higher for 64 bit).
there were many questions what determines size of a pointer. basically as a rule of thumb you can say this is processor architecture,
To address 8GB of RAM you need 8,589,934,592 mappings and pointer of size 4 bytes cannot address all possible values. so this is why I cannot have more than 4GB RAM on x86 architecture.