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