Index: kernel/generic/include/func.h
===================================================================
--- kernel/generic/include/func.h	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/generic/include/func.h	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -49,4 +49,5 @@
 extern void strncpy(char *dest, const char *src, size_t len);
 extern unative_t atoi(const char *text);
+extern void order(const uint64_t val, uint64_t *rv, char *suffix);
 
 #endif
Index: kernel/generic/src/console/cmd.c
===================================================================
--- kernel/generic/src/console/cmd.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/generic/src/console/cmd.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -117,4 +117,23 @@
 	.argc = 1,
 	.argv = test_argv
+};
+
+static int cmd_bench(cmd_arg_t *argv);
+static cmd_arg_t bench_argv[] = {
+	{
+		.type = ARG_TYPE_STRING,
+		.buffer = test_buf,
+		.len = sizeof(test_buf)
+	},
+	{
+		.type = ARG_TYPE_INT,
+	}
+};
+static cmd_info_t bench_info = {
+	.name = "bench",
+	.description = "Run kernel test as benchmark.",
+	.func = cmd_bench,
+	.argc = 2,
+	.argv = bench_argv
 };
 #endif
@@ -412,4 +431,5 @@
 	&tests_info,
 	&test_info,
+	&bench_info,
 #endif
 	NULL
@@ -872,5 +892,5 @@
 	
 	/* Execute the test */
-	char * ret = test->entry();
+	char * ret = test->entry(false);
 	
 	/* Update and read thread accounting */
@@ -881,5 +901,9 @@
 	interrupts_restore(ipl);
 	
-	printf("Time: %llu cycles\n", dt);
+	uint64_t cycles;
+	char suffix;
+	order(dt, &cycles, &suffix);
+		
+	printf("Time: %llu%c cycles\n", cycles, suffix);
 	
 	if (ret == NULL) {
@@ -890,4 +914,70 @@
 	printf("%s\n", ret);
 	return false;
+}
+
+static bool run_bench(const test_t *test, const uint32_t cnt)
+{
+	uint32_t i;
+	bool ret = true;
+	uint64_t cycles;
+	char suffix;
+	
+	if (cnt < 1)
+		return true;
+	
+	uint64_t *data = malloc(sizeof(uint64_t) * cnt, 0);
+	if (data == NULL) {
+		printf("Error allocating memory for statistics\n");
+		return false;
+	}
+	
+	for (i = 0; i < cnt; i++) {
+		printf("%s (%d/%d) ... ", test->name, i + 1, cnt);
+		
+		/* Update and read thread accounting
+		   for benchmarking */
+		ipl_t ipl = interrupts_disable();
+		spinlock_lock(&TASK->lock);
+		uint64_t t0 = task_get_accounting(TASK);
+		spinlock_unlock(&TASK->lock);
+		interrupts_restore(ipl);
+		
+		/* Execute the test */
+		char * ret = test->entry(true);
+		
+		/* Update and read thread accounting */
+		ipl = interrupts_disable();
+		spinlock_lock(&TASK->lock);
+		uint64_t dt = task_get_accounting(TASK) - t0;
+		spinlock_unlock(&TASK->lock);
+		interrupts_restore(ipl);
+		
+		if (ret != NULL) {
+			printf("%s\n", ret);
+			ret = false;
+			break;
+		}
+		
+		data[i] = dt;
+		order(dt, &cycles, &suffix);
+		printf("OK (%llu%c cycles)\n", cycles, suffix);
+	}
+	
+	if (ret) {
+		printf("\n");
+		
+		uint64_t sum = 0;
+		
+		for (i = 0; i < cnt; i++) {
+			sum += data[i];
+		}
+		
+		order(sum / (uint64_t) cnt, &cycles, &suffix);
+		printf("Average\t\t%llu%c\n", cycles, suffix);
+	}
+	
+	free(data);
+	
+	return ret;
 }
 
@@ -927,4 +1017,32 @@
 	return 1;
 }
+
+/** Command for returning kernel tests as benchmarks
+ *
+ * @param argv Argument vector.
+ *
+ * return Always 1.
+ */
+int cmd_bench(cmd_arg_t *argv)
+{
+	test_t *test;
+	uint32_t cnt = argv[1].intval;
+	
+	bool fnd = false;
+	
+	for (test = tests; test->name != NULL; test++) {
+		if (strcmp(test->name, argv->buffer) == 0) {
+			fnd = true;
+			run_bench(test, cnt);
+			break;
+		}
+	}
+		
+	if (!fnd)
+		printf("Unknown test\n");
+
+	return 1;
+}
+
 #endif
 
