Index: kernel/generic/src/cpu/cpu.c
===================================================================
--- kernel/generic/src/cpu/cpu.c	(revision 944f2cabb1486d36083818853bbff23141ff6e5e)
+++ kernel/generic/src/cpu/cpu.c	(revision 0655d642d150a8d458a716d13c8fdca59b3c41ff)
@@ -74,4 +74,6 @@
 			
 			cpus[i].id = i;
+			cpus[i].idle_ticks = 0;
+			cpus[i].busy_ticks = 0;
 			
 			spinlock_initialize(&cpus[i].lock, "cpu_t.lock");
Index: kernel/generic/src/proc/scheduler.c
===================================================================
--- kernel/generic/src/proc/scheduler.c	(revision 944f2cabb1486d36083818853bbff23141ff6e5e)
+++ kernel/generic/src/proc/scheduler.c	(revision 0655d642d150a8d458a716d13c8fdca59b3c41ff)
@@ -202,4 +202,5 @@
 		 */
 
+		 CPU->idle = true;
 		 cpu_sleep();
 		 goto loop;
Index: kernel/generic/src/ps/load.c
===================================================================
--- kernel/generic/src/ps/load.c	(revision 944f2cabb1486d36083818853bbff23141ff6e5e)
+++ kernel/generic/src/ps/load.c	(revision 0655d642d150a8d458a716d13c8fdca59b3c41ff)
@@ -37,5 +37,4 @@
 
 #include <proc/thread.h>
-#include <print.h>
 #include <ps/load.h>
 #include <arch.h>
@@ -117,5 +116,4 @@
 	while (true) {
 		calc_load_global();
-		printf("Computed loads: 0x%x 0x%x 0x%x\n", avenrun[0], avenrun[1], avenrun[2]);
 		thread_sleep(LOAD_FREQ);
 	}
Index: kernel/generic/src/time/clock.c
===================================================================
--- kernel/generic/src/time/clock.c	(revision 944f2cabb1486d36083818853bbff23141ff6e5e)
+++ kernel/generic/src/time/clock.c	(revision 0655d642d150a8d458a716d13c8fdca59b3c41ff)
@@ -137,4 +137,13 @@
 	size_t missed_clock_ticks = CPU->missed_clock_ticks;
 	unsigned int i;
+
+	/* Account lost ticks to CPU usage */
+	if (CPU->idle) {
+		ASSERT(missed_clock_ticks == 0);
+		CPU->idle_ticks++;
+	} else {
+		CPU->busy_ticks += missed_clock_ticks + 1;
+	}
+	CPU->idle = false;
 
 	/*
