
John Meacham wrote:
On Mon, Mar 13, 2006 at 04:06:59PM +0300, Bulat Ziganshin wrote:
SM> I think what you're suggesting is that the runtime should detect the SM> amount of physical memory on the system and auto-tune itself to switch SM> to compacting collection when its residency reaches that amount. This SM> is certainly something we could do. Bear in mind that GHC is not SM> necessarily the only process running on the machine, though, and what SM> about running multiple GHCs?
i suggest checking of AVAILABLE physical ram, that is perfectly possible in windows
the problem is that available physical ram is wasted ram. any good os will never let there be any available ram because it will fill it up with disk buffers if nothing else. the only time actual available ram appears is when a big application quits, but then it quicky fills up due to normal disk activity. determining how much of those buffers/cached info you can push out without adversly affecting system performance or thrashing is not very easy so at best we get a sort of approximation.
the best solution would be for ghc's garbage collector to periodically call getrusage(2) and look at the number of page faults and swaps it is causing and switch to compaction when it sees a jump in that. I don't know what the equivalent routine on windows would be. not all operating systems fill in all the values of getrusage, BSD is the best, linux is the worst at this. but on linux you can get similar info from /proc/self. (i think it does fill in the values we need in getrusage though, I forget which ones it doesn't have)
Nice little project for someone... I've added a task: http://hackage.haskell.org/trac/ghc/ticket/728 Cheers, Simon