
On 12 April 2005 15:59, Bulat Ziganshin wrote:
Hello glasgow-haskell-users,
1) can you add disableGC and enableGC procedures? this can significantly improve performance in some cases
Sure. I imagine you want to do this to avoid a major collection right at the peak of a residency spike. You probably only want to disable major collections though: it's safe for minor collections to happen. You might be better off using System.Mem.performGC just before the residency spike. This doesn't have the pitfalls of enable/disableGC, but it might entail doing more GC than necessary.
2) if, for example, program's data before GC is 80 mb and after GC is 60 mb then the program will occupy after GC the whole 140 mb and ALL this space will be marked by OS as used! if there's a memory shortage, old program data even can be swapped to disk despite the fact that we absolutely don't need them! that behaviour significantly enlarge memory needs of GHC-compiled programs
if this unused memory will be returned to OS or marked as unneeded after GC then will problem will go on. preferably this must be done during the time of GC, on each page which contents has been already compacted. in this case such program will never use more than 80mb of real memory (+ 1 page + memory for GC)
I guess you're proposing using madvise(M_FREE) (or whatever the equivalent is on your favourite OS). This would certainly be a good idea if the program is swapping, but might impose an overhead when running in memory. I don't know, I haven't tried. Also, you might be better off using +RTS -c or +RTS -M<size> to avoid swapping in the first place. Cheers, Simon