From: Eric Biggers <ebiggers@kernel.org>
To: Holger Dengler <dengler@linux.ibm.com>
Cc: David Laight <david.laight.linux@gmail.com>,
Ard Biesheuvel <ardb@kernel.org>,
"Jason A . Donenfeld" <Jason@zx2c4.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
Harald Freudenberger <freude@linux.ibm.com>,
linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org
Subject: Re: [PATCH v2 1/1] lib/crypto: tests: Add KUnit tests for AES
Date: Wed, 28 Jan 2026 17:18:38 -0800 [thread overview]
Message-ID: <20260129011838.GG2024@quark> (raw)
In-Reply-To: <20260119121210.2662-2-dengler@linux.ibm.com>
On Mon, Jan 19, 2026 at 01:12:10PM +0100, Holger Dengler wrote:
> +static __always_inline u64 time_aes_op(bool encrypt, struct aes_key *aes_key,
> + u8 *out, const u8 *in)
> +{
> + void (*aes_op)(const struct aes_key *key, u8 *out, const u8 *in);
> + u64 t;
> +
> + aes_op = encrypt ? &aes_encrypt : &aes_decrypt;
> +
> + preempt_disable();
> + t = ktime_get_ns();
> + aes_op(aes_key, out, in);
> + t = ktime_get_ns() - t;
> + preempt_enable();
> +
> + return t;
> +}
> +
> +static void benchmark_aes(struct kunit *test, const struct aes_testvector *tv)
> +{
> + const size_t num_iters = 100;
> + struct aes_key aes_key;
> + u8 out[AES_BLOCK_SIZE];
> + u64 t, t_enc, t_dec;
> + int rc;
> +
> + if (!IS_ENABLED(CONFIG_CRYPTO_LIB_BENCHMARK))
> + kunit_skip(test, "not enabled");
> +
> + rc = aes_preparekey(&aes_key, tv->key.b, tv->key.len);
> + KUNIT_ASSERT_EQ(test, 0, rc);
> +
> + /* warm-up */
> + for (size_t i = 0; i < num_iters; i++) {
> + aes_encrypt(&aes_key, out, tv->plain);
> + aes_decrypt(&aes_key, out, tv->cipher);
> + }
> +
> + t_enc = NSEC_PER_SEC;
> + t_dec = NSEC_PER_SEC;
> + for (size_t i = 0; i < num_iters; i++) {
> + t = time_aes_op(true, &aes_key, out, tv->plain);
> + t_enc = MIN_T(u64, t, t_enc);
> +
> + t = time_aes_op(false, &aes_key, out, tv->cipher);
> + t_dec = MIN_T(u64, t, t_dec);
> + }
> +
> + kunit_info(test, "enc (len=%zu): %llu MB/s", (size_t)AES_BLOCK_SIZE,
> + div64_u64(AES_BLOCK_SIZE * NSEC_PER_SEC / 1000000,
> + (t_enc ?: 1)));
> + kunit_info(test, "dec (len=%zu): %llu MB/s", (size_t)AES_BLOCK_SIZE,
> + div64_u64(AES_BLOCK_SIZE * NSEC_PER_SEC / 1000000,
> + (t_dec ?: 1)));
> +}
"AES_BLOCK_SIZE * NSEC_PER_SEC" is missing a cast to u64, as reported by
the kernel test robot.
But also as discussed in v1, using ktime_get_ns() to time one AES block
en/decryption at a time doesn't really work. Even on x86 which has a
high precision timer, it's spending longer getting the time than doing
the actual AES en/decryption.
You may have meant to use get_cycles() instead, which has less overhead.
However, not all architectures have a cycle counter.
So I recommend we go with the simple strategy that I suggested, and
which v1 had. Just the number of iterations in v1 was way too high.
- Eric
next prev parent reply other threads:[~2026-01-29 1:18 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-19 12:12 [PATCH v2 0/1] lib/crypto: tests: KUnit test-suite for AES Holger Dengler
2026-01-19 12:12 ` [PATCH v2 1/1] lib/crypto: tests: Add KUnit tests " Holger Dengler
2026-01-19 16:39 ` kernel test robot
2026-01-19 17:22 ` kernel test robot
2026-01-19 20:31 ` kernel test robot
2026-01-29 1:18 ` Eric Biggers [this message]
2026-01-30 10:54 ` Holger Dengler
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=20260129011838.GG2024@quark \
--to=ebiggers@kernel.org \
--cc=Jason@zx2c4.com \
--cc=ardb@kernel.org \
--cc=david.laight.linux@gmail.com \
--cc=dengler@linux.ibm.com \
--cc=freude@linux.ibm.com \
--cc=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.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 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.