Garbage Collection in Smalltalk
* By John M McIntosh
  - Corporate Smalltalk Consulting Ltd.
  - http://www.smalltalkconsu...
Garbage Collection - a worldly view

* Internet group postings in the last year:
   - “I eventually 'killed' the thing by ...
Reference Counting

* Each object has a counter to track references.
* As references to an object are made/deleted, this c...
Mark/Sweep
Roots                   Mark/Sweep & Compaction
                                              M
               ...
Copying - The Flip or Scavenge
                      FromSpace                                                          To...
Generational Garbage Collector

* Separate objects by age into two or more regions.
         - For example: Tektronix 4406...
Generational Scavenge Event
                             New Space                            -> tenure ->            Old ...
VM Failure at end of chart, Why?
 Log scale
Of RT entries




     © copyright 1997-2004 John M McIntosh, all rights reser...
Squeak Memory Layout
                          Generational Mark/Sweep Compacting
                                        ...
IBM VisualAge Memory Layout v5.5.1
                     Generational Copying (compacting optional)
        NewSpace       ...
VisualWorks Memory Layout                                        V5.i2

           Generational Copying, + Incremental Mar...
SurvivorSpace small, watch how objects get tenured




© copyright 1997-2004 John M McIntosh, all rights reserved. Page   ...
Key to GC Events


           1              Compact GC event: Full mark/sweep/compact OldSpace
           2              ...
SurvivorSpace larger, less objects get tenured




© copyright 1997-2004 John M McIntosh, all rights reserved. Page   14
Beware trade-off is complex, bigger SurvivorSpace =? Poor Performance




© copyright 1997-2004 John M McIntosh, all right...
Impact of pre VW 5.x single free chain performance issue
           First unit of work takes 10x longer than 2nd unit of w...
Incorrect IGC work loads, IGC never completes




© copyright 1997-2004 John M McIntosh, all rights reserved. Page   17
Better IGC work loads, IGC always completes




© copyright 1997-2004 John M McIntosh, all rights reserved. Page   18
Case 1: User interaction test case before changes
12




10                         10 Grow OldSpace



                  ...
Case 1: User interaction test case after changes,
                                                                        ...
500-800MB server application, issues with algorithms




                                                                 ...
Old space is forced to shrink, then it grows!



                                                                         ...
Different VW 7.x 300 MB client application, note Mark/Sweep completions



                                               ...
500 MB un-tuned vw7 server app, note IGC ceilings and excessive GC activity




  © copyright 1997-2004 John M McIntosh, a...
Mission Critical VW 3.x 400-500MB application
                      Before & After, shows what serious tuning can do

   B...
Garbage Collection in Smalltalk
* By John M McIntosh
  - Corporate Smalltalk Consulting Ltd.
  - http://www.smalltalkconsu...
Upcoming SlideShare
Loading in...5
×

Garbage Collection in Smalltalk

895

Published on

