Date: Wed, 13 Dec 2006 20:19:52 -0800 From: "David O'Brien" <obrien@freebsd.org> To: freebsd-hackers@freebsd.org Subject: [PATCH] "automated" make -j value Message-ID: <20061214041952.GA7513@dragon.NUXI.org>
next in thread | raw e-mail | index | archive | help
With multi-socket systems becoming more prevalent, and the continued increase in cores per processors, I thought it would be nice for 'make -j' to gain some automation. Attached is a patch that makes "-j-" be the same as "-j `sysctl -n kern.smp.cpus`" and "-j=" be twice that. I've also thought that maybe just supporting "-j-" would be better - with a definition of num_core = `sysctl -n kern.smp.cpus` -j => MAX(num_core * 5 / 4, num_core + 1) the idea being one would want a few more jobs than cores, but not a whole lot more. comments? (redirected back to list) -- -- David (obrien@FreeBSD.org) Index: main.c =================================================================== RCS file: /home/ncvs/src/usr.bin/make/main.c,v retrieving revision 1.160 diff -u -p -r1.160 main.c --- main.c 17 Jul 2006 19:16:12 -0000 1.160 +++ main.c 14 Dec 2006 02:26:15 -0000 @@ -456,11 +456,20 @@ rearg: char *endptr; forceJobs = TRUE; + size_t jLlen = sizeof(jobLimit); jobLimit = strtol(optarg, &endptr, 10); - if (jobLimit <= 0 || *endptr != '\0') { - warnx("illegal number, -j argument -- %s", - optarg); - usage(); + if ((*optarg == '-' || *optarg == '=') && + *endptr != '\0') { + sysctlbyname("kern.smp.cpus", &jobLimit, &jLlen, + NULL, 0); + if (*optarg == '=') + jobLimit *= 2; + } else { + if (jobLimit <= 0 || *endptr != '\0') { + warnx("illegal number, -j argument -- %s", + optarg); + usage(); + } } MFLAGS_append("-j", optarg); break; Index: make.1 =================================================================== RCS file: /home/ncvs/src/usr.bin/make/make.1,v retrieving revision 1.99 diff -u -p -r1.99 make.1 --- make.1 29 Sep 2006 21:17:10 -0000 1.99 +++ make.1 14 Dec 2006 04:19:22 -0000 @@ -218,6 +218,14 @@ may have running at any one time. Turns compatibility mode off, unless the .Fl B flag is also specified. +The special values +.It Ar - +and +.It Ar = +causes +.It Ar max_jobs +to be set to the value returned from the kern.smp.cpus sysctl and twice +kern.smp.cpus respectively. .It Fl k Continue processing after errors are encountered, but only on those targets that do not depend on the target whose creation caused the error.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20061214041952.GA7513>