On 2 Feb 2004 at 11:08, Jimmy Wales wrote:
There is one very important quirk that I need to report. The dual opteron reports 4,096MB of ram, as expected.
However, the two Pentium IV servers with 4 physical gig of RAM in them report only 3,584MB of RAM. I fiddled with the chips to confirm that each of them really is 1 Gig, and that's not it. I also poked around in the bios (in an uneducated manner), but saw nothing to fix.
There are two issues. First the system uses some memory address to map to IO. Some platforms allow for memory mapped IO to be done in a seperate space to actual memory address space however the x86 architecture is no one of these. If your memory is not full up this isn't a problem as IO can be mapped to addresses that aren't being used. But if the RAM in your system is at the maximum then you won't be able to use all of it.
Secondly Linux partitions the memory seen by a process as Kernel and User. The exact sizes of these can be set when the Kernel is complied. If you have 2GB or less of memory this isn't a problem the system can juggle memory between kernel and user as needed.
However on a system with 4GB you will configure the kernel to have 512GB and give the rest to user. However on a 32 bit system there is not much room to move. A user process can only access 3.5GB, so Squid would be limited to 3.5GB even though more memory might be free. You can lower the amount reserved kernel, but then you place a hard limit on the memory the kernel can use and may run into trouble if it needs more memory than you have let it have.
I hope I have explained this well, it is complex and I have tried to keep it simple.
Also some versions of malloc don't work well when you go over 3GB.
My suggestion, if the 1GB from each of the 4GB machines can be put to good use elsewhere then do so. Otherwise it won't hurt to leave it where it is. However if you really want to get use of 4GB you'll really need a machine with a 64 bit architecture.
Richard Gallagher