From: Nicolas Schier <nicolas@fjasle.eu>
To: "Thomas Weißschuh" <linux@weissschuh.net>
Cc: Masahiro Yamada <masahiroy@kernel.org>,
Nathan Chancellor <nathan@kernel.org>,
Nick Desaulniers <ndesaulniers@google.com>,
Willy Tarreau <w@1wt.eu>, Shuah Khan <shuah@kernel.org>,
linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org
Subject: Re: [PATCH RFC v2] selftests/nolibc: don't embed initramfs into kernel image
Date: Tue, 19 Sep 2023 13:47:47 +0200 [thread overview]
Message-ID: <ZQmKYz6WRkznqdWV@fjasle.eu> (raw)
In-Reply-To: <20230917-nolibc-initramfs-v2-1-f0f293a8b198@weissschuh.net>
On Sun, Sep 17, 2023 at 05:21:38PM +0200 Thomas Weißschuh wrote:
> When the initramfs is embedded into the kernel each rebuild of it will
> trigger a full kernel relink and all the expensive postprocessing steps.
>
> Currently nolibc-test and therefore the initramfs are always rebuild,
> even without source changes, leading to lots of slow kernel relinks.
>
> Instead of linking the initramfs into the kernel assemble it manually
> and pass it explicitly to qemu.
> This avoids all of the kernel relinks.
>
> Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
> ---
> Currently the nolibc testsuite embeds the test executable into a kernel
> image with CONFIG_INITRAMFS_SOURCE.
> This forces a full kernel relink everytime the test executable is
> updated.
>
> This relinking step dominates the test cycle.
> It is slower than building and running the test in qemu together.
>
> With a bit of Makefile-shuffling the relinking can be avoided.
> ---
> Changes in v2:
> - avoid need to modify top-level Makefile
> - drop patch removing "rerun" target
> - add kernel-standalone target
> - Link to v1: https://lore.kernel.org/r/20230916-nolibc-initramfs-v1-0-4416ecedca6d@weissschuh.net
> ---
Thanks, seems to work as described (and I am surprised how fast the 'run'
target is) and patch looks good to me.
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
> tools/testing/selftests/nolibc/Makefile | 42 ++++++++++++++++++++-------------
> 1 file changed, 26 insertions(+), 16 deletions(-)
>
> diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile
> index 689658f81a19..ee6a9ad28cfd 100644
> --- a/tools/testing/selftests/nolibc/Makefile
> +++ b/tools/testing/selftests/nolibc/Makefile
> @@ -131,18 +131,20 @@ REPORT ?= awk '/\[OK\][\r]*$$/{p++} /\[FAIL\][\r]*$$/{if (!f) printf("\n"); f++
>
> help:
> @echo "Supported targets under selftests/nolibc:"
> - @echo " all call the \"run\" target below"
> - @echo " help this help"
> - @echo " sysroot create the nolibc sysroot here (uses \$$ARCH)"
> - @echo " nolibc-test build the executable (uses \$$CC and \$$CROSS_COMPILE)"
> - @echo " libc-test build an executable using the compiler's default libc instead"
> - @echo " run-user runs the executable under QEMU (uses \$$XARCH, \$$TEST)"
> - @echo " initramfs prepare the initramfs with nolibc-test"
> - @echo " defconfig create a fresh new default config (uses \$$XARCH)"
> - @echo " kernel (re)build the kernel with the initramfs (uses \$$XARCH)"
> - @echo " run runs the kernel in QEMU after building it (uses \$$XARCH, \$$TEST)"
> - @echo " rerun runs a previously prebuilt kernel in QEMU (uses \$$XARCH, \$$TEST)"
> - @echo " clean clean the sysroot, initramfs, build and output files"
> + @echo " all call the \"run\" target below"
> + @echo " help this help"
> + @echo " sysroot create the nolibc sysroot here (uses \$$ARCH)"
> + @echo " nolibc-test build the executable (uses \$$CC and \$$CROSS_COMPILE)"
> + @echo " libc-test build an executable using the compiler's default libc instead"
> + @echo " run-user runs the executable under QEMU (uses \$$XARCH, \$$TEST)"
> + @echo " initramfs.cpio prepare the initramfs archive with nolibc-test"
> + @echo " initramfs prepare the initramfs tree with nolibc-test"
> + @echo " defconfig create a fresh new default config (uses \$$XARCH)"
> + @echo " kernel (re)build the kernel (uses \$$XARCH)"
> + @echo " kernel-standalone (re)build the kernel with the initramfs (uses \$$XARCH)"
> + @echo " run runs the kernel in QEMU after building it (uses \$$XARCH, \$$TEST)"
> + @echo " rerun runs a previously prebuilt kernel in QEMU (uses \$$XARCH, \$$TEST)"
> + @echo " clean clean the sysroot, initramfs, build and output files"
> @echo ""
> @echo "The output file is \"run.out\". Test ranges may be passed using \$$TEST."
> @echo ""
> @@ -195,6 +197,9 @@ run-user: nolibc-test
> $(Q)qemu-$(QEMU_ARCH) ./nolibc-test > "$(CURDIR)/run.out" || :
> $(Q)$(REPORT) $(CURDIR)/run.out
>
> +initramfs.cpio: kernel nolibc-test
> + $(QUIET_GEN)echo 'file /init nolibc-test 755 0 0' | $(srctree)/usr/gen_init_cpio - > initramfs.cpio
> +
> initramfs: nolibc-test
> $(QUIET_MKDIR)mkdir -p initramfs
> $(call QUIET_INSTALL, initramfs/init)
> @@ -203,17 +208,20 @@ initramfs: nolibc-test
> defconfig:
> $(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) mrproper $(DEFCONFIG) prepare
>
> -kernel: initramfs
> +kernel:
> + $(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) $(IMAGE_NAME)
> +
> +kernel-standalone: initramfs
> $(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) $(IMAGE_NAME) CONFIG_INITRAMFS_SOURCE=$(CURDIR)/initramfs
>
> # run the tests after building the kernel
> -run: kernel
> - $(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
> +run: kernel initramfs.cpio
> + $(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -initrd initramfs.cpio -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
> $(Q)$(REPORT) $(CURDIR)/run.out
>
> # re-run the tests from an existing kernel
> rerun:
> - $(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
> + $(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -initrd initramfs.cpio -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
> $(Q)$(REPORT) $(CURDIR)/run.out
>
> # report with existing test log
> @@ -227,6 +235,8 @@ clean:
> $(Q)rm -f nolibc-test
> $(call QUIET_CLEAN, libc-test)
> $(Q)rm -f libc-test
> + $(call QUIET_CLEAN, initramfs.cpio)
> + $(Q)rm -rf initramfs.cpio
> $(call QUIET_CLEAN, initramfs)
> $(Q)rm -rf initramfs
> $(call QUIET_CLEAN, run.out)
>
> ---
> base-commit: 3f79a57865b33f49fdae6655510bd27c8e6610e0
> change-id: 20230916-nolibc-initramfs-4fd00eac3256
>
> Best regards,
> --
> Thomas Weißschuh <linux@weissschuh.net>
--
epost|xmpp: nicolas@fjasle.eu irc://oftc.net/nsc
↳ gpg: 18ed 52db e34f 860e e9fb c82b 7d97 0932 55a0 ce7f
-- frykten for herren er opphav til kunnskap --
prev parent reply other threads:[~2023-09-19 11:48 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-17 15:21 [PATCH RFC v2] selftests/nolibc: don't embed initramfs into kernel image Thomas Weißschuh
2023-09-18 16:20 ` Willy Tarreau
2023-09-19 11:47 ` Nicolas Schier [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=ZQmKYz6WRkznqdWV@fjasle.eu \
--to=nicolas@fjasle.eu \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux@weissschuh.net \
--cc=masahiroy@kernel.org \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=shuah@kernel.org \
--cc=w@1wt.eu \
/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