Author: mjg
Date: Tue Nov 13 19:20:57 2012
New Revision: 242991
URL: http://svnweb.freebsd.org/changeset/base/242991

Log:
  MFC r242372:
  atrun(8): scale default load average limit with the number of CPUs
  
  Previously atrun refused to run jobs if load average was not below fixed 
limit of 1.5.
  
  PR:           173175
  Approved by:  trasz (mentor)

Modified:
  stable/8/libexec/atrun/atrun.c
  stable/8/libexec/atrun/atrun.man
Directory Properties:
  stable/8/libexec/atrun/   (props changed)

Modified: stable/8/libexec/atrun/atrun.c
==============================================================================
--- stable/8/libexec/atrun/atrun.c      Tue Nov 13 19:17:21 2012        
(r242990)
+++ stable/8/libexec/atrun/atrun.c      Tue Nov 13 19:20:57 2012        
(r242991)
@@ -33,6 +33,9 @@ static const char rcsid[] =
 #include <sys/fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#ifdef __FreeBSD__
+#include <sys/sysctl.h>
+#endif
 #include <sys/wait.h>
 #include <sys/param.h>
 #include <ctype.h>
@@ -461,7 +464,12 @@ main(int argc, char *argv[])
     gid_t batch_gid;
     int c;
     int run_batch;
+#ifdef __FreeBSD__
+    size_t ncpu, ncpusz;
+    double load_avg = -1;
+#else
     double load_avg = LOADAVG_MX;
+#endif
 
 /* We don't need root privileges all the time; running under uid and gid daemon
  * is fine.
@@ -479,8 +487,10 @@ main(int argc, char *argv[])
        case 'l': 
            if (sscanf(optarg, "%lf", &load_avg) != 1)
                perr("garbled option -l");
+#ifndef __FreeBSD__
            if (load_avg <= 0.)
                load_avg = LOADAVG_MX;
+#endif
            break;
 
        case 'd':
@@ -496,6 +506,15 @@ main(int argc, char *argv[])
     if (chdir(ATJOB_DIR) != 0)
        perr("cannot change to %s", ATJOB_DIR);
 
+#ifdef __FreeBSD__
+    if (load_avg <= 0.) {
+       ncpusz = sizeof(size_t);
+       if (sysctlbyname("hw.ncpu", &ncpu, &ncpusz, NULL, 0) < 0)
+               ncpu = 1;
+       load_avg = LOADAVG_MX * ncpu;
+    }
+#endif
+
     /* Main loop. Open spool directory for reading and look over all the
      * files in there. If the filename indicates that the job should be run
      * and the x bit is set, fork off a child which sets its user and group

Modified: stable/8/libexec/atrun/atrun.man
==============================================================================
--- stable/8/libexec/atrun/atrun.man    Tue Nov 13 19:17:21 2012        
(r242990)
+++ stable/8/libexec/atrun/atrun.man    Tue Nov 13 19:20:57 2012        
(r242991)
@@ -1,5 +1,5 @@
 .\" $FreeBSD$
-.Dd June 17, 2007
+.Dd October 30, 2012
 .Dt ATRUN 8
 .Os
 .Sh NAME
@@ -45,7 +45,7 @@ e.g., locked out or expired.
 .Bl -tag -width indent
 .It Fl l Ar load_avg
 Specify a limiting load factor, over which batch jobs should
-not be run, instead of the compiled in default of 1.5.
+not be run, instead of the default of 1.5 * number of active CPUs.
 .It Fl d
 Debug; print error messages to standard error instead of using
 .Xr syslog 3 .
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to