Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Joshua Lock <josh@linux.intel.com>
To: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH] sstate.bbclass: Optimise sstate_hardcode_path
Date: Thu, 09 Feb 2012 18:23:14 -0800	[thread overview]
Message-ID: <4F347F92.2000501@linux.intel.com> (raw)
In-Reply-To: <1328832425.10451.48.camel@ted>

On 09/02/12 16:07, Richard Purdie wrote:
> The sstate_hardcode_path() function triggered large numbers of exec()
> calls when processing packages with large numbers of file relocations
> (e.g. perl). This patch optimises those calls into longer single commands
> which make the code significantly more efficient.
>
> This reduced the do_package time for perl by 2 minutes (from 4.75 minutes)
> for me.

Very nice speed up!

> Signed-off-by: Richard Purdie<richard.purdie@linuxfoundation.org>

A minor api/style nit below but:

Acked-by: Joshua Lock <josh@linux.intel.com>

> ---
> diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
> index 4bd3712..d4f95c1 100644
> --- a/meta/classes/sstate.bbclass
> +++ b/meta/classes/sstate.bbclass
> @@ -317,19 +317,24 @@ def sstate_hardcode_path(d):
>   	staging_host = d.getVar('STAGING_DIR_HOST', True)
>   	sstate_builddir = d.getVar('SSTATE_BUILDDIR', True)
>
> -	for i in file_list.split('\n'):
> -		if not i:
> -			continue
> -		if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross-canadian', d):
> -			cmd = "sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging, i)
> -		elif bb.data.inherits_class('cross', d):
> -			cmd = "sed -i -e s:%s:FIXMESTAGINGDIRTARGET:g %s \
> -				sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging_target, i, staging, i)
> -		else:
> -			cmd = "sed -i -e s:%s:FIXMESTAGINGDIRHOST:g %s" % (staging_host, i)
> +	files = " ".join(file_list.split('\n'))
>
> +	if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross-canadian', d):

I think this can be replaced by a single call to the inherits method of 
the oe.utils module:

oe.utils.inherits(d, 'native', 'nativesdk', 'crosssdk', 'cross-canadian')

which makes this a little more concise.

> +		cmd = "sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging, files)
> +	elif bb.data.inherits_class('cross', d):
> +		cmd = "sed -i -e s:%s:FIXMESTAGINGDIRTARGET:g %s \
> +			sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging_target, files, staging, files)
> +	else:
> +		cmd = "sed -i -e s:%s:FIXMESTAGINGDIRHOST:g %s" % (staging_host, files)
> +
> +	if files:
>   		os.system(cmd)
> -		os.system("echo %s | sed -e 's:%s::'>>  %sfixmepath" % (i, sstate_builddir, sstate_builddir))
> +		fix = open("%sfixmepath" % (sstate_builddir), "w")
> +		fixme = []
> +		for f in file_list.split('\n'):
> +			fixme.append(f.replace(sstate_builddir, ""))
> +		fix.write("\n".join(fixme))
> +		fix.close()
>   	p.close()
>
>   def sstate_package(ss, d):
>
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

-- 
Joshua Lock
         Yocto Project "Johannes factotum"
         Intel Open Source Technology Centre



      reply	other threads:[~2012-02-10  2:31 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-10  0:07 [PATCH] sstate.bbclass: Optimise sstate_hardcode_path Richard Purdie
2012-02-10  2:23 ` Joshua Lock [this message]

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=4F347F92.2000501@linux.intel.com \
    --to=josh@linux.intel.com \
    --cc=openembedded-core@lists.openembedded.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox