* [PATCH 0/1] archiver.bbclass: Drop tarfile module to improve performance @ 2023-12-19 18:52 liezhi.yang 2023-12-19 18:52 ` [PATCH 1/1] " liezhi.yang 0 siblings, 1 reply; 3+ messages in thread From: liezhi.yang @ 2023-12-19 18:52 UTC (permalink / raw) To: openembedded-core From: Robert Yang <liezhi.yang@windriver.com> The following changes since commit 6b729088dce302eb3a967cb6839f00488025be0e: build-appliance-image: Update to master head revision (2023-12-18 09:42:59 +0000) are available in the Git repository at: https://github.com/robertlinux/yocto rbt/archiver https://github.com/robertlinux/yocto/tree/rbt/archiver Robert Yang (1): archiver.bbclass: Drop tarfile module to improve performance meta/classes/archiver.bbclass | 28 ++++++++++++++++------------ meta/conf/bitbake.conf | 3 +++ 2 files changed, 19 insertions(+), 12 deletions(-) -- 2.42.0 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/1] archiver.bbclass: Drop tarfile module to improve performance 2023-12-19 18:52 [PATCH 0/1] archiver.bbclass: Drop tarfile module to improve performance liezhi.yang @ 2023-12-19 18:52 ` liezhi.yang 2023-12-22 3:48 ` [OE-core] " Robert Yang 0 siblings, 1 reply; 3+ messages in thread From: liezhi.yang @ 2023-12-19 18:52 UTC (permalink / raw) To: openembedded-core From: Robert Yang <liezhi.yang@windriver.com> * The tarfile module doesn't support xz options or environment varible XZ_DEFAULTS, this makes do_ar_patched incrediblely slow when the file is large, for example, chromium-x11 is about 3GB: - "bitbake chromium-x11 -car_patched" hasn't been done after 3 hours on my host, I checked the partial tar.xz file is only 1.5GB, so maybe more than 6 hours is required to complete the task. - Now only less than 4 minutes is needed on the same host. * Need add xz to HOSTTOOLS when archiver.bbclass is enabled and compression is xz. Signed-off-by: Robert Yang <liezhi.yang@windriver.com> --- meta/classes/archiver.bbclass | 28 ++++++++++++++++------------ meta/conf/bitbake.conf | 3 +++ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/meta/classes/archiver.bbclass b/meta/classes/archiver.bbclass index 80a69cf31db..2d0bbfbd422 100644 --- a/meta/classes/archiver.bbclass +++ b/meta/classes/archiver.bbclass @@ -401,19 +401,11 @@ python do_ar_mirror() { subprocess.check_call(cmd, shell=True) } -def exclude_useless_paths(tarinfo): - if tarinfo.isdir(): - if tarinfo.name.endswith('/temp') or tarinfo.name.endswith('/patches') or tarinfo.name.endswith('/.pc'): - return None - elif tarinfo.name == 'temp' or tarinfo.name == 'patches' or tarinfo.name == '.pc': - return None - return tarinfo - def create_tarball(d, srcdir, suffix, ar_outdir): """ create the tarball from srcdir """ - import tarfile + import subprocess # Make sure we are only creating a single tarball for gcc sources if (d.getVar('SRC_URI') == ""): @@ -425,6 +417,16 @@ def create_tarball(d, srcdir, suffix, ar_outdir): srcdir = os.path.realpath(srcdir) compression_method = d.getVarFlag('ARCHIVER_MODE', 'compression') + if compression_method == "xz": + compression_cmd = "xz %s" % d.getVar('XZ_DEFAULTS') + # To keep compatibility with ARCHIVER_MODE[compression] + elif compression_method == "gz": + compression_cmd = "gzip" + elif compression_method == "bz2": + compression_cmd = "bzip2" + else: + bb.fatal("Unsupported compression_method: %s" % compression_method) + bb.utils.mkdirhier(ar_outdir) if suffix: filename = '%s-%s.tar.%s' % (d.getVar('PF'), suffix, compression_method) @@ -433,9 +435,11 @@ def create_tarball(d, srcdir, suffix, ar_outdir): tarname = os.path.join(ar_outdir, filename) bb.note('Creating %s' % tarname) - tar = tarfile.open(tarname, 'w:%s' % compression_method) - tar.add(srcdir, arcname=os.path.basename(srcdir), filter=exclude_useless_paths) - tar.close() + dirname = os.path.dirname(srcdir) + basename = os.path.basename(srcdir) + exclude = "--exclude=temp --exclude=patches --exclude='.pc'" + tar_cmd = "tar %s -cf - %s | %s > %s" % (exclude, basename, compression_cmd, tarname) + subprocess.check_call(tar_cmd, cwd=dirname, shell=True) # creating .diff.gz between source.orig and source def create_diff_gz(d, src_orig, src, ar_outdir): diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf index e7826e7af96..681af512bfa 100644 --- a/meta/conf/bitbake.conf +++ b/meta/conf/bitbake.conf @@ -528,6 +528,9 @@ HOSTTOOLS += " \ # Tools needed to run testimage runtime image testing HOSTTOOLS += "${@'ip ping ps scp ssh stty' if (bb.utils.contains_any('IMAGE_CLASSES', 'testimage testsdk', True, False, d) or any(x in (d.getVar("BBINCLUDED") or "") for x in ["testimage.bbclass", "testsdk.bbclass"])) else ''}" +# Used by archiver.bbclass when compression is xz +HOSTTOOLS += "${@'xz' if (('archiver.bbclass' in d.getVar('BBINCLUDED')) and (d.getVarFlag('ARCHIVER_MODE', 'compression') == 'xz')) else ''}" + # Link to these if present HOSTTOOLS_NONFATAL += "aws gcc-ar gpg gpg-agent ld.bfd ld.gold nc pigz sftp socat ssh sudo" -- 2.42.0 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [OE-core] [PATCH 1/1] archiver.bbclass: Drop tarfile module to improve performance 2023-12-19 18:52 ` [PATCH 1/1] " liezhi.yang @ 2023-12-22 3:48 ` Robert Yang 0 siblings, 0 replies; 3+ messages in thread From: Robert Yang @ 2023-12-22 3:48 UTC (permalink / raw) To: openembedded-core On 12/20/23 02:52, Robert Yang via lists.openembedded.org wrote: > From: Robert Yang <liezhi.yang@windriver.com> > > * The tarfile module doesn't support xz options or environment varible > XZ_DEFAULTS, this makes do_ar_patched incrediblely slow when the file is > large, for example, chromium-x11 is about 3GB: > - "bitbake chromium-x11 -car_patched" hasn't been done after 3 hours on my > host, I checked the partial tar.xz file is only 1.5GB, so maybe more than 6 > hours is required to complete the task. > > - Now only less than 4 minutes is needed on the same host. > > * Need add xz to HOSTTOOLS when archiver.bbclass is enabled and compression is xz. > > Signed-off-by: Robert Yang <liezhi.yang@windriver.com> > --- > meta/classes/archiver.bbclass | 28 ++++++++++++++++------------ > meta/conf/bitbake.conf | 3 +++ > 2 files changed, 19 insertions(+), 12 deletions(-) > > diff --git a/meta/classes/archiver.bbclass b/meta/classes/archiver.bbclass > index 80a69cf31db..2d0bbfbd422 100644 > --- a/meta/classes/archiver.bbclass > +++ b/meta/classes/archiver.bbclass > @@ -401,19 +401,11 @@ python do_ar_mirror() { > subprocess.check_call(cmd, shell=True) > } > > -def exclude_useless_paths(tarinfo): > - if tarinfo.isdir(): > - if tarinfo.name.endswith('/temp') or tarinfo.name.endswith('/patches') or tarinfo.name.endswith('/.pc'): > - return None > - elif tarinfo.name == 'temp' or tarinfo.name == 'patches' or tarinfo.name == '.pc': > - return None > - return tarinfo > - > def create_tarball(d, srcdir, suffix, ar_outdir): > """ > create the tarball from srcdir > """ > - import tarfile > + import subprocess > > # Make sure we are only creating a single tarball for gcc sources > if (d.getVar('SRC_URI') == ""): > @@ -425,6 +417,16 @@ def create_tarball(d, srcdir, suffix, ar_outdir): > srcdir = os.path.realpath(srcdir) > > compression_method = d.getVarFlag('ARCHIVER_MODE', 'compression') > + if compression_method == "xz": > + compression_cmd = "xz %s" % d.getVar('XZ_DEFAULTS') > + # To keep compatibility with ARCHIVER_MODE[compression] > + elif compression_method == "gz": > + compression_cmd = "gzip" > + elif compression_method == "bz2": > + compression_cmd = "bzip2" > + else: > + bb.fatal("Unsupported compression_method: %s" % compression_method) > + > bb.utils.mkdirhier(ar_outdir) > if suffix: > filename = '%s-%s.tar.%s' % (d.getVar('PF'), suffix, compression_method) > @@ -433,9 +435,11 @@ def create_tarball(d, srcdir, suffix, ar_outdir): > tarname = os.path.join(ar_outdir, filename) > > bb.note('Creating %s' % tarname) > - tar = tarfile.open(tarname, 'w:%s' % compression_method) > - tar.add(srcdir, arcname=os.path.basename(srcdir), filter=exclude_useless_paths) > - tar.close() > + dirname = os.path.dirname(srcdir) > + basename = os.path.basename(srcdir) > + exclude = "--exclude=temp --exclude=patches --exclude='.pc'" > + tar_cmd = "tar %s -cf - %s | %s > %s" % (exclude, basename, compression_cmd, tarname) > + subprocess.check_call(tar_cmd, cwd=dirname, shell=True) > > # creating .diff.gz between source.orig and source > def create_diff_gz(d, src_orig, src, ar_outdir): > diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf > index e7826e7af96..681af512bfa 100644 > --- a/meta/conf/bitbake.conf > +++ b/meta/conf/bitbake.conf > @@ -528,6 +528,9 @@ HOSTTOOLS += " \ > # Tools needed to run testimage runtime image testing > HOSTTOOLS += "${@'ip ping ps scp ssh stty' if (bb.utils.contains_any('IMAGE_CLASSES', 'testimage testsdk', True, False, d) or any(x in (d.getVar("BBINCLUDED") or "") for x in ["testimage.bbclass", "testsdk.bbclass"])) else ''}" > > +# Used by archiver.bbclass when compression is xz > +HOSTTOOLS += "${@'xz' if (('archiver.bbclass' in d.getVar('BBINCLUDED')) and (d.getVarFlag('ARCHIVER_MODE', 'compression') == 'xz')) else ''}" Sorry, please ignore this patch, I will send a V2. The BBINCLUDED maybe None in layerindex which makes layerindex failed. // Robert > + > # Link to these if present > HOSTTOOLS_NONFATAL += "aws gcc-ar gpg gpg-agent ld.bfd ld.gold nc pigz sftp socat ssh sudo" > > > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#192756): https://lists.openembedded.org/g/openembedded-core/message/192756 > Mute This Topic: https://lists.openembedded.org/mt/103268096/7304958 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [liezhi.yang@eng.windriver.com] > -=-=-=-=-=-=-=-=-=-=-=- > ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-12-22 3:49 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-12-19 18:52 [PATCH 0/1] archiver.bbclass: Drop tarfile module to improve performance liezhi.yang 2023-12-19 18:52 ` [PATCH 1/1] " liezhi.yang 2023-12-22 3:48 ` [OE-core] " Robert Yang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox