[Vm-dev] VM Maker: ..VMMaker.oscog-eem.618.mcz

gettimothy gettimothy at zoho.com
Fri Feb 14 16:31:49 UTC 2014


The notes at Eliot's blog here: http://www.squeakvm.org/svn/squeak/branches/Cog/image/Workspace.text
imply the difference is important when building a Cog Development Image.

i.e.
N.B. do *not* load VMMaker or VMMaker-oscog. N.B. VMMaker.oscog packages may be listed with VMMaker packages depending on Monticello version.
 
I don't know the implied difference.


cheers

tty


---- On Fri, 14 Feb 2014 08:03:00 -0800 Levente Uzonyi<leves at elte.hu> wrote ---- 


 
Is it intentional that this package and the previous one are prefixed with 
dots? 
 
 
Levente 
 
On Thu, 13 Feb 2014, commits at source.squeak.org wrote: 
 
> 
> Eliot Miranda uploaded a new version of VMMaker to project VM Maker: 
> http://source.squeak.org/VMMaker/..VMMaker.oscog-eem.618.mcz 
> 
> ==================== Summary ==================== 
> 
> Name: ..VMMaker.oscog-eem.618 
> Author: eem 
> Time: 13 February 2014, 11:51:10.104 am 
> UUID: 3756532a-fdbf-4e96-8cc9-be0f35157864 
> Ancestors: ..VMMaker.oscog-eem.617 
> 
> Some musings on Spur compaction. 
> 
> =============== Diff against ..VMMaker.oscog-eem.617 =============== 
> 
> Item was added: 
> + ----- Method: SpurMemoryManager>>abstractCompaction (in category 'compaction - analysis') ----- 
> + abstractCompaction 
> +     "This method answers a rough estimate of compactibility." 
> +     <doNotGenerate> 
> +     | lowestFree freeChunks used movable | 
> +     lowestFree := SmallInteger maxVal. 
> +     freeChunks := Set new. 
> +     used := Set new. 
> +     movable := Set new. 
> +     self allObjectsInFreeTreeDo: 
> +         [:f| 
> +         (self addressAfter: f) < endOfMemory ifTrue: 
> +             [freeChunks add: f. 
> +              f < lowestFree ifTrue: [lowestFree := f]]]. 
> +     self allOldSpaceObjectsFrom: lowestFree do: 
> +         [:o| | size delta best | 
> +         size := self bytesInObject: o. 
> +         delta := SmallInteger maxVal. 
> +         freeChunks do: [:f| | fs | 
> +             ((fs := self bytesInObject: f) >= size) ifTrue: 
> +                 [delta > (fs - size) ifTrue: 
> +                     [delta := fs - size. best := f]]]. 
> +          best ifNotNil: 
> +             [movable add: o. 
> +              used add: (freeChunks remove: best)]]. 
> +     ^{ totalFreeOldSpace. movable inject: 0 into: [:s :o| s + (self bytesInObject: o)]. used inject: 0 into: [:s :o| s + (self bytesInObject: o)] }! 
> 
> Item was added: 
> + ----- Method: SpurMemoryManager>>abstractPigCompaction (in category 'compaction - analysis') ----- 
> + abstractPigCompaction 
> +     "This method answers a rough estimate of compactibility using a pig (a large free chunk)." 
> +     <doNotGenerate> 
> +     | pig pork moved unmoved nmoved nunmoved | 
> +     pig := self findAPig. 
> +     pork := self bytesInObject: pig. 
> +     moved := unmoved := nmoved := nunmoved := 0. 
> +     self allOldSpaceObjectsFrom: pig do: 
> +         [:o| | bytes | 
> +         bytes := self bytesInObject: o. 
> +         bytes <= pork 
> +             ifTrue: 
> +                 [moved := moved + bytes. 
> +                  nmoved := nmoved + 1. 
> +                  pork := pork - bytes] 
> +             ifFalse: 
> +                 [unmoved := unmoved + bytes. 
> +                  nunmoved := nunmoved + 1]]. 
> +     ^{ self bytesInObject: pig. pork. moved. nmoved. unmoved. nunmoved }! 
> 
> Item was added: 
> + ----- Method: SpurMemoryManager>>biggies (in category 'compaction - analysis') ----- 
> + biggies 
> +     "This method answers a sorted collection of the objects >= 1,000,000 bytes long, 
> +      above the lowest large free chunk, sandwiched between nilObj and the end of memory." 
> +     <doNotGenerate> 
> +     | lowestFree biggies | 
> +     lowestFree := SmallInteger maxVal. 
> +     self allObjectsInFreeTreeDo: 
> +         [:f| (self addressAfter: f) < endOfMemory ifTrue: [f < lowestFree ifTrue: [lowestFree := f]]]. 
> +     biggies := SortedCollection new. 
> +     self allOldSpaceObjectsFrom: lowestFree do: 
> +         [:f| 
> +         (self bytesInObject: f) >= 1000000 ifTrue: 
> +             [biggies add: f]]. 
> +     ^{{nilObj hex. #nil}}, (biggies collect: [:f| {f hex. self bytesInObject: f}]), {{endOfMemory hex. #endOfMemory}}! 
> 
> Item was added: 
> + ----- Method: SpurMemoryManager>>compactionIssues (in category 'compaction - analysis') ----- 
> + compactionIssues 
> +     <doNotGenerate> 
> +     "Compaction isn't working well. It rarely moves more than a few tens of kilobytes. Why? 
> +      Load an image and before you run it, or just before a GC, run these anaylsis routines. 
> +      e.g. 
> +         self abstractCompaction #(63230272 75456 63210648) 
> +      shows we can move 75456 bytes of objects, but that would use 63210648 of free space. 
> +      i.e. there are lots of big free chunks in play, not many small ones that fit the bill. 
> + 
> +         self largeFreeChunkDistribution 
> +             #(    #('16r31C788' #nil) 
> +                 #('16r1423AC0' 2061864) 
> +                 #('16r1B705E8' 1515200) 
> +                 #('16r1D31D20' 2011152) 
> +                 #('16r1F37818' 1491480) 
> +                 #('16r2225968' 1450512) 
> +                 #('16r24C92C8' 48575672) (16r24C92C8 + 48575672) hex '16r531C780' a free chunk 
> +                 #('16r531C788' #endOfMemory)) 
> +      shows there's plenty of large free chunks. And the trailing 16-byte free chunk shows coallescing is not working properly. 
> + 
> +         self biggies #(#('16r31C788' #nil) #('16r531C788' #endOfMemory)) 
> +      shows there are no large objects to be moved. 
> + 
> +      So... looks like compaction should hold onto the lowest large chunk and preferentially move objects into that. 
> +      Let's call it a pig. Compaction needs to whittle away at the pig. 
> + 
> +      e.g. 
> +         self abstractPigCompaction #(2061864 0 2061864 18759 2018224 34757) 
> +      shows we can move 18759 objects that will occupy 2018224 bytes into that 
> +      low pig of 2061864 bytes."! 
> 
> Item was added: 
> + ----- Method: SpurMemoryManager>>findAPig (in category 'compaction - analysis') ----- 
> + findAPig 
> +     "Answer a large low free chuink." 
> +     <doNotGenerate> 
> +     | pig | 
> +     self allObjectsInFreeTreeDo: 
> +         [:f| 
> +         (self bytesInObject: f) >= 1000000 ifTrue: 
> +             [(pig isNil or: [pig > f]) ifTrue: 
> +                 [pig := f]]]. 
> +     ^pig! 
> 
> Item was added: 
> + ----- Method: SpurMemoryManager>>largeFreeChunkDistribution (in category 'compaction - analysis') ----- 
> + largeFreeChunkDistribution 
> +     "This method answers a sorted collection of the free chunks >= 1,000,000 bytes long, 
> +      sandwiched between nilObj and the end of memory (ignoring the large chunk often found at the end of the heap)." 
> +     <doNotGenerate> 
> +     | freeChunks | 
> +     freeChunks := SortedCollection new. 
> +     self allObjectsInFreeTreeDo: 
> +         [:f| 
> +         ((self addressAfter: f) < endOfMemory 
> +          and: [(self bytesInObject: f) >= 1000000]) ifTrue: 
> +             [freeChunks add: f]]. 
> +     ^{{nilObj hex. #nil}}, (freeChunks collect: [:f| {f hex. self bytesInObject: f}]), {{endOfMemory hex. #endOfMemory}}! 
> 
> 


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20140214/2a372873/attachment-0001.htm


More information about the Vm-dev mailing list