summaryrefslogtreecommitdiff
path: root/rts
diff options
context:
space:
mode:
authordonnie@darthik.com <unknown>2009-04-03 03:30:25 +0000
committerdonnie@darthik.com <unknown>2009-04-03 03:30:25 +0000
commite8d7985d56595f6b8004546bedc41627ca70c528 (patch)
tree0e64ccc292ee511027f61ff1831c3e2016c09169 /rts
parent2a21b894d36ad83797bd46aa683297c3d466d3bb (diff)
downloadhaskell-e8d7985d56595f6b8004546bedc41627ca70c528.tar.gz
Eventlog support for new event type: create spark.
Diffstat (limited to 'rts')
-rw-r--r--rts/Capability.c9
-rw-r--r--rts/Schedule.c5
-rw-r--r--rts/Sparks.c3
-rw-r--r--rts/eventlog/EventLog.c5
4 files changed, 20 insertions, 2 deletions
diff --git a/rts/Capability.c b/rts/Capability.c
index 05e9126420..fcfca3c733 100644
--- a/rts/Capability.c
+++ b/rts/Capability.c
@@ -79,6 +79,10 @@ findSpark (Capability *cap)
spark = tryStealSpark(cap);
if (spark != NULL) {
cap->sparks_converted++;
+
+ // Post event for running a spark from capability's own pool.
+ postEvent(cap, EVENT_RUN_SPARK, cap->r.rCurrentTSO->id, 0);
+
return spark;
}
@@ -113,6 +117,11 @@ findSpark (Capability *cap)
"cap %d: Stole a spark from capability %d",
cap->no, robbed->no);
cap->sparks_converted++;
+
+ postEvent(cap, EVENT_STEAL_SPARK,
+ cap->r.rCurrentTSO->id, robbed->no);
+
+
return spark;
}
// otherwise: no success, try next one
diff --git a/rts/Schedule.c b/rts/Schedule.c
index 141c973f3a..e82115bc29 100644
--- a/rts/Schedule.c
+++ b/rts/Schedule.c
@@ -858,7 +858,7 @@ schedulePushWork(Capability *cap USED_IF_THREADS,
debugTrace(DEBUG_sched, "pushing thread %lu to capability %d", (unsigned long)t->id, free_caps[i]->no);
appendToRunQueue(free_caps[i],t);
- postEvent (cap, EVENT_MIGRATE_THREAD, t->id, free_caps[i]->no);
+ postEvent (cap, EVENT_MIGRATE_THREAD, t->id, free_caps[i]->no);
if (t->bound) { t->bound->cap = free_caps[i]; }
t->cap = free_caps[i];
@@ -881,6 +881,9 @@ schedulePushWork(Capability *cap USED_IF_THREADS,
spark = tryStealSpark(cap->sparks);
if (spark != NULL) {
debugTrace(DEBUG_sched, "pushing spark %p to capability %d", spark, free_caps[i]->no);
+
+ postEvent(free_caps[i], EVENT_STEAL_SPARK, t->id, cap->no);
+
newSpark(&(free_caps[i]->r), spark);
}
}
diff --git a/rts/Sparks.c b/rts/Sparks.c
index 3fccdb6da9..aed75e52ab 100644
--- a/rts/Sparks.c
+++ b/rts/Sparks.c
@@ -57,6 +57,7 @@ createSparkThread (Capability *cap)
tso = createIOThread (cap, RtsFlags.GcFlags.initialStkSize,
&base_GHCziConc_runSparks_closure);
+
appendToRunQueue(cap,tso);
}
@@ -83,6 +84,8 @@ newSpark (StgRegTable *reg, StgClosure *p)
cap->sparks_created++;
+ postEvent(cap, EVENT_CREATE_SPARK, reg->rCurrentTSO->id, 0);
+
return 1;
}
diff --git a/rts/eventlog/EventLog.c b/rts/eventlog/EventLog.c
index 820e95cef1..341123530c 100644
--- a/rts/eventlog/EventLog.c
+++ b/rts/eventlog/EventLog.c
@@ -48,7 +48,8 @@ char *EventDesc[] = {
"Request sequential GC",
"Request parallel GC",
"Starting GC",
- "Finished GC"
+ "Finished GC",
+ "Create spark"
};
// Event type.
@@ -176,6 +177,7 @@ initEventLogging(void)
case EVENT_CREATE_THREAD: // (cap, thread)
case EVENT_RUN_THREAD: // (cap, thread)
case EVENT_THREAD_RUNNABLE: // (cap, thread)
+ case EVENT_CREATE_SPARK: // (cap, thread)
case EVENT_RUN_SPARK: // (cap, thread)
eventTypes[t].size = sizeof(CapabilityNum) + sizeof(ThreadID);
break;
@@ -298,6 +300,7 @@ postEvent_(Capability *cap, EventTypeNum tag, StgThreadID thread, nat other_cap)
case EVENT_CREATE_THREAD: // (cap, thread)
case EVENT_RUN_THREAD: // (cap, thread)
case EVENT_THREAD_RUNNABLE: // (cap, thread)
+ case EVENT_CREATE_SPARK: // (cap, thread)
case EVENT_RUN_SPARK: // (cap, thread)
{
postWord64(eb,thread);