[Vm-dev] VM Maker: VMMaker.oscog-cb.2419.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Jul 3 09:01:54 UTC 2018
ClementBera uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-cb.2419.mcz
==================== Summary ====================
Name: VMMaker.oscog-cb.2419
Author: cb
Time: 3 July 2018, 11:01:23.189761 am
UUID: 7d60e922-f6a4-4659-9f35-87fcec6a3b93
Ancestors: VMMaker.oscog-topa.2418
Added stats for Marking time and sweep time in full GC. Make them available as vm parameters 72 and 73.
Now we have:
fullGCTime = markingTime + scavengeTime + compactionTime
With all but scavenge time available, but can be computed in-image from the 3 others.
We note that compactionTime includes sweepTime for convenience. Depending on the compactor used, we have:
Planning -> sweepTime = 0.
Sweeper -> sweepTime = compactionTime.
Selective -> selectiveCompactionTime = compactionTime - sweepTime
=============== Diff against VMMaker.oscog-topa.2418 ===============
Item was added:
+ ----- Method: ObjectMemory>>statMarkUsecs (in category 'accessing') -----
+ statMarkUsecs
+ ^ 0!
Item was added:
+ ----- Method: ObjectMemory>>statSweepUsecs (in category 'accessing') -----
+ statSweepUsecs
+ ^ 0!
Item was changed:
CogClass subclass: #SpurMemoryManager
(excessive size, no diff calculated)
Item was changed:
----- Method: SpurMemoryManager>>fullGC (in category 'gc - global') -----
fullGC
"Perform a full lazy compacting GC. Answer the size of the largest free chunk."
<returnTypeC: #usqLong>
<inline: #never> "for profiling"
needGCFlag := false.
gcStartUsecs := coInterpreter ioUTCMicrosecondsNow.
statMarkCount := 0.
coInterpreter preGCAction: GCModeFull.
self globalGarbageCollect.
coInterpreter postGCAction: GCModeFull.
- statFullGCs := statFullGCs + 1.
statGCEndUsecs := coInterpreter ioUTCMicrosecondsNow.
+ self updateFullGCStats.
- statFullGCUsecs := statFullGCUsecs + (statGCEndUsecs - gcStartUsecs).
- statCompactionUsecs := statCompactionUsecs + (statGCEndUsecs - compactionStartUsecs).
^(freeLists at: 0) ~= 0
ifTrue: [self bytesInObject: self findLargestFreeChunk]
ifFalse: [0]!
Item was changed:
----- Method: SpurMemoryManager>>globalGarbageCollect (in category 'gc - global') -----
globalGarbageCollect
<inline: true> "inline into fullGC"
self assert: self validObjStacks.
self assert: (self isEmptyObjStack: markStack).
self assert: (self isEmptyObjStack: weaklingStack).
"Mark objects /before/ scavenging, to empty the rememberedTable of unmarked roots."
self markObjects: true.
+ gcMarkEndUsecs := coInterpreter ioUTCMicrosecondsNow.
+
-
scavenger forgetUnmarkedRememberedObjects.
self doScavenge: MarkOnTenure.
"Mid-way the leak check must be more lenient. Unmarked classes will have been
expunged from the table, but unmarked instances will not yet have been reclaimed."
self runLeakCheckerFor: GCModeFull
excludeUnmarkedObjs: true
classIndicesShouldBeValid: true.
compactionStartUsecs := coInterpreter ioUTCMicrosecondsNow.
segmentManager prepareForGlobalSweep. "for notePinned:"
compactor compact.
self attemptToShrink.
self setHeapSizeAtPreviousGC.
self assert: self validObjStacks.
self assert: (self isEmptyObjStack: markStack).
self assert: (self isEmptyObjStack: weaklingStack).
self assert: self allObjectsUnmarked.
self runLeakCheckerFor: GCModeFull!
Item was changed:
----- Method: SpurMemoryManager>>initialize (in category 'initialization') -----
initialize
"We can put all initializations that set something to 0 or to false here.
In C all global variables are initialized to 0, and 0 is false."
remapBuffer := Array new: RemapBufferSize.
remapBufferCount := extraRootCount := 0. "see below"
freeListsMask := totalFreeOldSpace := lowSpaceThreshold := 0.
checkForLeaks := 0.
needGCFlag := signalLowSpace := marking := false.
becomeEffectsFlags := gcPhaseInProgress := 0.
statScavenges := statIncrGCs := statFullGCs := 0.
+ statMarkUsecs := statSweepUsecs := statScavengeGCUsecs := statIncrGCUsecs := statFullGCUsecs := statCompactionUsecs := statGCEndUsecs := gcSweepEndUsecs := 0.
- statScavengeGCUsecs := statIncrGCUsecs := statFullGCUsecs := statCompactionUsecs := statGCEndUsecs := 0.
statSGCDeltaUsecs := statIGCDeltaUsecs := statFGCDeltaUsecs := 0.
statGrowMemory := statShrinkMemory := statRootTableCount := statAllocatedBytes := 0.
statRootTableOverflows := statMarkCount := statCompactPassCount := statCoalesces := 0.
"We can initialize things that are allocated but are lazily initialized."
unscannedEphemerons := SpurContiguousObjStack new.
"we can initialize things that are virtual in C."
scavenger := SpurGenerationScavenger simulatorClass new manager: self; yourself.
segmentManager := SpurSegmentManager simulatorClass new manager: self; yourself.
compactor := self class compactorClass simulatorClass new manager: self; yourself.
"We can also initialize here anything that is only for simulation."
heapMap := CogCheck32BitHeapMap new.
"N.B. We *don't* initialize extraRoots because we don't simulate it."
maxOldSpaceSize := self class initializationOptions
ifNotNil: [:initOpts| initOpts at: #maxOldSpaceSize ifAbsent: [0]]
ifNil: [0]!
Item was added:
+ ----- Method: SpurMemoryManager>>statMarkUsecs (in category 'accessing') -----
+ statMarkUsecs
+ ^statMarkUsecs!
Item was added:
+ ----- Method: SpurMemoryManager>>statSweepUsecs (in category 'accessing') -----
+ statSweepUsecs
+ ^statSweepUsecs!
Item was added:
+ ----- Method: SpurMemoryManager>>updateFullGCStats (in category 'gc - global') -----
+ updateFullGCStats
+ "Stats updated (since VM start-up):
+ 1) number of full GCs,
+ 2) time spent in full GC,
+ 3) time spent in compaction (included in 2)
+ 4) time spent in sweep phase (included in 2 & 3, 0 if no sweep phase)
+ 5) time spent in mark phase (included in 2)"
+ statFullGCs := statFullGCs + 1.
+ statFullGCUsecs := statFullGCUsecs + (statGCEndUsecs - gcStartUsecs).
+ statCompactionUsecs := statCompactionUsecs + (statGCEndUsecs - compactionStartUsecs).
+ gcSweepEndUsecs = 0 ifFalse: [statSweepUsecs := statSweepUsecs + (gcSweepEndUsecs - compactionStartUsecs)].
+ statMarkUsecs := statMarkUsecs + (gcMarkEndUsecs - gcStartUsecs).!
Item was added:
+ ----- Method: SpurMemoryManager>>updateSweepEndUsecs (in category 'accessing') -----
+ updateSweepEndUsecs
+ gcSweepEndUsecs := coInterpreter ioUTCMicrosecondsNow.!
Item was changed:
----- Method: SpurSelectiveCompactor>>compact (in category 'api') -----
compact
<inline: #never> "for profiling, though we profile selectiveCompaction and sweep separatly."
self resetFreeLists.
self freePastSegmentsAndSetSegmentToFill.
self globalSweepAndSegmentOccupationAnalysis.
+ manager updateSweepEndUsecs.
self selectiveCompaction.
!
Item was changed:
----- Method: SpurSweeper>>compact (in category 'api') -----
compact
<inline: #never> "for profiling"
self resetFreeLists.
+ self globalSweep.
+ manager updateSweepEndUsecs!
- self globalSweep!
Item was changed:
----- Method: StackInterpreterPrimitives>>primitiveVMParameter (in category 'system control primitives') -----
(excessive size, no diff calculated)
More information about the Vm-dev
mailing list