for reference, i use this. faster query interval and when not idle, slam
high immediately.

Index: apmd.c
===================================================================
RCS file: /cvs/src/usr.sbin/apmd/apmd.c,v
retrieving revision 1.63
diff -u -p -r1.63 apmd.c
--- apmd.c      13 Nov 2013 04:50:21 -0000      1.63
+++ apmd.c      1 Jul 2014 01:16:29 -0000
@@ -65,8 +65,8 @@ int doperf = PERF_NONE;
 #define PERFDEC 20
 #define PERFMIN 0
 #define PERFMAX 100
-#define PERFINCTHRES 10
-#define PERFDECTHRES 30
+#define PERFINCTHRES 50
+#define PERFDECTHRES 60
 
 extern char *__progname;
 
@@ -339,9 +339,7 @@ perf_status(struct apm_power_info *pinfo
                syslog(LOG_INFO, "cannot read hw.setperf");
 
        if (forcehi || (avg_idle < PERFINCTHRES && perf < PERFMAX)) {
-               perf += PERFINC;
-               if (perf > PERFMAX)
-                       perf = PERFMAX;
+               perf = PERFMAX;
                setperf(perf);
        } else if (avg_idle > PERFDECTHRES && perf > PERFMIN) {
                perf -= PERFDEC;
@@ -643,11 +641,12 @@ main(int argc, char *argv[])
                sts = ts;
 
                if (doperf == PERF_AUTO || doperf == PERF_COOL) {
-                       sts.tv_sec = 1;
+                       sts.tv_sec = 0;
+                       sts.tv_nsec = 200000000;
                        perf_status(&pinfo, ncpu);
                }
 
-               apmtimeout += sts.tv_sec;
+               apmtimeout += 1;
                if ((rv = kevent(kq, NULL, 0, ev, 1, &sts)) < 0)
                        break;
 

Reply via email to