Skip to content

Commit 2edf45c

Browse files
RVM-1013, MMTk Harness improvements Jan 2013
1 parent 6c9b8ef commit 2edf45c

File tree

109 files changed

+3018
-599
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+3018
-599
lines changed

.hgignore

+3
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,6 @@ syntax:regexp
3232
^results
3333
^target
3434

35+
36+
syntax: regexp
37+
^test-output$

MMTk/ext/vm/harness/org/mmtk/harness/vm/Collection.java

+17
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,25 @@
2121
import org.mmtk.plan.MutatorContext;
2222

2323
import org.vmmagic.pragma.*;
24+
import org.vmmagic.unboxed.harness.Clock;
2425

2526
@Uninterruptible
2627
public class Collection extends org.mmtk.vm.Collection {
2728

29+
private static int gcCount = 0;
30+
31+
public static int getGcCount() {
32+
return gcCount;
33+
}
34+
2835
@Override
2936
public void prepareMutator(MutatorContext m) {
3037
// Nothing to do
3138
}
3239

3340
@Override
3441
public void requestMutatorFlush() {
42+
Mutator.current().getContext().flush();
3543
Assert.notImplemented();
3644
}
3745

@@ -51,7 +59,10 @@ public boolean yieldpoint() {
5159
*/
5260
@Override
5361
public void blockForGC() {
62+
gcCount++;
63+
Clock.stop();
5464
Scheduler.waitForGC();
65+
Clock.start();
5566
}
5667

5768
/**
@@ -76,16 +87,22 @@ public void outOfMemory() {
7687

7788
@Override
7889
public void spawnCollectorContext(CollectorContext context) {
90+
Clock.stop();
7991
Scheduler.scheduleCollector(context);
92+
Clock.start();
8093
}
8194

8295
@Override
8396
public void stopAllMutators() {
97+
Clock.stop();
8498
Scheduler.stopAllMutators();
99+
Clock.start();
85100
}
86101

87102
@Override
88103
public void resumeAllMutators() {
104+
Clock.stop();
89105
Scheduler.resumeAllMutators();
106+
Clock.start();
90107
}
91108
}

MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java

+60-14
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.mmtk.plan.TraceLocal;
2020
import org.vmmagic.unboxed.Address;
2121
import org.vmmagic.unboxed.ObjectReference;
22+
import org.vmmagic.unboxed.harness.Clock;
2223

2324
/**
2425
* Debugger support for the MMTk harness
@@ -44,36 +45,67 @@ private String format(Address addr) {
4445
return ObjectModel.addressAndSpaceString(addr);
4546
}
4647

48+
/**
49+
* @see org.mmtk.vm.Debug#arrayRemsetEntry(org.vmmagic.unboxed.Address, org.vmmagic.unboxed.Address)
50+
*/
4751
@Override
4852
public void arrayRemsetEntry(Address start, Address guard) {
49-
Trace.trace(Item.REMSET, "arrayRemset: [%s,%s)", start, guard);
53+
if (Trace.isEnabled(Item.REMSET)) {
54+
Clock.stop();
55+
Trace.trace(Item.REMSET, "arrayRemset: [%s,%s)", start, guard);
56+
Clock.start();
57+
}
5058
}
5159

60+
/**
61+
* @see org.mmtk.vm.Debug#modbufEntry(org.vmmagic.unboxed.ObjectReference)
62+
*/
5263
@Override
5364
public void modbufEntry(ObjectReference object) {
54-
Trace.trace(Item.REMSET, "modbuf: %s", format(object));
65+
if (Trace.isEnabled(Item.REMSET)) {
66+
Clock.stop();
67+
Trace.trace(Item.REMSET, "modbuf: %s", format(object));
68+
Clock.start();
69+
}
5570
}
5671

72+
/**
73+
* @see org.mmtk.vm.Debug#remsetEntry(org.vmmagic.unboxed.Address)
74+
*/
5775
@Override
5876
public void remsetEntry(Address slot) {
59-
try {
60-
Trace.trace(Item.REMSET, "remset: %s->%s", format(slot), format(slot.loadObjectReference()));
61-
} catch (Throwable e) {
62-
System.err.printf("Error encountered processing remset entry %s%n", slot);
63-
throw new RuntimeException(e);
77+
if (Trace.isEnabled(Item.REMSET)) {
78+
Clock.stop();
79+
Trace.trace(Item.REMSET, "remset: %s->%s", format(slot), format(slot.loadObjectReference()));
80+
Clock.start();
6481
}
6582
}
6683

84+
/**
85+
* @see org.mmtk.vm.Debug#globalPhase(short, boolean)
86+
*/
6787
@Override
6888
public void globalPhase(short phaseId, boolean before) {
89+
Clock.stop();
6990
if (phaseId == Simple.RELEASE && before) {
7091
new FromSpaceInvariant();
7192
}
93+
if (phaseId == Simple.COMPLETE && !before) {
94+
Scanning.releaseThreads();
95+
}
96+
Clock.start();
7297
}
7398

99+
/**
100+
* @see org.mmtk.vm.Debug#traceObject(org.mmtk.plan.TraceLocal, org.vmmagic.unboxed.ObjectReference)
101+
*/
74102
@Override
75103
public void traceObject(TraceLocal trace, ObjectReference object) {
76-
Trace.trace(Item.TRACEOBJECT, "traceObject: %s", format(object));
104+
if (Trace.isEnabled(Item.TRACEOBJECT)) {
105+
Clock.stop();
106+
Trace.trace(Item.TRACEOBJECT, "traceObject: %s", format(object));
107+
Clock.start();
108+
}
77109
}
78110

79111
/**
@@ -82,7 +114,11 @@ public void traceObject(TraceLocal trace, ObjectReference object) {
82114
*/
83115
@Override
84116
public void queueHeadInsert(String queueName, Address value) {
85-
Trace.trace(Item.QUEUE, "head insert %s to %s", value, queueName);
117+
if (Trace.isEnabled(Item.QUEUE)) {
118+
Clock.stop();
119+
Trace.trace(Item.QUEUE, "head insert %s to %s", value, queueName);
120+
Clock.start();
121+
}
86122
}
87123

88124
/**
@@ -91,7 +127,11 @@ public void queueHeadInsert(String queueName, Address value) {
91127
*/
92128
@Override
93129
public void queueHeadRemove(String queueName, Address value) {
94-
Trace.trace(Item.QUEUE, "head remove %s from %s", value, queueName);
130+
if (Trace.isEnabled(Item.QUEUE)) {
131+
Clock.stop();
132+
Trace.trace(Item.QUEUE, "head remove %s from %s", value, queueName);
133+
Clock.start();
134+
}
95135
}
96136

97137
/**
@@ -100,7 +140,11 @@ public void queueHeadRemove(String queueName, Address value) {
100140
*/
101141
@Override
102142
public void queueTailInsert(String queueName, Address value) {
103-
Trace.trace(Item.QUEUE, "tail insert %s to %s", value, queueName);
143+
if (Trace.isEnabled(Item.QUEUE)) {
144+
Clock.stop();
145+
Trace.trace(Item.QUEUE, "tail insert %s to %s", value, queueName);
146+
Clock.start();
147+
}
104148
}
105149

106150
/**
@@ -109,8 +153,10 @@ public void queueTailInsert(String queueName, Address value) {
109153
*/
110154
@Override
111155
public void queueTailRemove(String queueName, Address value) {
112-
Trace.trace(Item.QUEUE, "tail remove %s from %s", value, queueName);
156+
if (Trace.isEnabled(Item.QUEUE)) {
157+
Clock.stop();
158+
Trace.trace(Item.QUEUE, "tail remove %s from %s", value, queueName);
159+
Clock.start();
160+
}
113161
}
114-
115-
116162
}

MMTk/ext/vm/harness/org/mmtk/harness/vm/Memory.java

+30-8
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public class Memory extends org.mmtk.vm.Memory {
4545
* TODO is this comment in the right place?
4646
*/
4747
private static ImmortalSpace vmSpace = null;
48-
private static Extent VMSPACE_SIZE = Extent.fromIntZeroExtend(0x10000000);
48+
49+
private static final Extent vmSpaceSize = Extent.fromIntZeroExtend(0x10000000);
4950

5051
// Uncomment the below to exercise MMTk's 64-bit address space handling
5152

@@ -56,14 +57,14 @@ public class Memory extends org.mmtk.vm.Memory {
5657
// Address.fromIntZeroExtend(0xA0000000) :
5758
// Address.fromLong(0x2A0000000L);
5859

59-
public static final Address HEAP_START = Address.fromIntZeroExtend(0x10000000);
60-
public static final Address HEAP_END = Address.fromIntZeroExtend(0xA0000000);
60+
private static final Address heapStartAddress = Address.fromIntZeroExtend(0x10000000);
61+
private static final Address heapEndAddress = Address.fromIntZeroExtend(0x40000000);
6162

6263
@Override
6364
@Interruptible
6465
public ImmortalSpace getVMSpace() {
6566
if (vmSpace == null) {
66-
vmSpace = new ImmortalSpace("vm", VMRequest.create(VMSPACE_SIZE, false));
67+
vmSpace = new ImmortalSpace("vm", VMRequest.create(getVmspacesize(), false));
6768
}
6869
return vmSpace;
6970
}
@@ -141,13 +142,13 @@ public void isync() {
141142
* called by MMTk users.
142143
*/
143144
@Override
144-
protected Address getHeapStartConstant() { return HEAP_START; }
145+
protected Address getHeapStartConstant() { return getHeapstartaddress(); }
145146
@Override
146-
protected Address getHeapEndConstant() { return HEAP_END; }
147+
protected Address getHeapEndConstant() { return getHeapendaddress(); }
147148
@Override
148-
protected Address getAvailableStartConstant() { return HEAP_START.plus(VMSPACE_SIZE); }
149+
protected Address getAvailableStartConstant() { return getHeapstartaddress().plus(getVmspacesize()); }
149150
@Override
150-
protected Address getAvailableEndConstant() { return HEAP_END; }
151+
protected Address getAvailableEndConstant() { return getHeapendaddress(); }
151152
@Override
152153
protected byte getLogBytesInAddressConstant() { return (byte) MemoryConstants.LOG_BYTES_IN_WORD; }
153154
@Override
@@ -162,4 +163,25 @@ public void isync() {
162163
protected int getMaxBytesPaddingConstant() { return MemoryConstants.BYTES_IN_WORD; }
163164
@Override
164165
protected int getAlignmentValueConstant() { return ObjectModel.ALIGNMENT_VALUE; }
166+
167+
/**
168+
* @return the vmspacesize
169+
*/
170+
public static Extent getVmspacesize() {
171+
return vmSpaceSize;
172+
}
173+
174+
/**
175+
* @return the heapstartaddress
176+
*/
177+
public static Address getHeapstartaddress() {
178+
return heapStartAddress;
179+
}
180+
181+
/**
182+
* @return the heapendaddress
183+
*/
184+
public static Address getHeapendaddress() {
185+
return heapEndAddress;
186+
}
165187
}

0 commit comments

Comments
 (0)