From: Kees Cook <kees@kernel.org>
To: "Lorenzo Stoakes (ARM)" <ljs@kernel.org>
Cc: "Linus Torvalds" <torvalds@linux-foundation.org>,
"Nathan Chancellor" <nathan@kernel.org>,
"Nicolas Schier" <nsc@kernel.org>,
"Nick Desaulniers" <ndesaulniers@google.com>,
"Bill Wendling" <morbo@google.com>,
"Justin Stitt" <justinstitt@google.com>,
"Masahiro Yamada" <masahiroy@kernel.org>,
"Alexey Gladkov" <legion@kernel.org>,
"Thomas Gleixner" <tglx@kernel.org>,
"Ingo Molnar" <mingo@redhat.com>,
"Borislav Petkov" <bp@alien8.de>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
"Paul Walmsley" <pjw@kernel.org>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Alexandre Ghiti" <alex@ghiti.fr>,
"Arnd Bergmann" <arnd@arndb.de>,
"Catalin Marinas" <catalin.marinas@arm.com>,
"Will Deacon" <will@kernel.org>,
"Mark Rutland" <mark.rutland@arm.com>,
"Ard Biesheuvel" <ardb@kernel.org>,
"Ilias Apalodimas" <ilias.apalodimas@linaro.org>,
"Josh Poimboeuf" <jpoimboe@kernel.org>,
"Peter Zijlstra" <peterz@infradead.org>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun@kernel.org>, "Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Tamir Duberstein" <tamird@kernel.org>,
"Alexandre Courbot" <acourbot@nvidia.com>,
"Onur Özkan" <work@onurozkan.dev>,
"Jonathan Corbet" <corbet@lwn.net>,
"Randy Dunlap" <rdunlap@infradead.org>,
"Gustavo A. R. Silva" <gustavoars@kernel.org>,
linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
llvm@lists.linux.dev, linux-riscv@lists.infradead.org,
linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-efi@vger.kernel.org, rust-for-linux@vger.kernel.org,
linux-doc@vger.kernel.org, "Jens Axboe" <axboe@kernel.dk>,
linux-hardening@vger.kernel.org
Subject: Re: [PATCH v2 21/21] kbuild: use pigz for gzip compression if available
Date: Tue, 15 Sep 2026 10:31:20 -0700 [thread overview]
Message-ID: <202609150955.A51C9F7A20@keescook> (raw)
In-Reply-To: <aqk9gakQhxToLnDI@gremlin>
On Tue, Sep 15, 2026 at 03:30:43PM +0100, Lorenzo Stoakes (ARM) wrote:
> On Mon, Sep 14, 2026 at 09:39:07AM -0700, Kees Cook wrote:
> > On Mon, Sep 14, 2026 at 10:22:20AM +0100, Lorenzo Stoakes (ARM) wrote:
> > > On a 128-core Threadripper, gzip -9 of a 36 MiB x86-64 vmlinux.bin takes
> > > 1.6s, and with pigz it takes 0.09s, so the performance increase is
> > > significant.
> >
> > Neat! I wanna go learn how pigz accomplishes this -- I thought the
> > problem with gzip was a common lookup table. Anyway...
>
> Yeah not sure on the details :)
Things I have now learned about a DEFLATE stream (RFC 1951):
- The Huffman tables are per-block, so emitting multiple tables in a
single stream is already required. (I only just knew about ZIP indexes
being singular, but I was confused: that's about the container not
the compression.)
- Each pigz thread keeps a 32K back-reference window for its tables so
it isn't starting a fresh table each block.
Very cool! The first makes parallelism possible at all, and the second
makes it work well: it's not just restarting the compression at every
block boundary.
> > I think the more idiomatic way to do this is:
> >
> > KGZIP := $(call try-run,command -v pigz,pigz,gzip)
>
> try-run is defined in scripts/Makefile.compiler which is only included ~200
> lines after KGZIP is set.
>
> That'll also set up and tear down a temp dir for a probe that doesn't need
> that, so I think it's fine as it is.
Yeah, good points. What you have is quite simple.
> > However, parallelism needs to be set. We can't let it eat all CPUs: it
> > needs to respect the -j make option (and make its CPU reservation known
> > to "make"), which we already have a solution for in
> > scripts/jobserver-exec.
>
> The only place where it's invoked is vmlinux.bin at the end of the serial
> tail, where all the tokens would be free anyway.
>
> So I don't think it really buys anything at all?
There are 2 things I'm thinking about:
a)
My main concern is the lack of respecting the -j make argument. In my
mind, this is a blocker, because it means a build will now _always_ spin
up max CPUs (not what -j has limited it to), and for CIs, shared compute
systems, or whatever, this violates the requested parallelism level. For
example, if I'm doing a long-running Coccinelle replacement in one tree
(which uses half the CPUs), any builds I launch I'm asking for the other
half of my CPUs to be used so they don't thrash my cache.
This is the kind of "why are all the CPUs spinning up?" question I
helped track down with commit 51e46c7a4007 ("docs, parallelism: Rearrange
how jobserver reservations are made") forever ago.
The next is kind of a special-case version of the above concern:
b)
There's nothing that ties KGZIP to only being used for final images
(and in fact, it also does modules, as you show), and it's defined as
part of "cmd_gzip", so it could be used at any moment in the build:
$ git grep call.*,gzip | wc -l
23
And it does have one use outside of the (presumed) final image build in
the per-arch /boot/ rules besides modules, for config_data:
$ git grep call.*,gzip | grep -v /boot/
Documentation/kbuild/makefiles.rst: $(call if_changed,gzip)
kernel/Makefile: $(call if_changed,gzip)
scripts/Makefile.modinst: $(call cmd,gzip)
So I'm nervous about a general-purpose tool and Kbuild infrastructure
suddenly going max parallel in the middle of a build some day when
another gzip use is added.
> Using jobserver-exec would also put python3 and two wrapper scripts in
> front of every gzip in the build including tar -I "$(KGZIP)" when packaging
> and some arm and m68k scripts too.
Does that impact wall-clock results meaningfully? I'd really like to
avoid losing correctness in favor of speed here, especially when we
already have a solution at hand for exactly this problem.
> Overall I think it's less complexity and really no delta to just invoke it
> as normal.
>
> It's designed as drop-in so it makes sense to use it as that.
It is possible that it is so fast no one will notice, but I really worry
that there are going to be many sysadmins driven to figuring out why
their build systems suddenly spike the CPU use, and then waste their
time tracking it down and reporting it to us, but we can solve it today.
> > Only RHEL appears a little glitchy, but likely they would trivially move
> > it to base since it's already packaged, but off in EPEL.
>
> Definitely not something for this series, the fallback is one invocation of
> command -v and I don't really want to break RHEL either :)
>
> If, once this has landed, we want to go that way then it's simple enough
> for us to change it.
Fair enough, though I do worry that this is vaguely "undiscoverable" in
the sense that if you happen to have pigz installed, suddenly it gets
used. (We have other such "try to use this other tool first" logic,
really; we have Kconfig stuff for detecting all sorts of capabilities,
but I couldn't find examples like this one. Maybe I missed it.)
So the "make it the default" suggestion is more about having better
determinism in the build requirements. Perhaps add pigz to changes.rst
and/or ver_linux so it is seen/recorded somewhere?
-Kees
--
Kees Cook
next prev parent reply other threads:[~2026-09-15 17:31 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-14 9:21 [PATCH v2 00/21] kbuild: significantly speed up kernel builds Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 01/21] kbuild: do not allocate .modinfo in vmlinux Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 02/21] kallsyms: index symbols by token to speed up table compression Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 03/21] kallsyms: output binary data to speed output and kallsyms assembly Lorenzo Stoakes (ARM)
2026-09-14 20:16 ` Markus Elfring
2026-09-14 21:44 ` David Laight
2026-09-15 7:10 ` [v2 " Markus Elfring
2026-09-14 9:22 ` [PATCH v2 04/21] kbuild: do not sort nm output where the order is irrelevant Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 05/21] kbuild: only emit vmlinux relocations when required Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 06/21] elf-parse: add section flags, symbol binding and a read-only mapping Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 07/21] kallsyms: reimplement mksysmap in C Lorenzo Stoakes (ARM)
2026-09-14 16:33 ` Markus Elfring
2026-09-14 16:54 ` Markus Elfring
2026-09-14 17:01 ` Markus Elfring
2026-09-14 9:22 ` [PATCH v2 08/21] kbuild: cache list, composite object state per object Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 09/21] kbuild: implement and use depcheck to check dependency timestamps Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 10/21] kbuild: move the toolchain checks into init/Kconfig.toolchain Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 11/21] kbuild: avoid re-running compiler and linker probes Lorenzo Stoakes (ARM)
2026-09-14 15:02 ` John Stoffel
2026-09-14 15:24 ` Lorenzo Stoakes (ARM)
2026-09-15 11:01 ` Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 12/21] modpost: cache section relocation mismatch state Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 13/21] modpost: emit module descriptors as assembly Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 14/21] kbuild: batch module finalisation Lorenzo Stoakes (ARM)
2026-09-14 18:00 ` Kees Cook
2026-09-15 10:44 ` Lorenzo Stoakes (ARM)
2026-09-15 16:49 ` Kees Cook
2026-09-15 17:54 ` Lorenzo Stoakes (ARM)
2026-09-15 17:56 ` Nick Desaulniers
2026-09-14 9:22 ` [PATCH v2 15/21] objtool: cache relocations, do less work Lorenzo Stoakes (ARM)
2026-09-14 19:44 ` Josh Poimboeuf
2026-09-14 20:06 ` Linus Torvalds
2026-09-14 22:23 ` Josh Poimboeuf
2026-09-14 22:30 ` Linus Torvalds
2026-09-15 12:24 ` Lorenzo Stoakes (ARM)
2026-09-15 12:19 ` Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 16/21] objtool: size the instruction hash to the text Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 17/21] objtool: decode instructions and resolve branch targets in parallel Lorenzo Stoakes (ARM)
2026-09-14 18:20 ` Kees Cook
2026-09-15 10:09 ` Lorenzo Stoakes (ARM)
2026-09-15 11:29 ` David Laight
2026-09-15 15:04 ` Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 18/21] kbuild: rust: optionally parallelise rustc front end Lorenzo Stoakes (ARM)
2026-09-14 18:32 ` Kees Cook
2026-09-15 11:09 ` Lorenzo Stoakes (ARM)
2026-09-15 11:16 ` Lorenzo Stoakes (ARM)
2026-09-15 6:32 ` Miguel Ojeda
2026-09-15 11:15 ` Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 19/21] rust: make exports.o depend on the headers generated for it Lorenzo Stoakes (ARM)
2026-09-14 9:22 ` [PATCH v2 20/21] kbuild: build rust crates in parallel with the rest of the build Lorenzo Stoakes (ARM)
2026-09-14 18:37 ` Kees Cook
2026-09-15 11:58 ` Lorenzo Stoakes (ARM)
2026-09-15 16:52 ` Kees Cook
2026-09-14 9:22 ` [PATCH v2 21/21] kbuild: use pigz for gzip compression if available Lorenzo Stoakes (ARM)
2026-09-14 16:39 ` Kees Cook
2026-09-14 16:49 ` H. Peter Anvin
2026-09-14 17:50 ` Kees Cook
2026-09-15 14:30 ` Lorenzo Stoakes (ARM)
2026-09-15 17:31 ` Kees Cook [this message]
2026-09-15 17:47 ` Nick Desaulniers
2026-09-15 18:02 ` Arnd Bergmann
2026-09-14 15:41 ` [PATCH v2 00/21] kbuild: significantly speed up kernel builds Kees Cook
2026-09-14 15:53 ` Linus Torvalds
2026-09-15 8:53 ` Arnd Bergmann
2026-09-15 11:35 ` Lorenzo Stoakes (ARM)
2026-09-14 18:25 ` Lorenzo Stoakes (ARM)
2026-09-14 18:43 ` Kees Cook
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=202609150955.A51C9F7A20@keescook \
--to=kees@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=alex@ghiti.fr \
--cc=aliceryhl@google.com \
--cc=aou@eecs.berkeley.edu \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=axboe@kernel.dk \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dave.hansen@linux.intel.com \
--cc=gary@garyguo.net \
--cc=gustavoars@kernel.org \
--cc=hpa@zytor.com \
--cc=ilias.apalodimas@linaro.org \
--cc=jpoimboe@kernel.org \
--cc=justinstitt@google.com \
--cc=legion@kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=ljs@kernel.org \
--cc=llvm@lists.linux.dev \
--cc=lossin@kernel.org \
--cc=mark.rutland@arm.com \
--cc=masahiroy@kernel.org \
--cc=mingo@redhat.com \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=nsc@kernel.org \
--cc=ojeda@kernel.org \
--cc=palmer@dabbelt.com \
--cc=peterz@infradead.org \
--cc=pjw@kernel.org \
--cc=rdunlap@infradead.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tamird@kernel.org \
--cc=tglx@kernel.org \
--cc=tmgross@umich.edu \
--cc=torvalds@linux-foundation.org \
--cc=will@kernel.org \
--cc=work@onurozkan.dev \
--cc=x86@kernel.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
all inboxes | Powered by JetHome®