Flaherty, Patrick wrote, On 07/14/2010 03:49 PM:
I did some testing a while back, and my results showed that the -/+ buffers line seemed to be the *Minimum* amount of ram available if the kernel purged it's buffers/cache. Sometimes more is available.
(Roughly) The test was:
- Turn swap off
- Run free
- Run 20 instances of a test program that malloc'd 100 megs of ram
- Run free, see 2 gigs of ram + orginal amount of ram used.
- Kill N number of those programs, which should free up N*100megs
- Run free, output of -/+ did not reflect 2gigs - (N*100 megs).
I followed up by running enough instances of the test program that I should have run out of memory free said I had, but the programs all started, none were killed. I ran free again got a number pretty close to what I thought should be free. It's a fun test to play with, I assume results vary from kernel to kernel (how aggressive the kernel is cleaning up returned ram).
Patrick
Did your test program actually USE the 100 megs of ram? Because of "lazy allocation" or "optimistic memory allocation"*** as done by the kernel, the memory is not actually consumed until used. When I did something similar, I simply wrote a char to each byte of memory(there are faster ways, but I wanted simple not fast) after each allocation. You might have done this but I did not interpret your message to indicate that.
***I don't remember which is the correct term to search. but this link has two sets of source to show the difference: http://linuxdevcenter.com/pub/a/linux/2006/11/30/linux-out-of-memory.html