From: "'MOESSBAUER, Felix' via isar-users" <isar-users@googlegroups.com>
To: Zhihang Wei <wzh@ilbers.de>,
"isar-users@googlegroups.com" <isar-users@googlegroups.com>
Cc: "Kiszka, Jan" <jan.kiszka@siemens.com>
Subject: Re: [PATCH v2 2/3] testsuite: speedup execution by limiting mc parsing to selected targets
Date: Fri, 24 Jul 2026 15:27:16 +0000 [thread overview]
Message-ID: <4865535f9b767eb838afab41959755ced0fc56f0.camel@siemens.com> (raw)
In-Reply-To: <28db2fc3-e0ef-41a5-8350-bd9f8cc2e313@ilbers.de>
On Fri, 2026-07-24 at 16:56 +0200, Zhihang Wei wrote:
> On 7/20/26 09:37, 'Felix Moessbauer' via isar-users wrote:
> > The global isar mc.conf has over 70 multiconfig targets defined. This
> > makes initial parsing super slow, leading to parse times of 5-10 minutes
> > on testsuite tasks (per avocado task execution). To speed this up, We now
> > set the BBMULTICONFIG bitbake variable to exactly the targets we want to
> > test. This reduces the parsing time of tests to ~10s per test.
> >
> > When running with sstate cache, this massively speeds up repeated runs,
> > as the parse time was the biggest single contributor.
> >
> > Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
> > ---
> > testsuite/cibase.py | 20 +++++++++++---------
> > testsuite/cibuilder.py | 17 +++++++++++++++++
> > testsuite/repro-build-test.py | 1 +
> > 3 files changed, 29 insertions(+), 9 deletions(-)
> >
> > diff --git a/testsuite/cibase.py b/testsuite/cibase.py
> > index 4a6308d0..52748004 100755
> > --- a/testsuite/cibase.py
> > +++ b/testsuite/cibase.py
> > @@ -15,7 +15,7 @@ from avocado.utils import process
> >
> > class CIBaseTest(CIBuilder):
> > def perform_build_test(self, targets, should_fail=False, **kwargs):
> > - self.configure(**kwargs)
> > + self.configure(targets=targets, **kwargs)
> >
> > if bool(int(self.params.get('depgraph', default=0))):
> > self.generate_dependency_graph(targets, reconfigure=False, **kwargs)
> > @@ -31,7 +31,7 @@ class CIBaseTest(CIBuilder):
> > **kwargs):
> > """Debug helper to better understand test task graphs."""
> > if reconfigure:
> > - self.configure(**kwargs)
> > + self.configure(targets=targets, **kwargs)
> >
> > self.log.info("Generating dependency graph...")
> >
> > @@ -41,7 +41,7 @@ class CIBaseTest(CIBuilder):
> > self.move_in_build_dir('pn-buildlist', f"pn-buildlist-{self.name}")
> >
> > def perform_wic_partition_test(self, targets, wic_deploy_parts, **kwargs):
> > - self.configure(wic_deploy_parts=wic_deploy_parts, **kwargs)
> > + self.configure(targets=targets, wic_deploy_parts=wic_deploy_parts, **kwargs)
> > self.bitbake(targets, **kwargs)
> >
> > wic_path = f"{self.build_dir}/tmp/deploy/images/*/*.wic.p1"
> > @@ -57,6 +57,7 @@ class CIBaseTest(CIBuilder):
> > gpg_priv_key = os.path.join(keys_dir, 'test_priv.key')
> >
> > self.configure(
> > + targets=targets,
> > gpg_pub_key=gpg_pub_key if signed else None,
> > sstate_dir='',
> > **kwargs,
> > @@ -76,6 +77,7 @@ class CIBaseTest(CIBuilder):
> > repro_type = 'signed' if signed else 'unsigned'
> > self.move_in_build_dir('tmp', f"tmp_middle_repro_{repro_type}")
> > self.configure(
> > + targets=targets,
> > gpg_pub_key=gpg_pub_key if signed else None,
> > offline=True,
> > sstate_dir='',
> > @@ -89,7 +91,7 @@ class CIBaseTest(CIBuilder):
> >
> > if not signed:
> > # Try to build with changed configuration with no cleanup
> > - self.configure(**kwargs)
> > + self.configure(targets=targets, **kwargs)
> > self.bitbake(targets, **kwargs)
> >
> > finally:
> > @@ -109,7 +111,7 @@ class CIBaseTest(CIBuilder):
> > count += int(content[field])
> > return count
> >
> > - self.configure(ccache=True, sstate_dir='', **kwargs)
> > + self.configure(targets=targets, ccache=True, sstate_dir='', **kwargs)
> >
> > # Field that stores direct ccache hits
> > direct_cache_hit = 22
> > @@ -173,7 +175,7 @@ class CIBaseTest(CIBuilder):
> > process.run(f"git --work-tree={isar_sstate} checkout HEAD -- .")
> >
> > self.init('../build-sstate', isar_dir=isar_sstate)
> > - self.configure(sstate=True, sstate_dir='', **kwargs)
> > + self.configure(targets=image_target, sstate=True, sstate_dir='', **kwargs)
> >
> > # Cleanup sstate and tmp before test
> > self.delete_from_build_dir('sstate-cache')
> > @@ -196,7 +198,7 @@ class CIBaseTest(CIBuilder):
> > """
> > Generate signature data for target(s) and check for cacheability issues
> > """
> > - self.configure(**kwargs)
> > + self.configure(targets=targets, **kwargs)
> > self.delete_from_build_dir('tmp_before_sstate')
> > self.move_in_build_dir('tmp', 'tmp_before_sstate')
> > self.bitbake(targets, sig_handler='none')
> > @@ -246,7 +248,7 @@ class CIBaseTest(CIBuilder):
> > return False
> > return True
> >
> > - self.configure(sstate=True, sstate_dir='', **kwargs)
> > + self.configure(targets=[image_target, package_target], sstate=True, sstate_dir='', **kwargs)
> >
> > deploy_dir = f"{self.build_dir}/tmp/deploy"
> >
> > @@ -380,7 +382,7 @@ class CIBaseTest(CIBuilder):
> > sfiles[target][fname] = CIUtils.get_tar_content(fname)
> > return sfiles
> >
> > - self.configure(**kwargs)
> > + self.configure(targets=targets, **kwargs)
> >
> > tmp_layer_dir = self.create_tmp_layer()
> > try:
> > diff --git a/testsuite/cibuilder.py b/testsuite/cibuilder.py
> > index d42e8631..1d415084 100755
> > --- a/testsuite/cibuilder.py
> > +++ b/testsuite/cibuilder.py
> > @@ -104,8 +104,21 @@ class CIBuilder(Test):
> > if not hasattr(self, 'build_dir'):
> > self.error("Broken test implementation: need to call init().")
> >
> > + @staticmethod
> > + def _extract_multiconfigs(targets):
> > + if isinstance(targets, str):
> > + targets = [targets]
> > + mc_names = set()
> > + for target in targets:
> > + if target.startswith('mc:'):
> > + parts = target.split(':')
> > + if len(parts) >= 2:
> > + mc_names.add(parts[1])
> > + return mc_names
> > +
> > def configure(
> > self,
> > + targets=None,
> > compat_arch=True,
> > cross=True,
> > debsrc_cache=False,
> > @@ -196,6 +209,10 @@ class CIBuilder(Test):
> >
> > # write ci_build.conf
> > with open(self.build_dir + '/conf/ci_build.conf', 'w') as f:
> > + if targets:
> > + mc_names = self._extract_multiconfigs(targets)
> > + if mc_names:
> > + f.write('BBMULTICONFIG = "%s"\n\n' % ' '.join(sorted(mc_names)))
> > if compat_arch:
> > f.write(
> > 'ISAR_ENABLE_COMPAT_ARCH:amd64 = "1"\n'
> > diff --git a/testsuite/repro-build-test.py b/testsuite/repro-build-test.py
> > index c06269f5..c1b51aff 100755
> > --- a/testsuite/repro-build-test.py
> > +++ b/testsuite/repro-build-test.py
> > @@ -50,6 +50,7 @@ class ReproBuild(CIBuilder):
> > # Build
> > self.log.info("Started Build " + image_name)
> > self.configure(
> > + targets=target,
> > source_date_epoch=source_date_epoch, use_apt_snapshot=True
> > )
> > self.bitbake(target)
>
> Hi,
>
> It seems this patch does not work with the installer testsuite (-t
> installer). After the build testcase "test_installer_build" passed,
> the following "test_installer_run" and "test_installer_root_partition"
> tests failed.
I see. That's because we don't have the inner image in our
BBMULTICONFIG list anymore. The fix is trivial, just append the
following to test_installer_build:
lines=["BBMULTICONFIG:append = ' qemuamd64-bookworm'"]
Will send a v3 in a minute.
Felix
>
> Some log:
> ......
> [stdlog] 2026-07-21 18:11:07,304 avocado.test stacktrace L0049
> ERROR| File "/build/isar_wzh_devel_6a/76/bitbake/lib/bb/cooker.py",
> line 1040, in findBestProvider
> [stdlog] 2026-07-21 18:11:07,304 avocado.test stacktrace L0049
> ERROR| if pn in self.recipecaches[mc].providers:
> [stdlog] 2026-07-21 18:11:07,304 avocado.test stacktrace L0049
> ERROR| ~~~~~~~~~~~~~~~~~^^^^
> [stdlog] 2026-07-21 18:11:07,304 avocado.test stacktrace L0049
> ERROR| KeyError: 'qemuamd64-bookworm'
>
> Zhihang
--
You received this message because you are subscribed to the Google Groups "isar-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/isar-users/4865535f9b767eb838afab41959755ced0fc56f0.camel%40siemens.com.
next prev parent reply other threads:[~2026-07-24 15:27 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-20 7:37 [PATCH v2 0/3] speedup testsuite execution execution 'Felix Moessbauer' via isar-users
2026-07-20 7:37 ` [PATCH v2 1/3] ci: run vm_start tests right after targets that built it 'Felix Moessbauer' via isar-users
2026-07-24 9:50 ` Zhihang Wei
2026-07-20 7:37 ` [PATCH v2 2/3] testsuite: speedup execution by limiting mc parsing to selected targets 'Felix Moessbauer' via isar-users
2026-07-24 14:56 ` Zhihang Wei
2026-07-24 15:27 ` 'MOESSBAUER, Felix' via isar-users [this message]
2026-07-20 7:37 ` [PATCH v2 3/3] testsuite: remove duplicated cross test 'Felix Moessbauer' via isar-users
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=4865535f9b767eb838afab41959755ced0fc56f0.camel@siemens.com \
--to=isar-users@googlegroups.com \
--cc=felix.moessbauer@siemens.com \
--cc=jan.kiszka@siemens.com \
--cc=wzh@ilbers.de \
/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