[Vm-dev] VM Maker: VMMaker.oscog-cb.2391.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed May 30 11:26:15 UTC 2018
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!
More information about the Vm-dev
mailing list