[prev in list] [next in list] [prev in thread] [next in thread] 

List:       squeak-vm-dev
Subject:    Re: [Vm-dev] [Cuis-dev] Crashes on snapshot with the new compactor
From:       Juan Vuletich <JuanVuletich () zoho ! com>
Date:       2017-03-27 3:26:20
Message-ID: 58D8865C.6020506 () zoho ! com
[Download RAW message or body]

[Attachment #2 (text/plain)]

 
[Attachment #3 (multipart/alternative)]


Hi Eliot,

Nobody has reported crashes on image save on Cuis. I never experienced 
one. So, I guess it is ok to wait for the VM fix, as the extra GC as a 
workaround doesn't seem needed in Cuis.

Thanks,

On 25/03/2017 05:27 p.m., Eliot Miranda via Cuis-dev 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@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


[Attachment #6 (text/html)]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    Hi Eliot,<br>
    <br>
    Nobody has reported crashes on image save on Cuis. I never
    experienced one. So, I guess it is ok to wait for the VM fix, as the
    extra GC as a workaround doesn't seem needed in Cuis.<br>
    <br>
    Thanks,<br>
    <br>
    On 25/03/2017 05:27 p.m., Eliot Miranda via Cuis-dev wrote:
    <blockquote
cite="mid:CAC20JE17h+ZNzagDh=xr+_st+D5YgPML2N+uLo_+pawqwWZ1Rw@mail.gmail.com"
      type="cite">
      <div dir="ltr">Hi All,
        <div><br>
        </div>
        <div>    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.</div>
        <div><br>
        </div>
        <div>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.</div>
        <div><br>
        </div>
        <div>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.</div>
        <div><br>
        </div>
        <div>To do this in Pharo I would put a full gc here:</div>
        <div><br>
        </div>
        <div>
          <div>SessionManager&gt;&gt;snapshot: save andQuit: quit</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>| isImageStarting snapshotResult |</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>ChangesLog default logSnapshot: save
            andQuit: quit.</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"><br>
            </span></div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;">&gt;&gt; SmalltalkImage current
              primitiveGarbageCollect.</span></div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"><br>
            </span></div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>self currentSession stop: quit.<span
              class="gmail-Apple-tab-span" style="white-space: pre;"> </span>"Image
            not usable from here until the session is restarted!"</div>
        </div>
        <div>...</div>
        <div><br>
        </div>
        <div>In Squeak I would put a full GC here:</div>
        <div><br>
        </div>
        <div>
          <div>snapshot: save andQuit: quit withExitCode: exitCode
            embedded: embeddedFlag</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>"Mark the changes file and close all files
            as part of #processShutdownList.</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>If save is true, save the current state of
            this Smalltalk in the image file.</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>If quit is true, then exit to the outer OS
            shell.</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>If exitCode is not nil, then use it as exit
            code.</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>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."</div>
          <div><br>
          </div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>| resuming msg |</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>Object flushDependents.</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>Object flushEvents.</div>
          <div><br>
          </div>
          <div><span style="white-space: pre;">...</span></div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>Smalltalk processShutDownList: quit.</div>
          <div>&gt;&gt;<span style="white-space: pre;"> SmalltalkImage
              current primitiveGarbageCollect.</span></div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>Cursor write show.</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>save ifTrue: [resuming := embeddedFlag </div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>ifTrue: [self snapshotEmbeddedPrimitive] </div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>ifFalse: [self snapshotPrimitive]]  "&lt;--
            PC frozen here on image file"</div>
          <div><span class="gmail-Apple-tab-span" style="white-space:
              pre;"> </span>ifFalse: [resuming := false].</div>
        </div>
        <div><br>
        </div>
        <div>I do apologise for the bug.  I hope it will be fixed within
          a few days.</div>
        <div><br>
        </div>
        <div class="gmail_signature">
          <div dir="ltr">
            <div><span style="font-size: small; border-collapse:
                separate;">
                <div>_,,,^..^,,,_<br>
                </div>
                <div>best, Eliot</div>
              </span></div>
          </div>
        </div>
      </div>
      <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
Cuis-dev mailing list
<a class="moz-txt-link-abbreviated" \
href="mailto:Cuis-dev@cuis-smalltalk.org">Cuis-dev@cuis-smalltalk.org</a> <a \
class="moz-txt-link-freetext" \
href="http://cuis-smalltalk.org/mailman/listinfo/cuis-dev_cuis-smalltalk.org">http://cuis-smalltalk.org/mailman/listinfo/cuis-dev_cuis-smalltalk.org</a>
 </pre>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Juan Vuletich
<a class="moz-txt-link-abbreviated" \
href="http://www.cuis-smalltalk.org">www.cuis-smalltalk.org</a> <a \
class="moz-txt-link-freetext" \
href="https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev">https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev</a>
 @JuanVuletich</pre>
  </body>
</html>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic