> On Jul 21, 2016, at 8:54 AM, Neil Horman <nhorman at tuxdriver.com> wrote: > > On Wed, Jul 20, 2016 at 10:32:28PM +0000, Wiles, Keith wrote: >> >>> On Jul 20, 2016, at 3:16 PM, Neil Horman <nhorman at tuxdriver.com> wrote: >>> >>> On Wed, Jul 20, 2016 at 07:47:32PM +0000, Wiles, Keith wrote: >>>> >>>>> On Jul 20, 2016, at 12:48 PM, Neil Horman <nhorman at redhat.com> wrote: >>>>> >>>>> On Wed, Jul 20, 2016 at 07:40:49PM +0200, Thomas Monjalon wrote: >>>>>> 2016-07-20 13:09, Neil Horman: >>>>>>> From: Neil Horman <nhorman at redhat.com> >>>>>>> >>>>>>> John Mcnamara and I were discussing enhacing the validate_abi script to >>>>>>> build >>>>>>> the dpdk tree faster with multiple jobs. Theres no reason not to do >>>>>>> it, so this >>>>>>> implements that requirement. It uses a MAKE_JOBS variable that can be >>>>>>> set by >>>>>>> the user to limit the job count. By default the job count is set to >>>>>>> the number >>>>>>> of online cpus. >>>>>> >>>>>> Please could you use the variable name DPDK_MAKE_JOBS? >>>>>> This name is already used in scripts/test-build.sh. >>>>>> >>>>> Sure >>>>> >>>>>>> +if [ -z "$MAKE_JOBS" ] >>>>>>> +then >>>>>>> + # This counts the number of cpus on the system >>>>>>> + MAKE_JOBS=`lscpu -p=cpu | grep -v "#" | wc -l` >>>>>>> +fi >>>>>> >>>>>> Is lscpu common enough? >>>>>> >>>>> I'm not sure how to answer that. lscpu is part of the util-linux >>>>> package, which >>>>> is part of any base install. Theres a variant for BSD, but I'm not sure >>>>> how >>>>> common it is there. >>>>> Neil >>>>> >>>>>> Another acceptable default would be just "-j" without any number. >>>>>> It would make the number of jobs unlimited. >>>> >>>> I think the best is just use -j as it tries to use the correct number of >>>> jobs based on the number of cores, right? >>>> >>> -j with no argument (or -j 0), is sort of, maybe what you want. With >>> either of >>> those options, make will just issue jobs as fast as it processes >>> dependencies. >>> Dependent on how parallel the build is, that can lead to tons of waiting >>> process >>> (i.e. more than your number of online cpus), which can actually hurt your >>> build >>> time. >> >> I read the manual and looked at the code, which supports your statement. (I >> think I had some statement on stack overflow and the last time I believe >> anything on the internet :-) I have not seen a lot of differences in compile >> times with -j on my system. Mostly I suspect it is the number of paths in >> the dependency, cores and memory on the system. >> >> I have 72 lcores or 2 sockets, 18 cores per socket. Xeon 2.3Ghz cores. >> >> $ export RTE_TARGET=x86_64-native-linuxapp-gcc >> >> $ time make install T=${RTE_TARGET} >> real 0m59.445s user 0m27.344s sys 0m7.040s >> >> $ time make install T=${RTE_TARGET} -j >> real 0m26.584s user 0m14.380s sys 0m5.120s >> >> # Remove the x86_64-native-linuxapp-gcc >> >> $ time make install T=${RTE_TARGET} -j 72 >> real 0m23.454s user 0m10.832s sys 0m4.664s >> >> $ time make install T=${RTE_TARGET} -j 8 >> real 0m23.812s user 0m10.672s sys 0m4.276s >> >> cd x86_64-native-linuxapp-gcc >> $ make clean >> $ time make >> real 0m28.539s user 0m9.820s sys 0m3.620s >> >> # Do a make clean between each build. >> >> $ time make -j >> real 0m7.217s user 0m6.532s sys 0m2.332s >> >> $ time make -j 8 >> real 0m8.256s user 0m6.472s sys 0m2.456s >> >> $ time make -j 72 >> real 0m6.866s user 0m6.184s sys 0m2.216s >> >> Just the real time numbers in the following table. >> >> processes real Time depdirs >> no -j 59.4s Yes >> -j 8 23.8s Yes >> -j 72 23.5s Yes >> -j 26.5s Yes >> >> no -j 28.5s No >> -j 8 8.2s No >> -j 72 6.8s No >> -j 7.2s No >> >> Looks like the depdirs build time on my system: >> $ make clean -j >> $ rm .depdirs >> $ time make -j >> real 0m23.734s user 0m11.228s sys 0m4.844s >> >> About 16 seconds, which is not a lot of savings. Now the difference from no >> -j to -j is a lot, but the difference between -j and -j <cpu_count> is not a >> huge saving. This leads me back to over engineering the problem when ?-j? >> would work just as well here. >> >> Even on my MacBook Pro i7 system the difference is not that much 1m8s >> without depdirs build for -j in a VirtualBox with all 4 cores 8G RAM. >> Compared to 1m13s with -j 4 option. >> >> I just wonder if it makes a lot of sense to use cpuinfo in this given case >> if it turns out to be -j works with the 80% rule? >> > It may, but that seems to be reason to me to just set DPDK_MAKE_JOBS=0, and > you'll get that behavior
Just to be sure, ?make -j 0? is not a valid argument to the -j option. It looks like you have to do ?-j? or ?-j N? or no option where N != 0 I think we just use -j which gets us the 80% rule and the best performance without counting cores. > > Neil > >> On some other project with a lot more files like the FreeBSD or Linux >> distro, yes it would make a fair amount of real time difference. >> >> Keith >> >>> >>> While its fine in los of cases, its not always fine, and with this >>> implementation you can still opt in to that behavior by setting >>> DPDK_MAKE_JOBS=0 >>> >>> Neil