* [PATCH] sstate.bbclass: Optimise sstate_hardcode_path
@ 2012-02-10 0:07 Richard Purdie
2012-02-10 2:23 ` Joshua Lock
0 siblings, 1 reply; 2+ messages in thread
From: Richard Purdie @ 2012-02-10 0:07 UTC (permalink / raw)
To: openembedded-core
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.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
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):
+ 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):
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] sstate.bbclass: Optimise sstate_hardcode_path
2012-02-10 0:07 [PATCH] sstate.bbclass: Optimise sstate_hardcode_path Richard Purdie
@ 2012-02-10 2:23 ` Joshua Lock
0 siblings, 0 replies; 2+ messages in thread
From: Joshua Lock @ 2012-02-10 2:23 UTC (permalink / raw)
To: openembedded-core
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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-02-10 2:31 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-10 0:07 [PATCH] sstate.bbclass: Optimise sstate_hardcode_path Richard Purdie
2012-02-10 2:23 ` Joshua Lock
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox