[Pharo-project] [Vm-dev] Re: out of memory - cog on windows

Tudor Girba tudor.girba at gmail.com
Wed May 18 10:34:57 EDT 2011


Hi,

On 18 May 2011, at 16:30, Levente Uzonyi wrote:

> On Wed, 18 May 2011, Tudor Girba wrote:
> 
>> 
>> Hi,
>> 
>> Is there a possibility to have any sort of answer on this topic?
>> 
>> It looks to me like this bug is critical given that it prevents us to work with images larger than some 200M.
> 
> IMHO it's a problem on the image side. Change the behavior of #lowSpaceWatcher to fix the problem.

How would you do it? :)

And if it is an image problem, why does it only appear on Windows?


Cheers,
Doru



> 
> Levente
> 
>> 
>> Cheers,
>> Tudor
>> 
>> 
>> 
>> On 16 May 2011, at 11:06, Tudor Girba wrote:
>> 
>>> Hi Igor,
>>> 
>>> Thanks a lot for looking into this. For us (around Moose), this is a critical issue because we play with our models in memory and regularly have images of several hundred megabytes. While most of us work on Mac without a problem, some other people work on Windows and this is a bottleneck.
>>> 
>>> Unfortunately, I do not have enough know-how to dive into the VM, but I would be gladly help in any way I can.
>>> 
>>> Cheers,
>>> Doru
>>> 
>>> 
>>> On 16 May 2011, at 10:50, Igor Stasenko wrote:
>>> 
>>>> On 10 May 2011 09:34, Tudor Girba <tudor.girba at gmail.com> wrote:
>>>>> Hi,
>>>>> 
>>>>> I am back with some more input on the matter. We played with it, and found that basically any image that goes beyond something like 200MB limit (or maybe it's the number of objects), will not open on Windows.
>>>>> 
>>>>> I would need some help on this. Has nobody else hit this wall, or is it that I am doing something wrong?
>>>>> 
>>>>> One scenario that we used to reproduce the problem looks like this:
>>>>> 1. Take a Moose image:
>>>>> http://hudson.moosetechnology.org/job/moose-latest-dev/lastSuccessfulBuild/artifact/moose/*zip*/moose.zip
>>>>> 2. Run:
>>>>> 1 to: 3 do: [ :i | MooseScripts createModelForConfigurationOfMoose ]
>>>>> This will basically create some 850000 objects and will get the image to some 400+MB
>>>>> 3. Save and quit the image
>>>>> 4. Reopen it
>>>>> 
>>>>> A ready-made image with the result of this can be found here:
>>>>> http://dl.dropbox.com/u/18323746/Tmp/moose-case-study-windows-problem.zip
>>>>> 
>>>>> This works well on Mac, but on Windows when you reopen the image, you get the out of memory message.
>>>>> 
>>>>> Cheers,
>>>>> Doru
>>>>> 
>>>>> 
>>>> 
>>>> I using latest VMs built by cmake on windows, and everytime i run this image,
>>>> it opens a 'Space is low' dialog and then image not reacting on anything.
>>>> VM not crashing however and responds to windows events.. But because
>>>> UI process is broken
>>>> an image simply not reacts to anything.
>>>> 
>>>> 
>>>> I think that the problem is that this dialog are shown at early image
>>>> startup time,
>>>> before everything is properly initialized, and because of that UI
>>>> stalls somewhere.
>>>> 
>>>> 
>>>> Next things which i tried is to increase a virtual memory limit in
>>>> sqWin32Alloc.h
>>>> 
>>>> #ifndef MAX_VIRTUAL_MEMORY
>>>> #define MAX_VIRTUAL_MEMORY 512*1024*1024
>>>> #endif
>>>> 
>>>> first i raised it to 768 Mbytes.. same behavior.
>>>> then i raised it to 1Gb and again same behavior..
>>>> 
>>>> So, either this constant is overridden somewhere or it actually
>>>> doesn't affecting the low-space detection mechanism as i would expect.
>>>> Any suggestions?
>>>> 
>>>> 
>>>> I will continue looking , what happens on VM side,
>>>> but in addition to that, i think we should do something on image side as well:
>>>> - a low space watcher should not pop up before passing image startup,
>>>> because if preempted process is UI process (and in 99.99% cases it is),
>>>> then it means that low space watcher blocks UI process and as a consequence,
>>>> your image stops handling events.
>>>> 
>>>> 
>>>> Also, i thinking about different approach for signaling a low space condition.
>>>> Instead of signaling a low space semaphore, what VM could do is to
>>>> fail an allocation primitive
>>>> and set the error code to "low memory warning"
>>>> then a primitive failure code could actually throw an exception, which
>>>> then could be handled as usual...
>>>> so you could write a code, like:
>>>> 
>>>> [ self allocateSomethingReallyHuge ] on: LowMemoryWarning do: [:err |
>>>> self shouldWeReallyCare ifFalse: [ self tellVMThatItsOk. err resume ]
>>>> ifTrue: [ err pass ]
>>>> ]
>>>> 
>>>> Because by preempting a currently active process, which "possibly"
>>>> causing a memory problems is not a solution,
>>>> as you can see, if it happens during startup phase, then you it just
>>>> stucks and image hangs.
>>>> But if we could use exceptions, we could just ignore this warning (or
>>>> do something else) during image startup,
>>>> instead of blocking UI process , showing a useless popup message and
>>>> letting image hang like that.
>>>> 
>>>> --
>>>> Best regards,
>>>> Igor Stasenko AKA sig.
>>> 
>>> --
>>> www.tudorgirba.com
>>> 
>>> "If you interrupt the barber while he is cutting your hair,
>>> you will end up with a messy haircut."
>>> 
>> 
>> --
>> www.tudorgirba.com
>> 
>> "Obvious things are difficult to teach."
>> 
>> 
>> 
>> 

--
www.tudorgirba.com

"Next time you see your life passing by, say 'hi' and get to know her."







More information about the Pharo-dev mailing list