From: Jarkko Sakkinen <jarkko@kernel.org>
To: David Howells <dhowells@redhat.com>
Cc: Eric Biggers <ebiggers@kernel.org>,
linux-integrity@vger.kernel.org, Mimi Zohar <zohar@linux.ibm.com>,
Paul Moore <paul@paul-moore.com>,
James Morris <jmorris@namei.org>,
"Serge E. Hallyn" <serge@hallyn.com>,
James Bottomley <James.Bottomley@hansenpartnership.com>,
"open list:KEYS/KEYRINGS" <keyrings@vger.kernel.org>,
"open list:SECURITY SUBSYSTEM"
<linux-security-module@vger.kernel.org>,
open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2] KEYS: key_garbage_collector(): process in chunks
Date: Wed, 28 Oct 2026 05:15:40 +0200 [thread overview]
Message-ID: <auFo3KrYXWq3UKmi@kernel.org> (raw)
In-Reply-To: <20261028025306.2063007-1-jarkko@kernel.org>
On Wed, Oct 28, 2026 at 04:53:04AM +0200, Jarkko Sakkinen wrote:
> key_garbage_collector() has a design that is not resistant enough for
> workqueue lockups. The duration scales up relative to the number of items
> in the serial tree, which causes a reoccuring theme of being guilty of
> causing workqueue lockups.
>
> Resolve the problem by processing in chunks:
>
> 1. Declare a static variable key_gc_work, which owns the garbage collection
> in-flight state, and key_schedule_gc_work() for re-scheduling the work.
> 2. Define KEY_GC_CHUNK_SIZE, set to 1024 keys, as the bound for the number
> of items scanned and destroyed.
> 3. Define KEY_GC_DESTROYING to mark resume to destruction without repeating
> the RCU grace period. Drain the graveyard before advancing key-type
> reaping.
> 4. Define KEY_GC_REAP_REQUESTED for preserving full-pass requests across
> the continuations.
>
> The following test was performed:
>
> 1. Add 499995 "unused" keys.
> 2. Add 499994 "expiring" keys i.e., keys with expiration times.
> 3. Clear the first keyring.
> 4. Wait for the timeouts expire from the second.
>
> When tested with QEMU using x86-64 and aarch64 (emulated) architectures the
> elapsed the results were the following:
>
> - x86-64: chunk max: 125 ms, total time increase: 5%
> - aarch64: chunk max: 235 ms, total time increase: 6%
>
> Tests were performed using a laptop with AMD 4650U (Zen 2 uarch) CPU.
>
> Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
The big picture here is that e.g., [1] might be a good idea (or might
not) but it would be a mistake to apply the patch before the data flow
overall has some sanity in it.
And with, I think, somewhat pretty modest changes the state has been
put in a nice box :-) Much better shovelling position I'd say.
[1] https://lore.kernel.org/keyrings/20261026031219.2627968-1-jarkko@kernel.org/
Br, Jarkko
next prev parent reply other threads:[~2026-10-28 3:15 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-28 2:53 [PATCH v2] KEYS: key_garbage_collector(): process in chunks Jarkko Sakkinen
2026-10-28 3:12 ` sashiko-bot
2026-10-28 3:15 ` Jarkko Sakkinen [this message]
2026-10-28 4:03 ` Jarkko Sakkinen
2026-10-29 2:03 ` Jarkko Sakkinen
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=auFo3KrYXWq3UKmi@kernel.org \
--to=jarkko@kernel.org \
--cc=James.Bottomley@hansenpartnership.com \
--cc=dhowells@redhat.com \
--cc=ebiggers@kernel.org \
--cc=jmorris@namei.org \
--cc=keyrings@vger.kernel.org \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=paul@paul-moore.com \
--cc=serge@hallyn.com \
--cc=zohar@linux.ibm.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.