This topic belongs to this list.
---------- Forwarded message ---------- From: Igor Stasenko siguctua@gmail.com Date: 22 October 2012 05:36 Subject: Re: Only ever grows? (was: Re: [squeak-dev] how/where is memory returned to the OS?) To: ma.chris.m@gmail.com, The general-purpose Squeak developers list squeak-dev@lists.squeakfoundation.org
On 22 October 2012 04:35, Chris Muller asqueaker@gmail.com wrote:
Unfortunately there is no easy fix , which will fit all possible use scenarios. As you can see from comments in code, this feature was disabled on purpose for cases when your application works extensively with external resources/libraries, which using malloc() a lot.
You mean FFI? Someone took the trouble to write this for the manpage. My gut thinks FFI has been around longer than the releasing of memory feature -- not sure.
-mmap size[mk] requests that a variable heap of at most size bytes be allo‐ cated. (The suffixes are as described for the '-memory' option.) squeak will initially allocate a heap that is large enough to hold the image, with a small amount of headroom. If at any time Squeak requires more memory for its image then addi‐ tional space will be allocated dynamically. Likewise, when mem‐ ory is no longer needed it will deallocated and returned to the system. The size argument places an upper limit on how big the heap can grow in this fashion. squeak uses a dynamic heap by default with the maximum size set to 75% of the available vir‐ tual memory or 1 gigabyte, whichever is smaller.
Eliot, is the useMmap variable you referred to set by this argument? I tried launching my image with -mmap 700M but it still didn't seem to want to deallocate.
Same with the Classic VM.
It is controlled by overallocateMemory flag, which is not exposed via command-line options.
Here the patched file. I added a new option -releaseUnusedMemory to turn this flag on.
I didn't tried to build VM with it, so don't blame me if it doesn't works :)
diff --git a/platforms/unix/vm/sqUnixMain.c b/platforms/unix/vm/sqUnixMain.c index a593b2a..875bf0d 100644 --- a/platforms/unix/vm/sqUnixMain.c +++ b/platforms/unix/vm/sqUnixMain.c @@ -98,6 +98,7 @@ static char **squeakArgVec= 0;
static int extraMemory= 0; int useMmap= DefaultMmapSize * 1024 * 1024; +extern int overallocateMemory; /* defined in vm/sqUnixMemory.c */
static int useItimer= 1; /* 0 to disable itimer-based clock */ static int installHandlers= 1; /* 0 to disable sigusr1 & sigsegv handlers */ @@ -1263,6 +1264,7 @@ static int vm_parseArgument(int argc, char **argv) /* vm arguments */
if (!strcmp(argv[0], "-help")) { usage(); return 1; } + else if (!strcmp(argv[0], "-releaseUnusedMemory") { overallocateMemory = 1; return 1; } else if (!strcmp(argv[0], "-noevents")) { noEvents = 1; return 1; } else if (!strcmp(argv[0], "-nomixer")) { noSoundMixer = 1; return 1; } else if (!strcmp(argv[0], "-notimer")) { useItimer = 0; return 1; }
-- Best regards, Igor Stasenko.
vm-dev@lists.squeakfoundation.org