From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerin Jacob Subject: Re: [PATCH] mk: optimize directory dependencies Date: Tue, 24 Jan 2017 17:10:15 +0530 Message-ID: <20170124114013.GA4609@localhost.localdomain> References: <20170123181813.00567e47@platinum> <1485191953-2613-1-git-send-email-olivier.matz@6wind.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Cc: , , To: Olivier Matz Return-path: Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0080.outbound.protection.outlook.com [104.47.37.80]) by dpdk.org (Postfix) with ESMTP id 4C1E4282 for ; Tue, 24 Jan 2017 12:40:34 +0100 (CET) Content-Disposition: inline In-Reply-To: <1485191953-2613-1-git-send-email-olivier.matz@6wind.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Mon, Jan 23, 2017 at 06:19:13PM +0100, Olivier Matz wrote: > Before this patch, the management of dependencies between directories > had several issues: > > - the generation of .depdirs, done at configuration is slow: it can take > more than one minute on some slow targets (usually ~10s on a standard > PC). > > - for instance, it is possible to expressed a dependency like: > - app/foo depends on lib/librte_foo > - and lib/librte_foo depends on app/bar > But this won't work because the directories are traversed with a > depth-first algorithm, so we have to choose between doing 'app' before > or after 'lib'. > > - the script depdirs-rule.sh is too complex. > > - we cannot use "make -d" for debug, because the output of make is used for > the generation of .depdirs. > > This patch moves the DEPDIRS-* variables in the upper Makefile, making > the dependencies much easier to calculate. A DEPDIRS variable is still > used to process library dependencies in LDLIBS. > > After this commit, "make config" is almost immediate. > > Signed-off-by: Olivier Matz Tested both approach on ThunderX. This patch looks better Tested-by: Jerin Jacob ➜ [master]GB-2S [dpdk-master] $ time make config T=arm64-thunderx-linuxapp-gcc Configuration done real 0m18.112s user 0m2.810s sys 0m0.660s ➜ [master]GB-2S [dpdk-master] $ pwclient git-am 19859 Applying patch #19859 using 'git am' Description: [dpdk-dev] mk: parallelize make config Applying: mk: parallelize make config ➜ [master]GB-2S [dpdk-master] $ rm -rf build ➜ [master]GB-2S [dpdk-master] $ time make config T=arm64-thunderx-linuxapp-gcc -j 8 Configuration done real 0m2.812s user 0m3.020s sys 0m0.870s ➜ [master]GB-2S [dpdk-master] $ rm -rf build ➜ [master]GB-2S [dpdk-master] $ time make config T=arm64-thunderx-linuxapp-gcc -j 16 Configuration done real 0m1.748s user 0m3.040s sys 0m1.020s ➜ [master]GB-2S [dpdk-master] $ rm -rf build ➜ [master]GB-2S [dpdk-master] $ time make config T=arm64-thunderx-linuxapp-gcc -j 32 Configuration done real 0m1.422s user 0m3.380s sys 0m1.080s ➜ [master]GB-2S [dpdk-master] $ pwclient git-am 19918 Applying patch #19918 using 'git am' Description: [dpdk-dev] mk: optimize directory dependencies Applying: mk: optimize directory dependencies ➜ [master]GB-2S [dpdk-master] $ rm -rf build ➜ [master]GB-2S [dpdk-master] $ time make config T=arm64-thunderx-linuxapp-gcc Configuration done real 0m0.064s user 0m0.000s sys 0m0.000s ➜ [master]GB-2S [dpdk-master] $ rm -rf build ➜ [master]GB-2S [dpdk-master] $ time make config T=arm64-thunderx-linuxapp-gcc -j 8 Configuration done real 0m0.055s user 0m0.000s sys 0m0.000s