--- sys/kern/kern_clock.c.orig 2016-01-29 15:18:38.057157685 +0100 +++ sys/kern/kern_clock.c 2016-04-01 18:52:35.239191642 +0200 @@ -696,10 +696,14 @@ { statclock_cnt(1, usermode); } +static int cp_time_mode = 0; +SYSCTL_INT(_kern, OID_AUTO, cp_time_mode, CTLFLAG_RW, &cp_time_mode, 0, + "Charge idle threads as: 0=user (default), 1=nice (server), 2=idle (desktop/mobile)"); + void statclock_cnt(int cnt, int usermode) { struct rusage *ru; struct vmspace *vm; @@ -715,11 +719,14 @@ if (usermode) { /* * Charge the time as appropriate. */ td->td_uticks += cnt; - if (p->p_nice > NZERO) + if (cp_time_mode == 2 && td->td_pri_class == PRI_IDLE) + cp_time[CP_IDLE] += cnt; + else if (p->p_nice > NZERO || + (cp_time_mode == 1 && td->td_pri_class == PRI_IDLE)) cp_time[CP_NICE] += cnt; else cp_time[CP_USER] += cnt; } else { /*