From: <lhe...@us...> - 2011-02-24 01:10:38
|
Revision: 16047 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=16047&view=rev Author: lhellyer Date: 2011-02-24 01:10:29 +0000 (Thu, 24 Feb 2011) Log Message: ----------- Snapshot of work for Tomas Kalibera Merge commits up to 827fe5ec2f6aaaf1044c7d3fdc693eab43b00034 Brings Sapphire up to r16046 (HEAD) of trunk Modified Paths: -------------- rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Collection.java rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ScanThread.java rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Scanning.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Phase.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Plan.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Simple.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/TraceLocal.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/concurrent/Concurrent.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/Sapphire.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/SapphireCollector.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/SapphireMutator.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostFirstPhaseFromSpaceLinearSanityScan.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostSecondPhaseFromSpaceLinearSanityScan.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostSecondPhaseToSpaceLinearSanityScan.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PreFirstPhaseFromSpaceLinearSanityScan.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PreSecondPhaseFromSpaceLinearSanityScan.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/options/ConcurrentTrigger.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/BooleanCounter.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Counter.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/EventCounter.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/LongCounter.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/PerfEvent.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/SizeCounter.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Stats.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Timer.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/vm/Collection.java rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/vm/ObjectModel.java rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/classloader/RVMArray.java rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/classloader/RVMClass.java rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/classloader/RVMType.java rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/compilers/common/CompiledMethod.java rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/mm/mminterface/SpecializedScanMethod.java rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/objectmodel/FieldLayoutPacked.java rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/scheduler/MainThread.java rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/scheduler/RVMThread.java rvmroot/branches/RVM-893-Sapphire/testing/tests/sapphire/build.xml rvmroot/branches/RVM-893-Sapphire/tools/bootImageWriter/src/org/jikesrvm/tools/bootImageWriter/BootImageWriter.java Removed Paths: ------------- rvmroot/branches/RVM-893-Sapphire/test.sh Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Collection.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Collection.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Collection.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -14,6 +14,7 @@ import org.mmtk.plan.CollectorContext; import org.mmtk.plan.MutatorContext; +import org.mmtk.utility.options.Options; import org.jikesrvm.ArchitectureSpecific; import org.jikesrvm.VM; @@ -65,29 +66,29 @@ RVMThread t = RVMThread.getCurrentThread(); t.assertAcceptableStates(RVMThread.IN_JAVA, RVMThread.IN_JAVA_TO_BLOCK); RVMThread.observeExecStatusAtSTW(t.getExecStatus()); - VM.sysWriteln("Thread # about to block for GC ", t.threadSlot); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("Thread # about to block for GC ", t.threadSlot); RVMThread.getCurrentThread().block(RVMThread.gcBlockAdapter); - VM.sysWriteln("Thread # back from blocking for GC ", t.threadSlot); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("Thread # back from blocking for GC ", t.threadSlot); } public boolean isBlockedForGC(MutatorContext m) { RVMThread t = ((Selected.Mutator) m).getThread(); if (RVMThread.gcBlockAdapter.isBlocked(t)) { - VM.sysWriteln("STW Mutator phase iterating over mutator thread ", t.threadSlot); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("STW Mutator phase iterating over mutator thread ", t.threadSlot); return true; } // something hinky going on - probably some sort of system thread if (t.isTimerThread()) { - VM.sysWriteln("STW Mutator phase iterating over timer thread ", t.threadSlot); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("STW Mutator phase iterating over timer thread ", t.threadSlot); return true; } else if (t.isCollectorThread()) { - VM.sysWriteln("STW Mutator phase iterating over collector thread ", t.threadSlot); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("STW Mutator phase iterating over collector thread ", t.threadSlot); return true; } else if (RVMThread.notRunning(t.getExecStatus())) { - VM.sysWriteln("STW Mutator phase iterating over NEW thread"); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("STW Mutator phase iterating over NEW thread"); return true; } else { - VM.sysWriteln("STW Mutator phase found a thread of unknown type or in wrong state ", t.threadSlot); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("STW Mutator phase found a thread of unknown type or in wrong state ", t.threadSlot); } return false; } @@ -165,7 +166,7 @@ if (VM.VerifyAssertions) VM._assert(execStatus != RVMThread.IN_JNI); if (VM.VerifyAssertions) VM._assert(execStatus != RVMThread.IN_NATIVE); if (execStatus == RVMThread.BLOCKED_IN_JNI) { - if (true) { + if (Options.verbose.getValue() >= 8) { VM.sysWriteln("prepareMutator for thread #", t.getThreadSlot(), " setting up JNI stack scan"); VM.sysWriteln("thread #",t.getThreadSlot()," has top java fp = ",t.getJNIEnv().topJavaFP()); } @@ -223,34 +224,42 @@ * flushed. */ @UninterruptibleNoWarn("This method is really unpreemptible, since it involves blocking") - public void requestMutatorUpdateBarriers() { + public void requestUpdateBarriers() { if (VM.VerifyAssertions) VM._assert(RVMThread.getCurrentThread().isCollectorThread(), "Designed to be called by a collector thread"); + // 1) update all threads + org.mmtk.vm.VM.activePlan.resetMutatorIterator(); + MutatorContext mutator; + while ((mutator = org.mmtk.vm.VM.activePlan.getNextMutator()) != null) { + RVMThread t = ((Selected.Mutator) mutator).getThread(); + t.insertionBarrier = MutatorContext.globalViewInsertionBarrier; + t.mutatorMustDoubleAllocate = MutatorContext.globalViewMutatorMustDoubleAllocate; + t.mutatorMustReplicate = MutatorContext.globalViewMutatorMustReplicate; + if (Options.verbose.getValue() >= 8) VM.sysWriteln("thread #", t.threadSlot, " Insertion barrier is ", t.insertionBarrier ? 1 : 0); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("thread #", t.threadSlot, " Double alloc barrier is ", t.mutatorMustDoubleAllocate ? 1 : 0); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("thread #", t.threadSlot, " Replication barrier is ", t.mutatorMustReplicate ? 1 : 0); + } + org.mmtk.vm.VM.activePlan.resetMutatorIterator(); + // 2) wait for running mutator threads to go past GC safe point RVMThread.softHandshake(mutatorUpdateBarriersVisitor); } private static RVMThread.SoftHandshakeVisitor mutatorUpdateBarriersVisitor = new RVMThread.SoftHandshakeVisitor() { @Uninterruptible public boolean checkAndSignal(RVMThread t) { - if (true) VM.sysWriteln("Requesting async update of mutator thread #", t.threadSlot, " barrier conditions"); - t.barrierUpdate = true; + if (Options.verbose.getValue() >= 8) VM.sysWriteln("Waiting on async handshake with mutator thread #", t.threadSlot, " barrier conditions"); return true; } @Uninterruptible public void notifyStuckInNative(RVMThread t) { - if (true) VM.sysWriteln("Performing update of mutator threads barrier conditions on behalf of blocked thread #", t.threadSlot, " with pthreadId ", t.pthread_id); - t.insertionBarrier = MutatorContext.globalViewInsertionBarrier; - t.mutatorMustDoubleAllocate = MutatorContext.globalViewMutatorMustDoubleAllocate; - t.mutatorMustReplicate = MutatorContext.globalViewMutatorMustReplicate; - if (true) VM.sysWriteln("Blocked thread #", t.threadSlot, " Insertion barrier is ", t.insertionBarrier ? 1 : 0); - if (true) VM.sysWriteln("Blocked thread #", t.threadSlot, " Double alloc barrier is ", t.mutatorMustDoubleAllocate ? 1 : 0); - if (true) VM.sysWriteln("Blocked thread #", t.threadSlot, " Replication barrier is ", t.mutatorMustReplicate ? 1 : 0); - t.barrierUpdate = false; + if (Options.verbose.getValue() >= 8) VM.sysWriteln("Blocked thread will see barriers correctly when it resumes thread #", t.threadSlot, " with pthreadId ", t.pthread_id); } @Uninterruptible public boolean includeThread(RVMThread t) { + if (VM.VerifyAssertions && t.isCollectorThread() && Options.verbose.getValue() >= 8) + VM.sysWriteln("mutatorUpdateBarrierVisitor ignoring GC thread #", t.threadSlot); return !t.isCollectorThread(); } }; @@ -267,14 +276,14 @@ private static RVMThread.SoftHandshakeVisitor mutatorOnTheFlyProcessVisitor = new RVMThread.SoftHandshakeVisitor() { @Uninterruptible public boolean checkAndSignal(RVMThread t) { - if (true) VM.sysWriteln("Requesting async process of on-the-fly mutator phase"); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("Requesting async process of on-the-fly mutator phase"); t.mutatorProcessPhase = true; return true; } @Uninterruptible public void notifyStuckInNative(RVMThread t) { - if (true) VM.sysWriteln("Performing process collectionPhase on behalf of blocked thread"); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("Performing process collectionPhase on behalf of blocked thread"); t.collectionPhase(onTheFlyPhase, false); // LPJH: probably shouldn't just pass false for primary t.mutatorProcessPhase = false; } Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -103,13 +103,10 @@ return MemoryManager.validRef(obj); } - public boolean interestingRef(ObjectReference obj) { - return MemoryManager.interestingRef(obj); - } - public ObjectReference fillInBlankDoubleRelica(ObjectReference from, Address toSpace, int bytes) { if (VM.VERIFY_ASSERTIONS) { VM.assertions._assert(Sapphire.inFromSpace(from)); + if (!Sapphire.inToSpace(toSpace)) Log.writeln("Argh bad toSpace address ", toSpace); VM.assertions._assert(Sapphire.inToSpace(toSpace)); } TIB tib = org.jikesrvm.objectmodel.ObjectModel.getTIB(from); Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ScanThread.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ScanThread.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ScanThread.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -28,6 +28,7 @@ import org.jikesrvm.scheduler.RVMThread; import org.mmtk.plan.TraceLocal; import org.mmtk.utility.Log; +import org.mmtk.utility.options.Options; import org.vmmagic.pragma.Inline; import org.vmmagic.pragma.Uninterruptible; import org.vmmagic.pragma.Untraced; @@ -170,7 +171,8 @@ Address gprs, Address topFrame) { // figure out if the thread should be scanned at all; if not, exit if (thread.getExecStatus()==RVMThread.NEW || thread.getIsAboutToTerminate()) { - VM.sysWriteln("scanning thread in either new or terminated state therefore ignoring #", thread.getThreadSlot(), + if (Options.verbose.getValue() >= 8) + VM.sysWriteln("scanning thread in either new or terminated state therefore ignoring #", thread.getThreadSlot(), " with pthreadID ", thread.pthread_id); return; } @@ -246,7 +248,7 @@ * performing the scan. */ private void scanThreadInternal(Address gprs, int verbosity) { - if (true) { + if (Options.verbose.getValue() >= 8) { VM.sysWriteln("Scanning thread ",thread.getThreadSlot()," from thread ",RVMThread.getCurrentThreadSlot()); } if (verbosity >= 2) { @@ -266,7 +268,7 @@ /* scan each frame if a non-empty stack */ if (fp.NE(ArchitectureSpecific.StackframeLayoutConstants.STACKFRAME_SENTINEL_FP)) { - if (true) VM.sysWriteln("There is something on the stack for thread #", thread.getThreadSlot()); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("There is something on the stack for thread #", thread.getThreadSlot()); prevFp = Address.zero(); /* At start of loop: fp -> frame for method invocation being processed @@ -280,7 +282,7 @@ fp = Magic.getCallerFramePointer(fp); } } else { - if (true) VM.sysWriteln("No FP for stack of thread #", thread.getThreadSlot()); + if (Options.verbose.getValue() >= 8) VM.sysWriteln("No FP for stack of thread #", thread.getThreadSlot()); } /* If a thread started via createVM or attachVM, base may need scaning */ Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Scanning.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Scanning.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Scanning.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -17,6 +17,7 @@ import org.mmtk.plan.TraceLocal; import org.mmtk.plan.TransitiveClosure; import org.mmtk.utility.Constants; +import org.mmtk.utility.options.Options; import org.jikesrvm.VM; import org.jikesrvm.compilers.common.CompiledMethods; @@ -191,7 +192,7 @@ RVMThread thread = RVMThread.threads[threadIndex]; if (thread == null || thread.isCollectorThread()) { - if (true && thread != null) + if (Options.verbose.getValue() > 8 && thread != null) VM.sysWriteln("Ignoring thread ", thread.getThreadSlot(), " because it is a collector thread, thread has pthreadId ", thread.pthread_id); continue; Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Phase.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Phase.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Phase.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -475,9 +475,11 @@ if (primary) { /* Only allow concurrent collection if we are not collecting due to resource exhaustion */ allowConcurrentPhase = Plan.isInternalTriggeredCollection() && !Plan.isEmergencyCollection(); - Log.write("Setting allowConcurrentPhase to "); Log.writeln(allowConcurrentPhase); - Log.write("Plan.isInternalTriggeredCollection() returned "); Log.writeln(Plan.isInternalTriggeredCollection()); - Log.write("Plan.isEmergencyCollection() returned "); Log.writeln(Plan.isEmergencyCollection()); + if (Options.verbose.getValue() >= 8) { + Log.write("Setting allowConcurrentPhase to "); Log.writeln(allowConcurrentPhase); + Log.write("Plan.isInternalTriggeredCollection() returned "); Log.writeln(Plan.isInternalTriggeredCollection()); + Log.write("Plan.isEmergencyCollection() returned "); Log.writeln(Plan.isEmergencyCollection()); + } /* First phase will be even, so we say we are odd here so that the next phase set is even*/ setNextPhase(false, getNextPhase(), false); @@ -700,19 +702,19 @@ /* Concurrent phases can not have a timer */ VM.assertions._assert(getPhase(getPhaseId(scheduledPhase)).timer == null); } - Log.write("Popped a concurrent phase "); + if (Options.verbose.getValue() >= 8) Log.write("Popped a concurrent phase "); popScheduledPhase(); ConcurrentPhase cp = (ConcurrentPhase) getPhase(phaseId); concurrentPhaseId = phaseId; // Record the phaseId for when we start running the concurrent collectors if (allowConcurrentPhase) { - Log.writeln("allowConcurrentPhase = true"); + if (Options.verbose.getValue() >= 8) Log.writeln("allowConcurrentPhase = true"); // Do any preparation for the concurrent phase int nextPhase = cp.getContinueConcurrentScheduledPhase(); if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(getSchedule(nextPhase) != SCHEDULE_CONCURRENT); pushScheduledPhase(scheduledPhase); // Push the concurrent phase back on for the next GC request pushScheduledPhase(nextPhase); // Do the concurrent phases next } else { - Log.writeln("allowConcurrentPhase = false"); + if (Options.verbose.getValue() >= 8) Log.writeln("allowConcurrentPhase = false"); // Forward to non-current phase, no more concurrent GC will happen this cycle int nextPhase = cp.getAtomicScheduledPhase(); if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(getSchedule(nextPhase) != SCHEDULE_CONCURRENT); @@ -870,13 +872,20 @@ Log.writeln(" complete >"); } /* Concurrent phase is complete*/ - Log.write("*** concurrentPhaseId was "); Log.writeln(getName(concurrentPhaseId)); + if (Options.verbose.getValue() >= 8) { + Log.write("*** concurrentPhaseId was "); + Log.writeln(getName(concurrentPhaseId)); + } concurrentPhaseId = 0; /* Remove it from the stack */ - popScheduledPhase(); + popScheduledPhase(); // LPJH: remember why this is necessary! + popScheduledPhase(); // remove the concurrent phase /* Pop the next phase off the stack */ int nextScheduledPhase = getNextPhase(); - Log.write("*** nextPhase is "); Log.writeln(getName((short) nextScheduledPhase)); + if (Options.verbose.getValue() >= 8) { + Log.write("*** nextPhase is "); + Log.writeln(getName((short) nextScheduledPhase)); + } if (nextScheduledPhase > 0) { short schedule = getSchedule(nextScheduledPhase); @@ -889,7 +898,10 @@ /* Push phase back on and resume atomic collection */ pushScheduledPhase(nextScheduledPhase); - Log.write("*** just pushed this phase back onto the stack "); Log.writeln(getName((short) nextScheduledPhase)); + if (Options.verbose.getValue() >= 8) { + Log.write("*** just pushed this phase back onto the stack "); + Log.writeln(getName((short) nextScheduledPhase)); + } Plan.triggerInternalCollectionRequest(); } return false; Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Plan.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Plan.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Plan.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -12,7 +12,6 @@ */ package org.mmtk.plan; -import org.mmtk.plan.sapphire.Sapphire; import org.mmtk.policy.MarkSweepSpace; import org.mmtk.policy.Space; import org.mmtk.policy.ImmortalSpace; @@ -836,17 +835,6 @@ * @return true if a collection is required. */ public final boolean poll(boolean spaceFull, Space space) { - if (space == Sapphire.toSpace()) { - // toSpace allocation must always succeed - logPoll(space, "To-space collection requested - ignoring request"); - return false; - } - - if (gcStatus != NOT_IN_GC) { - logPoll(space, "Collection requested whilst GC is in progess - ignoring request"); - return false; - } - if (collectionRequired(spaceFull, space)) { if (space == metaDataSpace) { /* In general we must not trigger a GC on metadata allocation since @@ -862,7 +850,7 @@ return true; } - if (concurrentCollectionRequired()) { + if (concurrentCollectionRequired(space)) { if (space == metaDataSpace) { logPoll(space, "Triggering async concurrent collection"); triggerInternalCollectionRequest(); @@ -870,8 +858,8 @@ } else { logPoll(space, "Triggering concurrent collection"); triggerInternalCollectionRequest(); - logPoll(space, "End of triggerInternalCollectionRequest(), about to return true from poll()"); - return true; + logPoll(space, "End of triggerInternalCollectionRequest(), about to return false from poll()"); + return false; } } @@ -915,7 +903,7 @@ * * @return True if a collection is requested by the plan. */ - protected boolean concurrentCollectionRequired() { + protected boolean concurrentCollectionRequired(Space space) { return false; } Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Simple.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Simple.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/Simple.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -117,16 +117,16 @@ /** Start the collection, including preparation for any collected spaces. */ protected static final short initPhase = Phase.createComplex("init", Phase.scheduleGlobal (SET_COLLECTION_KIND), - Phase.scheduleGlobal (GET_WALL_CLOCK_TIME), - Phase.scheduleGlobal (INITIATE)); +// Phase.scheduleGlobal (GET_WALL_CLOCK_TIME), + Phase.scheduleGlobal (INITIATE), + Phase.scheduleOnTheFlyMutator(PREPARE), + Phase.scheduleGlobal (PREPARE), + Phase.scheduleCollector (PREPARE)); /** * Perform the initial determination of liveness from the roots. */ protected static final short rootClosurePhase = Phase.createComplex("initial-closure", null, - Phase.scheduleOnTheFlyMutator(PREPARE), - Phase.scheduleGlobal (PREPARE), - Phase.scheduleCollector (PREPARE), Phase.scheduleComplex (prepareStacks), Phase.scheduleCollector(STACK_ROOTS), Phase.scheduleGlobal (STACK_ROOTS), @@ -174,7 +174,7 @@ Phase.scheduleCollector (COMPLETE), Phase.scheduleSTWmutator(COMPLETE), Phase.scheduleGlobal (COMPLETE), - Phase.scheduleGlobal (CONSIDER_GROW_HEAP), + // Phase.scheduleGlobal (CONSIDER_GROW_HEAP), Phase.scheduleGlobal (RESET_COLLECTION)); /** Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/TraceLocal.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/TraceLocal.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/TraceLocal.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -12,10 +12,8 @@ */ package org.mmtk.plan; -import org.mmtk.plan.sapphire.Sapphire; import org.mmtk.policy.Space; import org.mmtk.utility.Constants; -import org.mmtk.utility.ForwardingWord; import org.mmtk.utility.Log; import org.mmtk.utility.deque.*; import org.mmtk.utility.options.Options; @@ -101,29 +99,11 @@ Log.write("Obtained from source: "); Log.writeln(source); VM.assertions._assert(Space.isMappedObject(object)); } - // check if the object is one we are interested in - // if (VM.objectModel.interestingRef(object)) { - // Log.write("processEdge been asked to trace an interestingReference, current trace is ", Sapphire.currentTrace); - // Log.write(" reference comes from "); Log.write(source); - // Log.write(" and was "); Log.writeln(object); - // Log.writeln("Dumping information for source of interestingReference"); - // VM.objectModel.dumpObject(source); - // Log.writeln("Dumping information for interestingReference"); - // VM.objectModel.dumpObject(object); - // } } ObjectReference newObject = traceObject(object, false); if (overwriteReferenceDuringTrace()) { VM.activePlan.global().storeObjectReference(slot, newObject); } - if (VM.VERIFY_ASSERTIONS) { - if (VM.objectModel.interestingRef(object)) { - Log.writeln("For interestingReference traceObject in processEdge returned the following reference with current trace ", Sapphire.currentTrace); - VM.objectModel.dumpObject(newObject); - Log.writeln("Original object was"); - VM.objectModel.dumpObject(object); - } - } } /** @@ -155,24 +135,11 @@ ObjectReference object; if (untraced) object = slot.loadObjectReference(); else object = VM.activePlan.global().loadObjectReference(slot); - // if (VM.objectModel.interestingRef(object)) { - // Log.write("processRootEdge been asked to trace an interestingReference, current trace is ", Sapphire.currentTrace); - // Log.write(" and ref is "); Log.writeln(object); - // Log.writeln("Dumping information for interestingReference"); - // VM.objectModel.dumpObject(object); - // } ObjectReference newObject = traceObject(object, true); if (overwriteReferenceDuringTrace()) { if (untraced) slot.store(newObject); else VM.activePlan.global().storeObjectReference(slot, newObject); } - if (VM.objectModel.interestingRef(object)) { - Log.writeln("For interestingReference traceObject in processRootEdge returned the following reference with current trace ", - Sapphire.currentTrace); - VM.objectModel.dumpObject(newObject); - Log.writeln("Original object was"); - VM.objectModel.dumpObject(object); - } } /** Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -12,7 +12,6 @@ */ package org.mmtk.plan; -import org.mmtk.plan.sapphire.Sapphire; import org.mmtk.policy.Space; import org.mmtk.utility.Log; import org.mmtk.utility.deque.WriteBuffer; @@ -77,12 +76,6 @@ Log.writeln(object); VM.assertions._assert(Space.isMappedObject(object)); } - // check if the object is one we are interested in - // if (VM.objectModel.interestingRef(object)) { - // Log.write("processNode have been asked to trace an interestingReference, current trace is ", Sapphire.currentTrace); - // Log.write(" interesting object is "); Log.writeln(object); - // VM.objectModel.dumpObject(object); - // } } buffer.insert(object.toAddress()); } Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/concurrent/Concurrent.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/concurrent/Concurrent.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/concurrent/Concurrent.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -14,6 +14,7 @@ import org.mmtk.plan.Phase; import org.mmtk.plan.Simple; +import org.mmtk.policy.Space; import org.mmtk.utility.Log; import org.mmtk.utility.options.ConcurrentTrigger; import org.mmtk.utility.options.Options; @@ -46,7 +47,7 @@ */ protected static final short preemptConcurrentClosure = Phase.createComplex("preeempt-concurrent-trace", null, Phase.scheduleSpecial(STOP_MUTATORS), - Phase.scheduleGlobal (GET_WALL_CLOCK_TIME), + // Phase.scheduleGlobal (GET_WALL_CLOCK_TIME), Phase.scheduleOnTheFlyMutator (FLUSH_MUTATOR), Phase.scheduleCollector(CLOSURE)); // *not* overloaded (which is what we want) @@ -54,10 +55,10 @@ * When we decide to start (or continue) a concurrent collection there are some preparatory phases */ protected static final short doConcurrentTrace = Phase.createComplex("prepare-concurrent-trace", null, - Phase.scheduleGlobal (GET_WALL_CLOCK_TIME), - Phase.scheduleGlobal (CONSIDER_GROW_HEAP), + // Phase.scheduleGlobal (GET_WALL_CLOCK_TIME), + // Phase.scheduleGlobal (CONSIDER_GROW_HEAP), Phase.scheduleGlobal (RESET_COLLECTION), - Phase.scheduleSpecial(RESTART_MUTATORS), + // Phase.scheduleSpecial(RESTART_MUTATORS), Phase.scheduleYield (YIELD_TO_CONCURRENT_GC)); public static final short CONCURRENT_CLOSURE = Phase.createConcurrent("concurrent-closure", @@ -71,12 +72,12 @@ //Phase.scheduleGlobal (SET_BARRIER_ACTIVE), //Phase.scheduleOnTheFlyMutator (SET_BARRIER_ACTIVE), Phase.scheduleCollector (FLUSH_COLLECTOR), - Phase.scheduleGlobal (CONSIDER_GROW_HEAP), + // Phase.scheduleGlobal (CONSIDER_GROW_HEAP), Phase.scheduleGlobal (RESET_COLLECTION), // mutators still running here - Phase.scheduleConcurrent(CONCURRENT_CLOSURE), - Phase.scheduleSpecial (STOP_MUTATORS), - Phase.scheduleGlobal (GET_WALL_CLOCK_TIME)); + Phase.scheduleConcurrent(CONCURRENT_CLOSURE)); +// Phase.scheduleSpecial (STOP_MUTATORS)); +// Phase.scheduleGlobal (GET_WALL_CLOCK_TIME)); //Phase.scheduleGlobal (CLEAR_BARRIER_ACTIVE), //Phase.scheduleSTWmutator (CLEAR_BARRIER_ACTIVE)); @@ -175,7 +176,7 @@ * @return True if a collection is requested by the plan. */ @Override - protected boolean concurrentCollectionRequired() { + protected boolean concurrentCollectionRequired(Space space) { return !Phase.concurrentPhaseActive() && ((getPagesReserved() * 100) / getTotalPages()) > Options.concurrentTrigger.getValue(); } Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/Sapphire.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/Sapphire.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/Sapphire.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -97,9 +97,6 @@ */ collection = Phase.createComplex("collection", null, Phase.schedulePlaceholder(PRE_SANITY_PLACEHOLDER), - Phase.scheduleOnTheFlyMutator(PRE_TRACE_LINEAR_SCAN), - Phase.scheduleCollector(PRE_TRACE_LINEAR_SCAN), - Phase.scheduleGlobal(PRE_TRACE_LINEAR_SCAN), Phase.scheduleComplex(initPhase), Phase.scheduleGlobal(SAPPHIRE_PREPARE_FIRST_TRACE), Phase.scheduleComplex(rootClosurePhase), @@ -108,29 +105,23 @@ Phase.scheduleComplex(completeClosurePhase), Phase.scheduleSpecial(DISABLE_MUTATORS), // previous phases stop us but be explict about it Phase.schedulePlaceholder(POST_SANITY_PLACEHOLDER), - Phase.scheduleSTWmutator(POST_TRACE_LINEAR_SCAN), - Phase.scheduleCollector(POST_TRACE_LINEAR_SCAN), - Phase.scheduleGlobal(POST_TRACE_LINEAR_SCAN), + Phase.scheduleSTWmutator(PREPARE), // STW here to help verify mutators are stopped, change later + Phase.scheduleGlobal (PREPARE), + Phase.scheduleCollector (PREPARE), Phase.scheduleGlobal(SAPPHIRE_PREPARE_SECOND_TRACE), Phase.schedulePlaceholder(PRE_SANITY_PLACEHOLDER), - Phase.scheduleSTWmutator(PRE_TRACE_LINEAR_SCAN), - Phase.scheduleCollector(PRE_TRACE_LINEAR_SCAN), - Phase.scheduleGlobal(PRE_TRACE_LINEAR_SCAN), Phase.scheduleComplex(rootClosurePhase), Phase.scheduleComplex(refTypeClosurePhase), Phase.scheduleComplex(forwardPhase), Phase.scheduleComplex(completeClosurePhase), Phase.schedulePlaceholder(POST_SANITY_PLACEHOLDER), Phase.scheduleComplex(finishPhase), - Phase.scheduleSTWmutator(POST_TRACE_LINEAR_SCAN), - Phase.scheduleCollector(POST_TRACE_LINEAR_SCAN), - Phase.scheduleGlobal(POST_TRACE_LINEAR_SCAN), Phase.scheduleGlobal(SAPPHIRE_PREPARE_ZERO_TRACE), Phase.scheduleSpecial(ENABLE_MUTATORS)); } protected static final short insertionBarrierTerminationClosurePhase = Phase.createComplex("sapphire-insertion-barrier-termination-closure", null, - Phase.scheduleSpecial(STOP_MUTATORS), + Phase.scheduleSpecial(DISABLE_MUTATORS), Phase.scheduleOnTheFlyMutator(FLUSH_MUTATOR), Phase.scheduleComplex (prepareStacks), Phase.scheduleCollector(STACK_ROOTS), @@ -159,7 +150,7 @@ VM.assertions._assert(!globalFirstTrace.hasWork()); VM.assertions._assert(!globalSecondTrace.hasWork()); } - Log.writeln("Switching to 1st trace"); + if (Options.verbose.getValue() >= 8) Log.writeln("Switching to 1st trace"); Sapphire.currentTrace = 1; MutatorContext.globalViewInsertionBarrier = true; MutatorContext.globalViewMutatorMustDoubleAllocate = false; // must not yet turn on allocation barrier until all threads have @@ -168,11 +159,11 @@ // insertion barrier was yet turned on then references could // be hidden in these objects MutatorContext.globalViewMutatorMustReplicate = false; - if (true) Log.writeln("Global set insertion barrier about to request handshake"); - VM.collection.requestMutatorUpdateBarriers(); + if (Options.verbose.getValue() >= 8) Log.writeln("Global set insertion barrier about to request handshake"); + VM.collection.requestUpdateBarriers(); MutatorContext.globalViewMutatorMustDoubleAllocate = true; // all mutator threads have now seen insertion barrier - if (true) Log.writeln("Global set double allocation barrier about to request handshake"); - VM.collection.requestMutatorUpdateBarriers(); // all threads have now seen allocation barrier + if (Options.verbose.getValue() >= 8) Log.writeln("Global set double allocation barrier about to request handshake"); + VM.collection.requestUpdateBarriers(); // all threads have now seen allocation barrier return; } @@ -207,16 +198,20 @@ } if (phaseId == Sapphire.PREPARE) { - if (currentTrace == 1) { + if (currentTrace == 0) { // scanning for the first time fromSpace().prepare(false); // Make fromSpace non moving for first trace - } else if (currentTrace == 2) { + globalFirstTrace.prepareNonBlocking(); + } else if (currentTrace == 1) { fromSpace().prepare(true); // Make fromSpace moveable whilst GC in progress + globalSecondTrace.prepareNonBlocking(); + } else { + VM.assertions.fail("Unknown currentTrace value"); } super.collectionPhase(phaseId); - getCurrentTrace().prepareNonBlocking(); return; } + if (phaseId == CLOSURE) { return; } @@ -227,7 +222,7 @@ VM.assertions._assert(!globalFirstTrace.hasWork()); VM.assertions._assert(!globalSecondTrace.hasWork()); } - Log.writeln("Switching to 2nd trace"); + if (Options.verbose.getValue() >= 8) Log.writeln("Switching to 2nd trace"); currentTrace = 2; return; } @@ -264,7 +259,7 @@ if (phaseId == SAPPHIRE_PREPARE_ZERO_TRACE) { VM.assertions._assert(Sapphire.currentTrace == 2); - Log.writeln("Switching to 0th trace"); + if (Options.verbose.getValue() >= 8) Log.writeln("Switching to 0th trace"); Sapphire.currentTrace = 0; return; } @@ -289,9 +284,8 @@ * allocation, including space reserved for copying. */ public final int getCollectionReserve() { - // we must account for the number of pages required for copying, - // which equals the number of semi-space pages reserved - return fromSpace().reservedPages() + super.getCollectionReserve(); + // our copy reserve is the size of fromSpace less any copying we have done so far + return (fromSpace().reservedPages() - toSpace().reservedPages()) + super.getCollectionReserve(); } /** @@ -303,18 +297,25 @@ * allocation, excluding space reserved for copying. */ public int getPagesUsed() { - return super.getPagesUsed() + fromSpace().reservedPages(); + return super.getPagesUsed() + toSpace().reservedPages() + fromSpace().reservedPages(); } /** - * Return the number of pages available for allocation, <i>assuming - * all future allocation is to the semi-space</i>. + * This method controls the triggering of a GC. It is called periodically + * during allocation. Returns true to trigger a collection. * - * @return The number of pages available for allocation, <i>assuming - * all future allocation is to the semi-space</i>. + * @param spaceFull Space request failed, must recover pages within 'space'. + * @param space TODO + * @return True if a collection is requested by the plan. */ - public final int getPagesAvail() { - return(super.getPagesAvail()) >> 1; + protected boolean collectionRequired(boolean spaceFull, Space space) { + if (space == Sapphire.toSpace()) { + // toSpace allocation must always succeed + logPoll(space, "To-space collection requested - ignoring request"); + return false; + } + + return super.collectionRequired(spaceFull, space); } /** @@ -322,7 +323,13 @@ * @return True if a collection is requested by the plan. */ @Override - protected boolean concurrentCollectionRequired() { + protected boolean concurrentCollectionRequired(Space space) { + if (space == Sapphire.toSpace()) { + // toSpace allocation must always succeed + logPoll(space, "To-space collection requested - ignoring request"); + return false; + } + return !Phase.concurrentPhaseActive() && ((getPagesReserved() * 100) / getTotalPages()) > Options.concurrentTrigger.getValue(); } @@ -404,7 +411,10 @@ Phase.scheduleGlobal (SANITY_SET_PREGC), Phase.scheduleComplex (sanityBuildPhase), Phase.scheduleComplex (sanityCheckPhase), - Phase.scheduleSpecial (RESTART_MUTATORS)); + Phase.scheduleSpecial (RESTART_MUTATORS), + Phase.scheduleOnTheFlyMutator(PRE_TRACE_LINEAR_SCAN), + Phase.scheduleCollector(PRE_TRACE_LINEAR_SCAN), + Phase.scheduleGlobal(PRE_TRACE_LINEAR_SCAN)); /** Build and validate a sanity table */ protected static final short postSanityPhase = Phase.createComplex("post-sanity", null, @@ -412,9 +422,11 @@ Phase.scheduleGlobal (SANITY_SET_POSTGC), Phase.scheduleComplex (sanityBuildPhase), Phase.scheduleComplex (sanityCheckPhase), - Phase.scheduleSpecial (RESTART_MUTATORS)); + Phase.scheduleSpecial (RESTART_MUTATORS), + Phase.scheduleSTWmutator(POST_TRACE_LINEAR_SCAN), + Phase.scheduleCollector(POST_TRACE_LINEAR_SCAN), + Phase.scheduleGlobal(POST_TRACE_LINEAR_SCAN)); - /** * The processOptions method is called by the runtime immediately after command-line arguments are available. Allocation must be * supported prior to this point because the runtime infrastructure may require allocation in order to parse the command line Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/SapphireCollector.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/SapphireCollector.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/SapphireCollector.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -118,7 +118,11 @@ Plan.loSpace.initializeHeader(to, false); if (VM.VERIFY_ASSERTIONS) { // VM.assertions._assert(getCurrentTrace().isLive(from)); // FP is installed after Copy - VM.assertions._assert(getCurrentTrace().willNotMoveInCurrentCollection(to)); + if(!getCurrentTrace().willNotMoveInCurrentCollection(to)) { + Log.write("Argh postCopy assertion failure with toSpace copy "); Log.writeln(to); + Space.printVMMap(); + VM.assertions.fail("DEAD"); + } } } @@ -155,12 +159,13 @@ @Inline public void collectionPhase(short phaseId, boolean primary) { if (phaseId == Sapphire.PREPARE) { - if (Sapphire.currentTrace == 1) { - // first trace + if (Sapphire.currentTrace == 0) { + // about to first trace // rebind the copy bump pointer to the appropriate semispace. ss.rebind(Sapphire.toSpace()); } else { - // second trace + // about to second trace + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(Sapphire.currentTrace == 1); } los.prepare(true); super.collectionPhase(phaseId, primary); Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/SapphireMutator.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/SapphireMutator.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/SapphireMutator.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -19,6 +19,7 @@ import org.mmtk.utility.ForwardingWord; import org.mmtk.utility.Log; import org.mmtk.utility.alloc.Allocator; +import org.mmtk.utility.options.Options; import org.mmtk.vm.VM; import org.vmmagic.unboxed.*; @@ -99,7 +100,7 @@ * @param bytes The size of the space to be allocated (in bytes) * @param allocator The allocator number to be used for this allocation */ - // @Inline + @Inline public void postAlloc(ObjectReference object, ObjectReference typeRef, int bytes, int allocator, int align, int offset) { if (allocator == Sapphire.ALLOC_REPLICATING) { if (mutatorMustDoubleAllocate) { @@ -113,19 +114,8 @@ } } else { super.postAlloc(object, typeRef, bytes, allocator); - checkAndEnqueueReference(object); + checkAndEnqueueReference(object); // could consider using makeAllocAsMarked() but can only do so after insertion barrier is turned on } - if (VM.VERIFY_ASSERTIONS) { - if (VM.objectModel.interestingRef(object)) { - Log.write("Post alloc of interestingReference by thread #", getId()); Log.write(" object is "); Log.writeln(object); - Log.write("MutatorContext.globalViewMutatorMustDoubleAllocate is "); Log.writeln(MutatorContext.globalViewMutatorMustDoubleAllocate ? 1 :0); - Log.write("MutatorContext.globalViewMutatorInsertionBarrier is "); Log.writeln(MutatorContext.globalViewInsertionBarrier ? 1 :0); - Log.write("MutatorContext.globalViewMutatorMustReplicate is "); Log.writeln(MutatorContext.globalViewMutatorMustReplicate ? 1 :0); - Log.writeln("Insertion barrier is ", insertionBarrier ? 1 : 0); - Log.writeln("Double alloc barrier is ", mutatorMustDoubleAllocate ? 1 : 0); - Log.writeln("Replication barrier is ", mutatorMustReplicate ? 1 : 0); - } - } } /** @@ -158,9 +148,9 @@ public void collectionPhase(short phaseId, boolean primary) { if (phaseId == Sapphire.PREPARE) { super.collectionPhase(phaseId, primary); - if (Sapphire.currentTrace == 1) { + if (Sapphire.currentTrace == 0) { // first trace - } else if (Sapphire.currentTrace == 2) { + } else if (Sapphire.currentTrace == 1) { assertRemsetsFlushed(); } else { VM.assertions.fail("Unknown Sapphire.currentTrace value"); @@ -199,7 +189,7 @@ } if (phaseId == Simple.PREPARE_STACKS) { - if (true) Log.writeln("Deferring preparing stack until we want to scan thread"); + if (Options.verbose.getValue() >= 8) Log.writeln("Deferring preparing stack until we want to scan thread"); // flushRememberedSets(); // shouldn't need to do this here return; } @@ -1016,13 +1006,6 @@ } } } - - // if (VM.VERIFY_ASSERTIONS && !ref.isNull()) { - // if (VM.objectModel.interestingRef(ref)) { - // Log.write("checkAndEnqeueReference called with interesting reference for thread #", getId()); - // Log.write(" reference is "); Log.write(ref); Log.writeln(" and thread insertion barrier is ", insertionBarrier ? 1 : 0); - // } - // } } /** Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostFirstPhaseFromSpaceLinearSanityScan.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostFirstPhaseFromSpaceLinearSanityScan.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostFirstPhaseFromSpaceLinearSanityScan.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -56,10 +56,6 @@ Log.writeln(" contained references to toSpace"); VM.assertions.fail("Died during linear sanity scan"); } - // if (VM.objectModel.interestingRef(object)) { - // Log.writeln("PostFirstPhaseFromSpaceLinearSanityScan found interesting reference details are:"); - // VM.objectModel.dumpObject(object); - // } } } } Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostSecondPhaseFromSpaceLinearSanityScan.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostSecondPhaseFromSpaceLinearSanityScan.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostSecondPhaseFromSpaceLinearSanityScan.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -46,10 +46,6 @@ Log.writeln(" contained references to toSpace"); VM.assertions.fail("Died during linear sanity scan"); } - // if (VM.objectModel.interestingRef(object)) { - // Log.writeln("PostSecondPhaseFromSpaceLinearSanityScan found interesting reference details are:"); - // VM.objectModel.dumpObject(object); - // } } } } Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostSecondPhaseToSpaceLinearSanityScan.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostSecondPhaseToSpaceLinearSanityScan.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PostSecondPhaseToSpaceLinearSanityScan.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -30,11 +30,6 @@ * The object to scan */ public void scan(ObjectReference object) { - // run in a STW phase - flip has occurred - if (VM.VERIFY_ASSERTIONS) { - if (!object.isNull()) { - VM.assertions.fail("Old fromSpace should have been released"); - } - } + // run in a STW phase - flip has occurred but we might not yet have released the space } } Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PreFirstPhaseFromSpaceLinearSanityScan.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PreFirstPhaseFromSpaceLinearSanityScan.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PreFirstPhaseFromSpaceLinearSanityScan.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -14,7 +14,6 @@ import org.mmtk.plan.sapphire.Sapphire; import org.mmtk.utility.ForwardingWord; -import org.mmtk.utility.Log; import org.mmtk.utility.alloc.LinearScan; import org.mmtk.vm.VM; import org.vmmagic.unboxed.*; @@ -40,10 +39,6 @@ VM.assertions._assert(!ForwardingWord.isForwarded(object)); // should not be marked forwarded VM.assertions._assert(ForwardingWord.getReplicaPointer(object).isNull()); // should not have a FP VM.objectModel.checkFromSpaceNotYetReplicatedObject(object); // check object is allow in fromSpace - // if (VM.objectModel.interestingRef(object)) { - // Log.writeln("PreFirstPhaseFromSpaceLinearSanityScan found interesting reference details are:"); - // VM.objectModel.dumpObject(object); - // } } } } Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PreSecondPhaseFromSpaceLinearSanityScan.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PreSecondPhaseFromSpaceLinearSanityScan.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/plan/sapphire/sanityChecking/PreSecondPhaseFromSpaceLinearSanityScan.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -56,10 +56,6 @@ Log.writeln(" contained references to toSpace"); VM.assertions.fail("Died during linear sanity scan"); } - // if (VM.objectModel.interestingRef(object)) { - // Log.writeln("PreSecondPhaseFromSpaceLinearSanityScan found interesting reference details are:"); - // VM.objectModel.dumpObject(object); - // } } } } Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/options/ConcurrentTrigger.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/options/ConcurrentTrigger.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/options/ConcurrentTrigger.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -22,7 +22,7 @@ public ConcurrentTrigger() { super(Options.set, "Concurrent Trigger", "Concurrent trigger percentage", - 30); + 10); } /** Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/BooleanCounter.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/BooleanCounter.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/BooleanCounter.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -22,7 +22,8 @@ * This class implements a simple boolean counter (counting number of * phases where some boolean event is true). */ -@Uninterruptible public class BooleanCounter extends Counter { +@Uninterruptible +public class BooleanCounter extends Counter { /**************************************************************************** * @@ -73,8 +74,6 @@ public BooleanCounter(String name, boolean start, boolean mergephases) { super(name, start, mergephases); state = new boolean[Stats.MAX_PHASES]; - for (int i = 0; i < Stats.MAX_PHASES; i++) - state[i] = false; } /**************************************************************************** Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Counter.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Counter.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Counter.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -18,7 +18,8 @@ * * This abstract class describes the interface of a generic counter. */ -@Uninterruptible public abstract class Counter { +@Uninterruptible +public abstract class Counter { /**************************************************************************** * Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/EventCounter.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/EventCounter.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/EventCounter.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -22,7 +22,8 @@ * This class implements a simple event counter (counting number * events that occur for each phase). */ -@Uninterruptible public class EventCounter extends Counter { +@Uninterruptible +public class EventCounter extends Counter { /**************************************************************************** * Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/LongCounter.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/LongCounter.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/LongCounter.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -22,7 +22,8 @@ * This abstract class implements a simple counter (counting some * integer (long) value for each phase). */ -@Uninterruptible public abstract class LongCounter extends Counter { +@Uninterruptible +public abstract class LongCounter extends Counter { /**************************************************************************** * Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/PerfEvent.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/PerfEvent.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/PerfEvent.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -42,9 +42,6 @@ private static final int TIME_ENABLED = 1; private static final int TIME_RUNNING = 2; - /** Three 64 bit values is 24 bytes */ - private static final int BYTES_TO_READ = 24; - /** True if any data was scaled */ public static boolean dataWasScaled = false; Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/SizeCounter.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/SizeCounter.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/SizeCounter.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -22,7 +22,8 @@ * The counter is trivially composed from two event counters (one for * counting the number of events, the other for counting the volume). */ -@Uninterruptible public class SizeCounter { +@Uninterruptible +public class SizeCounter { /**************************************************************************** * Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Stats.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Stats.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Stats.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -25,7 +25,8 @@ /** * This class implements basic statistics functionality */ -@Uninterruptible public class Stats { +@Uninterruptible +public class Stats { /**************************************************************************** * Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Timer.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Timer.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/utility/statistics/Timer.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -20,7 +20,8 @@ /** * This class implements a simple timer. */ -@Uninterruptible public class Timer extends LongCounter { +@Uninterruptible +public class Timer extends LongCounter { /**************************************************************************** * Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/vm/Collection.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/vm/Collection.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/vm/Collection.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -98,7 +98,7 @@ */ public abstract void requestMutatorFlush(); - public abstract void requestMutatorUpdateBarriers(); + public abstract void requestUpdateBarriers(); public abstract void requestMutatorOnTheFlyProcessPhase(short phaseId); Modified: rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/vm/ObjectModel.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/vm/ObjectModel.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/MMTk/src/org/mmtk/vm/ObjectModel.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -38,8 +38,6 @@ public abstract boolean validRef(ObjectReference obj); - public abstract boolean interestingRef(ObjectReference obj); - /** * Copy an object to be pointer to by the to address. This is required * for delayed-copy collectors such as compacting collectors. During the Modified: rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/classloader/RVMArray.java =================================================================== --- rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/classloader/RVMArray.java 2011-02-23 00:29:57 UTC (rev 16046) +++ rvmroot/branches/RVM-893-Sapphire/rvm/src/org/jikesrvm/classloader/RVMArray.java 2011-02-24 01:10:29 UTC (rev 16047) @@ -13,6 +13,7 @@ package org.jikesrvm.classloader; import static org.jikesrvm.mm.mminterface.Barriers.*; + import org.jikesrvm.ArchitectureSpecific; import org.jikesrvm.VM; import org.jikesrvm.Constants; @@ -460,6 +461,10 @@ // RCGC: Array is acyclic if i... [truncated message content] |