Garbage Collection in Smalltalk, John M McIntosh (ESUG 2004, Koethen)

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
895
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Garbage Collection in Smalltalk

  1. 1. Garbage Collection in Smalltalk * By John M McIntosh - Corporate Smalltalk Consulting Ltd. - http://www.smalltalkconsulting.com - johnmci@smalltalkconsulting.com * * Maintainer of the Squeak Macintosh VM. * Squeak TK4 VM support {Ask me later about TK4} * Trip reports for OOPSLA, Camp Smalltalk, etc. For ESUG 2004 © copyright 1997-2004 John M McIntosh, all rights reserved. Page 1
  2. 2. Garbage Collection - a worldly view * Internet group postings in the last year: - “I eventually 'killed' the thing by enumerating over it and using 'become' to transform it into a string.” - “What happens to Threads when they die? Do they go to heaven? Or does the garbage collector take them away?” - “Just a thought that there is a dead object seating (sic) in my memory listening to events and doing funny things without my knowledge is scary and can produce hard to debug behavior.” © copyright 1997-2004 John M McIntosh, all rights reserved. Page 2
  3. 3. Reference Counting * Each object has a counter to track references. * As references to an object are made/deleted, this counter is incremented/decremented. * When a reference count goes to *zero*, the object is <usually> deleted and any referenced children counters get decremented. 1 1 Root 0 1 2 B cascade delete to children deleted A 1 © copyright 1997-2004 John M McIntosh, all rights reserved. Page 3 C
  4. 4. Mark/Sweep Roots Mark/Sweep & Compaction M F A C M M D B E M G M H • Mark accessible objects. • Sweep all objects, and now we realize, • unmarked objects A, B, and C are free Expensive optional compaction event clumps results together making free space © copyright 1997-2004 John M McIntosh, all rights reserved. Page 4 one big block.
  5. 5. Copying - The Flip or Scavenge FromSpace ToSpace Root E Root Flip A C A D B C D B * When FromSpace is full we *flip* to ToSpace: Notice the change of Placement - Copy roots of the world to ToSpace. and that E isn't copied. - Copy root accessible objects to ToSpace. - Copy objects accessible from root accessible objects to ToSpace. - Repeat above until done. * Cost is related to number of accessible objects in FromSpace. © copyright 1997-2004 John M McIntosh, all rights reserved. Page 5
  6. 6. Generational Garbage Collector * Separate objects by age into two or more regions. - For example: Tektronix 4406 Smalltalk used seven regions, 3 bits Pat Caudill (1945-2001) * Allocate objects in new space, when full then copy accessible objects to old space. This is known as a scavenge event. * Movement of objects to old space is called tenuring. * Objects must have a high death rate and low old to young object references. (Eh?). . . Both very important issues, I'll explain in a few minutes. © copyright 1997-2004 John M McIntosh, all rights reserved. Page 6
  7. 7. Generational Scavenge Event New Space -> tenure -> Old Space Root A Root A B C C D E E B A B and C get copied via Root Remembered Table (RT) reference. E is copied via OldSpace InterGenerational References reference from D, which is remember by being stored in the Remember Table. © copyright 1997-2004 John M McIntosh, all rights reserved. Page 7
  8. 8. VM Failure at end of chart, Why? Log scale Of RT entries © copyright 1997-2004 John M McIntosh, all rights reserved. Page 8
  9. 9. Squeak Memory Layout Generational Mark/Sweep Compacting Actual address depends on mmap VM code Old 0x40000000 startOfMemory + VM variables, plugins, DLLs Young 0x40ABFDEF youngStart Malloc free space 0x40EBFDEF endOfMemory Virtual Memory Applies to Squeak VM that support File mapped Block Virtual Memory file mapping and used to store image. G ability to grow/shrink image space Grows and shrinks R (win32, some unix, mac os-9/os-x) On demand O W Issues with non 32bit clean code T limit object space to first 2GB of H Address space. © copyright 1997-2004 John M McIntosh, all rights reserved. Page 9 0x60000000 End of VM Block
  10. 10. IBM VisualAge Memory Layout v5.5.1 Generational Copying (compacting optional) NewSpace Segments (lots!) semi-space - A Fixed 262,144 Old Code OldSpace (RAM/ROM) Cache semi-space - B Space Text 262,144 * Generational Copy Garbage Collector & Mark/Sweep. * Copy between semi-spaces until full * Then tenure some objects to current OldSpace segment * Object loader/dumper can allocate segments (supports ROM) * EsMemorySegment activeNewSpace * To set current NewSpace semi-spaces size. Default is 262,144 in size * abt -imyimage.im -mn###### (Start with ### byte in NewSpace) © copyright 1997-2004 John M McIntosh, all rights reserved. Page 10
  11. 11. VisualWorks Memory Layout V5.i2 Generational Copying, + Incremental Mark/Sweep (Compacting optional) semi-space A Eden semi-space B LargeSpace Stack FixedSpace RT OldSpace Code Cache ORT PermSpace * Allocate objects or headers in Eden (bodies in Eden, Large, or Fixed). * Full? Copy Eden and active semi-space survivors to empty semi-space. * When semi-space use exceeds threshold, tenure some objects to OldSpace. * Once in OldSpace, use a Incremental Mark/Sweep GC to find garbage. © copyright 1997-2004 John M McIntosh, all rights reserved. Page 11
  12. 12. SurvivorSpace small, watch how objects get tenured © copyright 1997-2004 John M McIntosh, all rights reserved. Page 12
  13. 13. Key to GC Events 1 Compact GC event: Full mark/sweep/compact OldSpace 2 Compacting decision has been made 3 IGC justified, interruptible, full cycle via idle loop call 4 Idle Loop Entered 5 Low Space Action Entered via VM trigger 6 Incremental GC, (work quotas) attempt to cleanup OldSpace 7 Request grow; Grow if allowed 8 LowSpace and we must grow, but first do aggressive GC work: Finish IGC, do OldSpace Mark/Sweep GC, if required followup with OldSpace Mark/Sweep/Compact 9 Grow Memory required 10 Grow Memory attempted, may fail, but usually is granted © copyright 1997-2004 John M McIntosh, all rights reserved. Page 13
  14. 14. SurvivorSpace larger, less objects get tenured © copyright 1997-2004 John M McIntosh, all rights reserved. Page 14
  15. 15. Beware trade-off is complex, bigger SurvivorSpace =? Poor Performance © copyright 1997-2004 John M McIntosh, all rights reserved. Page 15
  16. 16. Impact of pre VW 5.x single free chain performance issue First unit of work takes 10x longer than 2nd unit of work. Why? Object Table Data Entries 100,000 Logarithmic scale 10,000 1,000 1st Unit of Work 100 2nd Unit of Work <- Initialization process -> Time Taken, (work units are same computation effort) © copyright 1997-2004 John M McIntosh, all rights reserved. Page 16
  17. 17. Incorrect IGC work loads, IGC never completes © copyright 1997-2004 John M McIntosh, all rights reserved. Page 17
  18. 18. Better IGC work loads, IGC always completes © copyright 1997-2004 John M McIntosh, all rights reserved. Page 18
  19. 19. Case 1: User interaction test case before changes 12 10 10 Grow OldSpace 8 Finish IGC+Quick GC 8 6 4 3 IGC justified 2 OldSpace - Free Memory 2 Need to Compact 1 Compact event 6 Compaction events + 9 Quick GC events 0 0 50 100 150 200 250 300 350 400 450 500 © copyright 1997-2004 John M McIntosh, all rights reserved. Page 19 460 Seconds
  20. 20. Case 1: User interaction test case after changes, IGCAcceleration factor changed 12 10 Grow OldSpace from 5 to 15. More GC work done in idle loop processing so fewer GC events 10 8 Finish IGC+Quick GC 8 6 4 3 IGC justified 2 2 Need to Compact 1 Compact event 3 Compaction events + 5 QuickGC events versus 6 and 9 0 330 Seconds © copyright 1997-2004 John M McIntosh, all rights reserved. Page 20 Old Case was ~460 seconds, we save 130 secs
  21. 21. 500-800MB server application, issues with algorithms Forced GC and object purging frees 400MB, an ugly solution Algorithm issues causes interesting growth pattern © copyright 1997-2004 John M McIntosh, all rights reserved. Page 21
  22. 22. Old space is forced to shrink, then it grows! Note Allocation free Chain performance Problem, shows as gaps in the data © copyright 1997-2004 John M McIntosh, all rights reserved. Page 22
  23. 23. Different VW 7.x 300 MB client application, note Mark/Sweep completions Gaps are CPU related This looked OK, not much room to improve things Lots of Tenuring here Less Tenuring here © copyright 1997-2004 John M McIntosh, all rights reserved. Page 23
  24. 24. 500 MB un-tuned vw7 server app, note IGC ceilings and excessive GC activity © copyright 1997-2004 John M McIntosh, all rights reserved. Page 24
  25. 25. Mission Critical VW 3.x 400-500MB application Before & After, shows what serious tuning can do Before any tuning we saw: After tuning effort: Event Total Event Total 1 Compact 33 3 Full ILIGC 10 2 Compact Need 6 4 Idle Loop 177 3 Full ILIGC 46 5 Low Space 1224 4 Idle Loop 260 6 Run IGC 1224 5 Low Space 1921 6 Run IGC 1793 7 Request Grow 129 Grand Total 2635 10 Grow 129 Zero code tuning was done. Application improved a few % for Grand Total 4317 each SUnit test case. Keyboard responsiveness became “snappy”. Got rid of mystery lock-ups, a core dump (or two), and reduced the © copyright 1997-2004 John M McIntosh, all rights reserved. Page 25 number of GC cursor events.
  26. 26. Garbage Collection in Smalltalk * By John M McIntosh - Corporate Smalltalk Consulting Ltd. - http://www.smalltalkconsulting.com - johnmci@smalltalkconsulting.com * Maintainer of the Squeak Macintosh VM. * TK4 VM support {Ask me later about TK4} * Trip reports for OOPSLA, Camp Smalltalk, etc. For ESUG 2004 © copyright 1997-2004 John M McIntosh, all rights reserved. Page 26
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×