don't back down quite so quick. let the system be idle for 5 ticks before clocking down.
Index: sched_bsd.c =================================================================== RCS file: /cvs/src/sys/kern/sched_bsd.c,v retrieving revision 1.38 diff -u -p -r1.38 sched_bsd.c --- sched_bsd.c 3 Nov 2014 03:08:00 -0000 1.38 +++ sched_bsd.c 11 Nov 2014 02:09:42 -0000 @@ -586,6 +586,7 @@ void setperf_auto(void *v) { static uint64_t *idleticks, *totalticks; + static int downbeats; int i, j; int speedup; @@ -628,11 +629,13 @@ setperf_auto(void *v) } if (allidle < alltotal / 2) speedup = 1; + if (speedup) + downbeats = 5; if (speedup && perflevel != 100) { perflevel = 100; cpu_setperf(perflevel); - } else if (!speedup && perflevel != 0) { + } else if (!speedup && perflevel != 0 && --downbeats <= 0) { perflevel = 0; cpu_setperf(perflevel); }