All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Wiles, Keith" <keith.wiles@intel.com>
To: Neil Horman <nhorman@redhat.com>
Cc: Neil Horman <nhorman@tuxdriver.com>,
	Thomas Monjalon <thomas.monjalon@6wind.com>,
	"dev@dpdk.org" <dev@dpdk.org>,
	"Mcnamara, John" <john.mcnamara@intel.com>
Subject: Re: [PATCH] validate_abi: build faster by augmenting make with job count
Date: Thu, 21 Jul 2016 15:22:45 +0000	[thread overview]
Message-ID: <64F83F10-008B-4DB0-9662-989A8F57BE80@intel.com> (raw)
In-Reply-To: <20160721150604.GC10032@hmsreliant.think-freely.org>


> On Jul 21, 2016, at 10:06 AM, Neil Horman <nhorman@redhat.com> wrote:
> 
> On Thu, Jul 21, 2016 at 02:09:19PM +0000, Wiles, Keith wrote:
>> 
>>> On Jul 21, 2016, at 8:54 AM, Neil Horman <nhorman@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@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@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@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.
>> 
> Thats odd, specifying 0 works for me.  If it doesn't for you, specify $MAX_INT
> or some other huge number would be comparable

rkwiles@supermicro (master):~/.../dpdk/x86_64-native-linuxapp-gcc$ make --version
GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

rkwiles@supermicro (master):~/.../dpdk/x86_64-native-linuxapp-gcc$ make -j 0
make: the '-j' option requires a positive integer argument

rkwiles@supermicro (master):~/.../dpdk/x86_64-native-linuxapp-gcc$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.1 LTS
Release:	16.04
Codename:	xenial

> 
> Neil
> 
>>> 
>>> 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


  reply	other threads:[~2016-07-21 15:23 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-20 17:09 [PATCH] validate_abi: build faster by augmenting make with job count Neil Horman
2016-07-20 17:40 ` Thomas Monjalon
2016-07-20 17:48   ` Neil Horman
2016-07-20 19:47     ` Wiles, Keith
2016-07-20 20:15       ` Thomas Monjalon
2016-07-20 20:16       ` Neil Horman
2016-07-20 22:32         ` Wiles, Keith
2016-07-21 13:54           ` Neil Horman
2016-07-21 14:09             ` Wiles, Keith
2016-07-21 15:06               ` Neil Horman
2016-07-21 15:22                 ` Wiles, Keith [this message]
2016-07-21 18:34                   ` Neil Horman
2016-07-24 18:08                     ` Wiles, Keith
2016-08-01 11:49                       ` Neil Horman
2016-08-01 16:16                         ` Wiles, Keith
2016-08-01 18:08                           ` Neil Horman
2016-07-20 19:02   ` [PATCH v2] " Neil Horman
2016-07-22 10:46     ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=64F83F10-008B-4DB0-9662-989A8F57BE80@intel.com \
    --to=keith.wiles@intel.com \
    --cc=dev@dpdk.org \
    --cc=john.mcnamara@intel.com \
    --cc=nhorman@redhat.com \
    --cc=nhorman@tuxdriver.com \
    --cc=thomas.monjalon@6wind.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.