Index: kernel/generic/src/lib/func.c
===================================================================
--- kernel/generic/src/lib/func.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/generic/src/lib/func.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -222,4 +222,22 @@
 }
 
+
+void order(const uint64_t val, uint64_t *rv, char *suffix)
+{
+	if (val > 1000000000000000000LL) {
+		*rv = val / 1000000000000000000LL;
+		*suffix = 'E';
+	} else if (val > 1000000000000LL) {
+		*rv = val / 1000000000000LL;
+		*suffix = 'T';
+	} else if (val > 1000000LL) {
+		*rv = val / 1000000LL;
+		*suffix = 'M';
+	} else {
+		*rv = val;
+		*suffix = ' ';
+	}
+}
+
 /** @}
  */
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/generic/src/proc/task.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -53,4 +53,5 @@
 #include <lib/elf.h>
 #include <errno.h>
+#include <func.h>
 #include <syscall/copy.h>
 #include <console/klog.h>
@@ -392,18 +393,7 @@
 			spinlock_lock(&t->lock);
 			
-			uint64_t cycles = task_get_accounting(t);
+			uint64_t cycles;
 			char suffix;
-			
-			if (cycles > 1000000000000000000LL) {
-				cycles = cycles / 1000000000000000000LL;
-				suffix = 'E';
-			} else if (cycles > 1000000000000LL) {
-				cycles = cycles / 1000000000000LL;
-				suffix = 'T';
-			} else if (cycles > 1000000LL) {
-				cycles = cycles / 1000000LL;
-				suffix = 'M';
-			} else 
-				suffix = ' ';
+			order(task_get_accounting(t), &cycles, &suffix);
 			
 			printf("%-6lld %-10s %-3ld %#10zx %#10zx %9llu%c %7zd %6zd", t->taskid, t->name, t->context, t, t->as, cycles, suffix, t->refcount, atomic_get(&t->active_calls));
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/generic/src/proc/thread.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -570,18 +570,5 @@
 			uint64_t cycles;
 			char suffix;
-			
-			if (t->cycles > 1000000000000000000LL) {
-				cycles = t->cycles / 1000000000000000000LL;
-				suffix = 'E';
-			} else if (t->cycles > 1000000000000LL) {
-				cycles = t->cycles / 1000000000000LL;
-				suffix = 'T';
-			} else if (t->cycles > 1000000LL) {
-				cycles = t->cycles / 1000000LL;
-				suffix = 'M';
-			} else {
-				cycles = t->cycles;
-				suffix = ' ';
-			}
+			order(t->cycles, &cycles, &suffix);
 			
 			printf("%-6zd %-10s %#10zx %-8s %#10zx %-3ld %#10zx %#10zx %9llu%c ", t->tid, t->name, t, thread_states[t->state], t->task, t->task->context, t->thread_code, t->kstack, cycles, suffix);
Index: kernel/test/atomic/atomic1.c
===================================================================
--- kernel/test/atomic/atomic1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/atomic/atomic1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -32,5 +32,5 @@
 #include <debug.h>
 
