[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