Index: src/benchmark/csv-data.c
===================================================================
--- src/benchmark/csv-data.c	(revision 4cedd9fd7388881d56f46c8b5b5520dee1f9e9b2)
+++ src/benchmark/csv-data.c	(revision a5b7905d626e51a2c959ddc46ed61c06d1e970c7)
@@ -28,5 +28,5 @@
 // coroutine context switch
 long long int measure_coroutine() {
-	const unsigned int NoOfTimes = N;
+	const unsigned int NoOfTimes = 50000000;
 	long long int StartTime, EndTime;
 
@@ -43,5 +43,5 @@
 // thread context switch
 long long int measure_thread() {
-	const unsigned int NoOfTimes = N;
+	const unsigned int NoOfTimes = 50000000;
 	long long int StartTime, EndTime;
 
@@ -61,5 +61,5 @@
 
 long long int measure_1_monitor_entry() {
-	const unsigned int NoOfTimes = N;
+	const unsigned int NoOfTimes = 5000000;
 	long long int StartTime, EndTime;
 	mon_t mon;
@@ -79,5 +79,5 @@
 
 long long int measure_2_monitor_entry() {
-	const unsigned int NoOfTimes = N;
+	const unsigned int NoOfTimes = 5000000;
 	long long int StartTime, EndTime;
 	mon_t mon1, mon2;
@@ -94,4 +94,6 @@
 //-----------------------------------------------------------------------------
 // single internal sched entry
+const unsigned int NoOfTimes = 500000;
+
 mon_t mon1;
 
@@ -107,4 +109,5 @@
 
 void side1A( mon_t & mutex a, long long int * out ) {
+	const unsigned int NoOfTimes = 500000;
 	long long int StartTime, EndTime;
 
@@ -112,10 +115,10 @@
 	for( int i = 0;; i++ ) {
 		signal(cond1a);
-		if( i > N ) break;
+		if( i > NoOfTimes ) break;
 		wait(cond1b);
 	}
 	EndTime = Time();
 
-	*out = ( EndTime - StartTime ) / N;
+	*out = ( EndTime - StartTime ) / NoOfTimes;
 }
 
@@ -141,5 +144,5 @@
 
 //-----------------------------------------------------------------------------
-// multi internal sched entry
+// multi internal sched
 mon_t mon2;
 
@@ -155,4 +158,5 @@
 
 void side2A( mon_t & mutex a, mon_t & mutex b, long long int * out ) {
+	const unsigned int NoOfTimes = 500000;
 	long long int StartTime, EndTime;
 
@@ -160,10 +164,10 @@
 	for( int i = 0;; i++ ) {
 		signal(cond2a);
-		if( i > N ) break;
+		if( i > NoOfTimes ) break;
 		wait(cond2b);
 	}
 	EndTime = Time();
 
-	*out = ( EndTime - StartTime ) / N;
+	*out = ( EndTime - StartTime ) / NoOfTimes;
 }
 
@@ -189,13 +193,84 @@
 
 //-----------------------------------------------------------------------------
+// single external sched
+
+volatile int go = 0;
+
+void __attribute__((noinline)) call( mon_t & mutex m1 ) {}
+
+long long int  __attribute__((noinline)) wait( mon_t & mutex m1 ) {
+	go = 1;
+	const unsigned int NoOfTimes = 5000000;
+	long long int StartTime, EndTime;
+
+	StartTime = Time();
+	for (size_t i = 0; i < NoOfTimes; i++) {
+		waitfor(call, m1);
+	}
+
+	EndTime = Time();
+	go = 0;
+	return ( EndTime - StartTime ) / NoOfTimes;
+}
+
+thread thrd3 {};
+void ^?{}( thrd3 & mutex this ) {}
+void main( thrd3 & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(mon1); }
+
+}
+
+long long int measure_1_sched_ext() {
+	go = 0;
+	thrd3 t;
+	return wait(mon1);
+}
+
+//-----------------------------------------------------------------------------
+// multi external sched
+
+void __attribute__((noinline)) call( mon_t & mutex m1, mon_t & mutex m2 ) {}
+
+long long int  __attribute__((noinline)) wait( mon_t & mutex m1, mon_t & mutex m2 ) {
+	go = 1;
+	const unsigned int NoOfTimes = 5000000;
+	long long int StartTime, EndTime;
+
+	StartTime = Time();
+	for (size_t i = 0; i < NoOfTimes; i++) {
+		waitfor(call, m1, m2);
+	}
+
+	EndTime = Time();
+	go = 0;
+	return ( EndTime - StartTime ) / NoOfTimes;
+}
+
+thread thrd4 {};
+void ^?{}( thrd4 & mutex this ) {}
+void main( thrd4 & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(mon1, mon2); }
+
+}
+
+long long int measure_2_sched_ext() {
+	go = 0;
+	thrd3 t;
+	return wait(mon1, mon2);
+}
+
+//-----------------------------------------------------------------------------
 // main loop
 int main()
 {
-	sout | time(NULL) | ',';
-	sout | measure_coroutine() | ',';
-	sout | measure_thread() | ',';
-	sout | measure_1_monitor_entry() | ',';
-	sout | measure_2_monitor_entry() | ',';
-	sout | measure_1_sched_int() | ',';
-	sout | measure_2_sched_int() | endl;
-}
+	sout | "\tepoch:" | time(NULL) | ',' | endl;
+	sout | "\tctxswitch: {" | endl;
+	sout | "\t\tcoroutine: "| measure_coroutine() | ',' | endl;
+	sout | "\t\tthread:" | measure_thread() | ',' | endl;
+	sout | "\t}," | endl;
+	sout | "\tmutex: [" 	| measure_1_monitor_entry() 	| ',' | measure_2_monitor_entry() 	| "]," | endl;
+	sout | "\tscheduling: ["| measure_1_sched_int() 	| ',' | measure_2_sched_int() 	| ','  |
+					  measure_1_sched_ext() 	| ',' | measure_2_sched_ext() 	| "]," | endl;
+}