-char * test_atomic1(void)
+char * test_atomic1(bool quiet)
 {
 	atomic_t a;
Index: kernel/test/btree/btree1.c
===================================================================
--- kernel/test/btree/btree1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/btree/btree1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -34,5 +34,5 @@
 static void *data = (void *) 0xdeadbeef;
 
-char * test_btree1(void)
+char * test_btree1(bool quiet)
 {
 	btree_t t;
@@ -40,6 +40,7 @@
 
 	btree_create(&t);
-
-	printf("Inserting keys.\n");
+	
+	if (!quiet)
+		printf("Inserting keys.\n");
 	btree_insert(&t, 19, data, NULL);
 	btree_insert(&t, 20, data, NULL);
@@ -77,8 +78,10 @@
 	for (i = 100; i >= 50; i--)
 		btree_insert(&t, i, data, NULL);
-
-	btree_print(&t);
 	
-	printf("Removing keys.\n");
+	if (!quiet)
+		btree_print(&t);
+	
+	if (!quiet)
+		printf("Removing keys.\n");
 	btree_remove(&t, 50, NULL);
 	btree_remove(&t, 49, NULL);
@@ -155,6 +158,7 @@
 	btree_remove(&t, 35, NULL);
 	btree_remove(&t, 36, NULL);
-
-	btree_print(&t);
+	
+	if (!quiet)
+		btree_print(&t);
 	
 	return NULL;
Index: kernel/test/debug/mips1.c
===================================================================
--- kernel/test/debug/mips1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/debug/mips1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -39,5 +39,5 @@
 #include <arch.h>
 
-char * test_mips1(void)
+char * test_mips1(bool quiet)
 {
 	printf("You should enter kconsole debug mode now.\n");
Index: kernel/test/fault/fault1.c
===================================================================
--- kernel/test/fault/fault1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/fault/fault1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -38,5 +38,5 @@
 
 
-char * test_fault1(void)
+char * test_fault1(bool quiet)
 {
 	((int *)(0))[1] = 0;
Index: kernel/test/fpu/fpu1.c
===================================================================
--- kernel/test/fpu/fpu1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/fpu/fpu1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -174,5 +174,5 @@
 }
 
-char * test_fpu1(void)
+char * test_fpu1(bool quiet)
 {
 	unsigned int i, total = 0;
Index: kernel/test/fpu/mips2.c
===================================================================
--- kernel/test/fpu/mips2.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/fpu/mips2.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -111,5 +111,5 @@
 
 
-char * test_mips2(void)
+char * test_mips2(bool quiet)
 {
 	unsigned int i, total = 0;
Index: kernel/test/fpu/sse1.c
===================================================================
--- kernel/test/fpu/sse1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/fpu/sse1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -110,5 +110,5 @@
 
 
-char * test_sse1(void)
+char * test_sse1(bool quiet)
 {
 	unsigned int i, total = 0;
Index: kernel/test/mm/falloc1.c
===================================================================
--- kernel/test/mm/falloc1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/mm/falloc1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -41,5 +41,5 @@
 #define TEST_RUNS 2
 
-char * test_falloc1(void) {
+char * test_falloc1(bool quiet) {
 	uintptr_t * frames = (uintptr_t *) malloc(MAX_FRAMES * sizeof(uintptr_t), 0);
 	int results[MAX_ORDER + 1];
Index: kernel/test/mm/falloc2.c
===================================================================
--- kernel/test/mm/falloc2.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/mm/falloc2.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -100,5 +100,5 @@
 }
 
-char * test_falloc2(void)
+char * test_falloc2(bool quiet)
 {
 	unsigned int i;
Index: kernel/test/mm/mapping1.c
===================================================================
--- kernel/test/mm/mapping1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/mm/mapping1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -42,5 +42,5 @@
 #define VALUE1	0x89abcdef
 
-char * test_mapping1(void)
+char * test_mapping1(bool quiet)
 {
 	uintptr_t frame0, frame1;
Index: kernel/test/mm/purge1.c
===================================================================
--- kernel/test/mm/purge1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/mm/purge1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -42,5 +42,5 @@
 extern void tlb_invalidate_pages(asid_t asid, uintptr_t va, count_t cnt);
 
-char * test_purge1(void)
+char * test_purge1(bool quiet)
 {
 	tlb_entry_t entryi;
Index: kernel/test/mm/slab1.c
===================================================================
--- kernel/test/mm/slab1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/mm/slab1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -153,5 +153,5 @@
 }
 
-char * test_slab1(void)
+char * test_slab1(bool quiet)
 {
 	testsimple();
Index: kernel/test/mm/slab2.c
===================================================================
--- kernel/test/mm/slab2.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/mm/slab2.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -206,5 +206,5 @@
 }
 
-char * test_slab2(void)
+char * test_slab2(bool quiet)
 {
 	printf("Running reclaim single-thread test .. pass 1\n");
Index: kernel/test/print/print1.c
===================================================================
--- kernel/test/print/print1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/print/print1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -31,5 +31,5 @@
 #define BUFFER_SIZE 32
 
-char * test_print1(void)
+char * test_print1(bool quiet)
 {
 	int retval;
Index: kernel/test/synch/rwlock1.c
===================================================================
--- kernel/test/synch/rwlock1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/synch/rwlock1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -41,5 +41,5 @@
 static rwlock_t rwlock;
 
-char * test_rwlock1(void)
+char * test_rwlock1(bool quiet)
 {
 	rwlock_initialize(&rwlock);
Index: kernel/test/synch/rwlock2.c
===================================================================
--- kernel/test/synch/rwlock2.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/synch/rwlock2.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -56,5 +56,5 @@
 }
 
-char * test_rwlock2(void)
+char * test_rwlock2(bool quiet)
 {
 	thread_t *thrd;
Index: kernel/test/synch/rwlock3.c
===================================================================
--- kernel/test/synch/rwlock3.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/synch/rwlock3.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -56,5 +56,5 @@
 }
 
-char * test_rwlock3(void)
+char * test_rwlock3(bool quiet)
 {
 	int i;
Index: kernel/test/synch/rwlock4.c
===================================================================
--- kernel/test/synch/rwlock4.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/synch/rwlock4.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -114,5 +114,5 @@
 }
 
-char * test_rwlock4(void)
+char * test_rwlock4(bool quiet)
 {
 	context_t ctx;
Index: kernel/test/synch/rwlock5.c
===================================================================
--- kernel/test/synch/rwlock5.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/synch/rwlock5.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -67,5 +67,5 @@
 }
 
-char * test_rwlock5(void)
+char * test_rwlock5(bool quiet)
 {
 	int i, j, k;
Index: kernel/test/synch/semaphore1.c
===================================================================
--- kernel/test/synch/semaphore1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/synch/semaphore1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -70,5 +70,5 @@
 }
 
-char * test_semaphore1(void)
+char * test_semaphore1(bool quiet)
 {
 	int i, j, k;
Index: kernel/test/synch/semaphore2.c
===================================================================
--- kernel/test/synch/semaphore2.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/synch/semaphore2.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -82,5 +82,5 @@
 }
 
-char * test_semaphore2(void)
+char * test_semaphore2(bool quiet)
 {
 	uint32_t i, k;
Index: kernel/test/sysinfo/sysinfo1.c
===================================================================
--- kernel/test/sysinfo/sysinfo1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/sysinfo/sysinfo1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -33,5 +33,5 @@
 #include <sysinfo/sysinfo.h>
 
-char * test_sysinfo1(void)
+char * test_sysinfo1(bool quiet)
 {
 	sysinfo_dump(NULL, 0);
Index: kernel/test/test.h
===================================================================
--- kernel/test/test.h	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/test.h	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -39,5 +39,5 @@
 #include <typedefs.h>
 
-typedef char * (* test_entry_t)();
+typedef char * (* test_entry_t)(bool);
 
 typedef struct {
@@ -48,27 +48,27 @@
 } test_t;
 
-extern char * test_atomic1(void);
-extern char * test_btree1(void);
-extern char * test_mips1(void);
-extern char * test_fault1(void);
-extern char * test_fpu1(void);
-extern char * test_sse1(void);
-extern char * test_mips2(void);
-extern char * test_falloc1(void);
-extern char * test_falloc2(void);
-extern char * test_mapping1(void);
-extern char * test_purge1(void);
-extern char * test_slab1(void);
-extern char * test_slab2(void);
-extern char * test_rwlock1(void);
-extern char * test_rwlock2(void);
-extern char * test_rwlock3(void);
-extern char * test_rwlock4(void);
-extern char * test_rwlock5(void);
-extern char * test_semaphore1(void);
-extern char * test_semaphore2(void);
-extern char * test_print1(void);
-extern char * test_thread1(void);
-extern char * test_sysinfo1(void);
+extern char * test_atomic1(bool quiet);
+extern char * test_btree1(bool quiet);
+extern char * test_mips1(bool quiet);
+extern char * test_fault1(bool quiet);
+extern char * test_fpu1(bool quiet);
+extern char * test_sse1(bool quiet);
+extern char * test_mips2(bool quiet);
+extern char * test_falloc1(bool quiet);
+extern char * test_falloc2(bool quiet);
+extern char * test_mapping1(bool quiet);
+extern char * test_purge1(bool quiet);
+extern char * test_slab1(bool quiet);
+extern char * test_slab2(bool quiet);
+extern char * test_rwlock1(bool quiet);
+extern char * test_rwlock2(bool quiet);
+extern char * test_rwlock3(bool quiet);
+extern char * test_rwlock4(bool quiet);
+extern char * test_rwlock5(bool quiet);
+extern char * test_semaphore1(bool quiet);
+extern char * test_semaphore2(bool quiet);
+extern char * test_print1(bool quiet);
+extern char * test_thread1(bool quiet);
+extern char * test_sysinfo1(bool quiet);
 
 extern test_t tests[];
Index: kernel/test/thread/thread1.c
===================================================================
--- kernel/test/thread/thread1.c	(revision 7e7c8747752c7ffe6c991792c4afdde7b1128b58)
+++ kernel/test/thread/thread1.c	(revision 95155b0cd020d126e09ca42230ae0a4dce3f296c)
@@ -53,5 +53,5 @@
 }
 
-char * test_thread1(void)
+char * test_thread1(bool quiet)
 {
 	unsigned int i, total = 0;
