Index: benchmark/io/readv.cfa
===================================================================
--- benchmark/io/readv.cfa	(revision f66605204cbdef9351e5c18bbb41c70d7643bbbb)
+++ benchmark/io/readv.cfa	(revision 171ca0ddcab2e5e9c19608a819ac47a1cff1d8cd)
@@ -30,5 +30,19 @@
 unsigned long int buflen = 50;
 
+cluster * the_cluster;
+
 thread Reader {};
+void ?{}( Reader & this ) {
+	((thread&)this){ "Reader Thread", *the_cluster };
+}
+
+struct my_processor {
+	processor p;
+};
+
+void ?{}( my_processor & this ) {
+	(this.p){ "I/O Processor", *the_cluster };
+}
+
 void main( Reader & ) {
 	while(!__atomic_load_n(&run, __ATOMIC_RELAXED)) yield();
@@ -38,5 +52,7 @@
 
 	while(__atomic_load_n(&run, __ATOMIC_RELAXED)) {
-		cfa_preadv2(fd, &iov, 1, 0, 0);
+		int r = cfa_preadv2(fd, &iov, 1, 0, 0);
+		if(r < 0) abort(strerror(-r));
+
 		__atomic_fetch_add( &count, 1, __ATOMIC_SEQ_CST );
 	}
@@ -44,8 +60,4 @@
 
 int main(int argc, char * argv[]) {
-	#if !defined(__CFA_NO_STATISTICS__)
-		print_stats_at_exit( *active_cluster() );
-	#endif
-
 	double duration   = 5.0;
 	unsigned long int nthreads = 2;
@@ -117,5 +129,5 @@
 	}
 
-	int fd = open(__FILE__, 0);
+	fd = open(__FILE__, 0);
 	if(fd < 0) {
 		fprintf(stderr, "Could not open source file\n");
@@ -125,26 +137,33 @@
 	printf("Running %lu threads over %lu processors for %lf seconds\n", nthreads, nprocs, duration);
 
-	Time start, end;
 	{
-		processor procs[nprocs - 1];
+		Time start, end;
+		cluster cl = { "IO Cluster" };
+		the_cluster = &cl;
+		#if !defined(__CFA_NO_STATISTICS__)
+			print_stats_at_exit( cl );
+		#endif
 		{
-			Reader threads[nthreads];
+			my_processor procs[nprocs];
+			{
+				Reader threads[nthreads];
 
-			printf("Starting\n");
-			start = getTime();
-			run = true;
-			do {
-				sleep(500`ms);
+				printf("Starting\n");
+				start = getTime();
+				run = true;
+				do {
+					sleep(500`ms);
+					end = getTime();
+				} while( (end - start) < duration`s );
+				run = false;
 				end = getTime();
-			} while( (end - start) < duration`s );
-			run = false;
-			end = getTime();
+				printf("Done\n");
+			}
 		}
+		printf("Took %ld ms\n", (end - start)`ms);
+		printf("Total reads:      %'zu\n", count);
+		printf("Reads per second: %'lf\n", ((double)count) / (end - start)`s);
 	}
-	printf("Took %ld ms\n", (end - start)`ms);
-	printf("Total reads:      %'zu\n", count);
-	printf("Reads per second: %'lf\n", ((double)count) / (end - start)`s);
 
 	close(fd);
-	printf("Done\n");
 }
