ClementBera uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-cb.2391.mcz ==================== Summary ==================== Name: VMMaker.oscog-cb.2391 Author: cb Time: 30 May 2018, 1:25:41.60048 pm UUID: 512c06ed-a9e4-42b9-ad6b-52590c7e5c42 Ancestors: VMMaker.oscog-cb.2390 Fixed a bug in Selective Compactor where remembered objects were incorrectly copied. Finally hard stressing benchs pass... Now reworking with production images. I need to move everything to 64 bits (Running an image up to 30Gb). =============== Diff against VMMaker.oscog-cb.2390 =============== Item was changed: ----- Method: SpurSelectiveCompactor>>compactSegment:freeStart: (in category 'compaction') ----- compactSegment: segInfo freeStart: initialFreeStart <var: 'segInfo' type: #'SpurSegmentInfo *'> + | currentEntity fillStart bytesToCopy bridge copy | - | currentEntity fillStart bytesToCopy numSlots bridge | fillStart := initialFreeStart. bridge := manager segmentManager bridgeFor: segInfo. currentEntity := manager objectStartingAt: segInfo segStart. [self oop: currentEntity isLessThan: bridge] whileTrue: [(manager isFreeObject: currentEntity) ifTrue: ["To avoid confusing too much Spur (especially the leak/free checks), we mark the free chunk as a word object." manager detachFreeObject: currentEntity. manager set: currentEntity classIndexTo: manager wordSizeClassIndexPun formatTo: manager wordIndexableFormat] ifFalse: ["Copy the object in segmentToFill and replace it by a forwarder." self assert: (manager isPinned: currentEntity) not. - numSlots := manager numSlotsOfAny: currentEntity. bytesToCopy := manager bytesInObject: currentEntity. manager mem: fillStart asVoidPointer cp: (manager startOfObject: currentEntity) asVoidPointer y: bytesToCopy. + copy := manager objectStartingAt: fillStart. + (manager isRemembered: copy) ifTrue: + ["copy has the remembered bit set, but is not in the remembered table." + manager setIsRememberedOf: copy to: false. + scavenger remember: copy]. manager forward: currentEntity to: (manager objectStartingAt: fillStart). fillStart := fillStart + bytesToCopy. self assert: (self oop: fillStart isLessThan: (segmentToFill segLimit - manager bridgeSize))]. currentEntity := manager objectAfter: currentEntity limit: manager endOfMemory]. self assert: currentEntity = bridge. - - "| beingCompacted sz | - beingCompacted := OrderedCollection new. - sz := 0. - 0 to: manager numSegments - 1 do: - [:i| | segInfo | - segInfo := self addressOf: (manager segmentManager segments at: i). - (self isSegmentBeingCompacted: segInfo) ifTrue: [beingCompacted add: segInfo]]. - Transcript show: 'Segment being compacted: ' , - (beingCompacted collect: [:seg | - sz := sz + (self sizeClaimedIn: seg). - (manager segmentManager indexOfSegment: seg) printString , - ' sizeClaimed: ' , (self sizeClaimedIn: seg). - ]) asArray printString. - Transcript cr; show: 'Claimed size: '. - Transcript show: sz. - Transcript cr; show: 'SegToFill size: '. - Transcript show: segmentToFill segSize . - Transcript cr; show: 'SegToFill limit: '. - Transcript show: segmentToFill segLimit - manager bridgeSize . - Transcript cr; show: 'fillStart: '. - Transcript show: fillStart. - - Transcript show: 'Normally grow up to ' , (segmentToFill segStart + sz) printString." - ^ fillStart! |
Free forum by Nabble | Edit this page |