[Vm-dev] [Cuis-dev] Crashes on snapshot with the new compactor

Juan Vuletich JuanVuletich at zoho.com
Mon Apr 17 01:46:04 UTC 2017


Thanks Eliot!

On 27/03/2017 11:16 p.m., Eliot Miranda via Cuis-dev wrote:
> Hi All,
>
>     I have fixed a bug in the compactor that accounts for the two 
> cases I've analysed and the two fairly repeatable crashes I have at 
> hand (three cases in all).  I hope that all those who have been 
> experiencing crashes can start using the latest build asap.
>
> It is fixed in these commits:
>
> Name: VMMaker.oscog-eem.2187
> Author: eem
> Time: 27 March 2017, 3:00:06.676146 pm
> UUID: 2259d299-65a4-42d0-a01b-4b25f5a89745
> Ancestors: VMMaker.oscog-rsf.2186
>
> SpurPlanningCompactor:
> Fix a big in resetting the free chunk used for the 
> firstUnusedFieldsSpace after non-final pasxses (i.e. on snapshot). 
>  The old code didn't check to see if a free chunk was actually found(!!).
>
> and
>
> Branch: refs/heads/Cog
>  Home: https://github.com/OpenSmalltalk/opensmalltalk-vm
>  Commit: 4ceff23323bcd0f2d3d0a4a43c2995f43d09c98a
> https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/4ceff23323bcd0f2d3d0a4a43c2995f43d09c98a
>  Author: Eliot Miranda <eliot.miranda at gmail.com 
> <mailto:eliot.miranda at gmail.com>>
>  Date:   2017-03-27 (Mon, 27 Mar 2017)
>
> The bintray files are here:
> https://bintray.com/opensmalltalk/vm/cog/201703272314
> _,,,^..^,,,_ (phone)
>
> On Mar 25, 2017, at 1:27 PM, Eliot Miranda <eliot.miranda at gmail.com 
> <mailto:eliot.miranda at gmail.com>> wrote:
>
>> Hi All,
>>
>>     a number of people are being affected by crashes on snapshotting 
>> the image, the worst possible time for a crash.  There is a bug in 
>> the new compactor that unfortunately bites when saving.  The 
>> compactor is invoked as part of a full garbage collect after the 
>> garbage collector has feed unreachable objects.  Normally the new 
>> compactor makes only a single pass through the heap, which may not 
>> move all the objects that are possible to move.  (The amount of 
>> objects that can be moved in a single pass is limited by available 
>> free space.)  But on snapshot the compactor makes as may passes as 
>> are necessary to slide all movable objects down as far as possible.  
>> Unfortunately there is a bug in this second pass.
>>
>> Fixing this bug is now my priority.  I have an example image from 
>> Esteban Lorenzano to test.  I am asking anyone else that can provide 
>> an image that reliably crashes when trying to save it to make the 
>> image and changes available to me for testing if possible.
>>
>> In the mean time one may be able to work around the problem by doing 
>> a full garbage collect before snapshot.  This should do a GC with a 
>> single compaction pass which should not fail, and then make it much 
>> more likely that the GC during snapshot will do a single compaction 
>> pass, since fewer objects should be mobile after the single pass 
>> compaction in the explicit GC.
>>
>> To do this in Pharo I would put a full gc here:
>>
>> SessionManager>>snapshot: save andQuit: quit
>> | isImageStarting snapshotResult |
>> ChangesLog default logSnapshot: save andQuit: quit.
>>
>> >> SmalltalkImage current primitiveGarbageCollect.
>>
>> self currentSession stop: quit."Image not usable from here until the 
>> session is restarted!"
>> ...
>>
>> In Squeak I would put a full GC here:
>>
>> snapshot: save andQuit: quit withExitCode: exitCode embedded: 
>> embeddedFlag
>> "Mark the changes file and close all files as part of 
>> #processShutdownList.
>> If save is true, save the current state of this Smalltalk in the 
>> image file.
>> If quit is true, then exit to the outer OS shell.
>> If exitCode is not nil, then use it as exit code.
>> The latter part of this method runs when resuming a previously saved 
>> image. This resume logic checks for a document file to process when 
>> starting up."
>>
>> | resuming msg |
>> Object flushDependents.
>> Object flushEvents.
>>
>> ...
>> Smalltalk processShutDownList: quit.
>> >>SmalltalkImage current primitiveGarbageCollect.
>> Cursor write show.
>> save ifTrue: [resuming := embeddedFlag
>> ifTrue: [self snapshotEmbeddedPrimitive]
>> ifFalse: [self snapshotPrimitive]]  "<-- PC frozen here on image file"
>> ifFalse: [resuming := false].
>>
>> I do apologise for the bug.  I hope it will be fixed within a few days.
>>
>> _,,,^..^,,,_
>> best, Eliot
>
>
> _______________________________________________
> Cuis-dev mailing list
> Cuis-dev at cuis-smalltalk.org
> http://cuis-smalltalk.org/mailman/listinfo/cuis-dev_cuis-smalltalk.org


-- 
Juan Vuletich
www.cuis-smalltalk.org
https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev
@JuanVuletich

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20170416/22254d8b/attachment-0001.html>


More information about the Vm-dev mailing list