From: Catalin Marinas <catalin.marinas@arm.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: "jussi.kivilinna@iki.fi" <jussi.kivilinna@iki.fi>,
"herbert@gondor.apana.org.au" <herbert@gondor.apana.org.au>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-crypto@vger.kernel.org" <linux-crypto@vger.kernel.org>
Subject: Re: [PATCH v2 09/11] arm64/crypto: add voluntary preemption to Crypto Extensions SHA1
Date: Thu, 15 May 2014 18:24:59 +0100 [thread overview]
Message-ID: <20140515172458.GE1499@arm.com> (raw)
In-Reply-To: <1400091451-9117-10-git-send-email-ard.biesheuvel@linaro.org>
On Wed, May 14, 2014 at 07:17:29PM +0100, Ard Biesheuvel wrote:
> The Crypto Extensions based SHA1 implementation uses the NEON register file,
> and hence runs with preemption disabled. This patch adds a TIF_NEED_RESCHED
> check to its inner loop so we at least give up the CPU voluntarily when we
> are running in process context and have been tagged for preemption by the
> scheduler.
Sorry, I haven't got to the bottom of your series earlier and I now
realised that the last patches are not just new crypto algorithms.
> +static u8 const *sha1_do_update(struct shash_desc *desc, const u8 *data,
> + int blocks, u8 *head, unsigned int len)
> +{
> + struct sha1_state *sctx = shash_desc_ctx(desc);
> + struct thread_info *ti = NULL;
> +
> + /*
> + * Pass current's thread info pointer to sha1_ce_transform()
> + * below if we want it to play nice under preemption.
> + */
> + if ((IS_ENABLED(CONFIG_PREEMPT_VOLUNTARY) || IS_ENABLED(CONFIG_PREEMPT))
> + && (desc->flags & CRYPTO_TFM_REQ_MAY_SLEEP))
> + ti = current_thread_info();
> +
> + do {
> + int rem;
> +
> + kernel_neon_begin_partial(16);
> + rem = sha1_ce_transform(blocks, data, sctx->state, head, 0, ti);
> + kernel_neon_end();
> +
> + data += (blocks - rem) * SHA1_BLOCK_SIZE;
> + blocks = rem;
> + head = NULL;
> + } while (unlikely(ti && blocks > 0));
> + return data;
> +}
What latencies are we talking about? Would it make sense to always
call cond_resched() even if preemption is disabled?
With PREEMPT_VOLUNTARY I don't think the above code does any voluntary
preemption. The preempt_enable() in kernel_neon_end() only reschedules
if PREEMPT.
But I think we should have this loop always rescheduling if
CRYPTO_TFM_REQ_MAY_SLEEP. I can see there is a crypto_yield() function
that conditionally reschedules. What's the overhead of calling
sha1_ce_transform() in a loop vs a single call for the entire data?
--
Catalin
WARNING: multiple messages have this Message-ID (diff)
From: catalin.marinas@arm.com (Catalin Marinas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 09/11] arm64/crypto: add voluntary preemption to Crypto Extensions SHA1
Date: Thu, 15 May 2014 18:24:59 +0100 [thread overview]
Message-ID: <20140515172458.GE1499@arm.com> (raw)
In-Reply-To: <1400091451-9117-10-git-send-email-ard.biesheuvel@linaro.org>
On Wed, May 14, 2014 at 07:17:29PM +0100, Ard Biesheuvel wrote:
> The Crypto Extensions based SHA1 implementation uses the NEON register file,
> and hence runs with preemption disabled. This patch adds a TIF_NEED_RESCHED
> check to its inner loop so we at least give up the CPU voluntarily when we
> are running in process context and have been tagged for preemption by the
> scheduler.
Sorry, I haven't got to the bottom of your series earlier and I now
realised that the last patches are not just new crypto algorithms.
> +static u8 const *sha1_do_update(struct shash_desc *desc, const u8 *data,
> + int blocks, u8 *head, unsigned int len)
> +{
> + struct sha1_state *sctx = shash_desc_ctx(desc);
> + struct thread_info *ti = NULL;
> +
> + /*
> + * Pass current's thread info pointer to sha1_ce_transform()
> + * below if we want it to play nice under preemption.
> + */
> + if ((IS_ENABLED(CONFIG_PREEMPT_VOLUNTARY) || IS_ENABLED(CONFIG_PREEMPT))
> + && (desc->flags & CRYPTO_TFM_REQ_MAY_SLEEP))
> + ti = current_thread_info();
> +
> + do {
> + int rem;
> +
> + kernel_neon_begin_partial(16);
> + rem = sha1_ce_transform(blocks, data, sctx->state, head, 0, ti);
> + kernel_neon_end();
> +
> + data += (blocks - rem) * SHA1_BLOCK_SIZE;
> + blocks = rem;
> + head = NULL;
> + } while (unlikely(ti && blocks > 0));
> + return data;
> +}
What latencies are we talking about? Would it make sense to always
call cond_resched() even if preemption is disabled?
With PREEMPT_VOLUNTARY I don't think the above code does any voluntary
preemption. The preempt_enable() in kernel_neon_end() only reschedules
if PREEMPT.
But I think we should have this loop always rescheduling if
CRYPTO_TFM_REQ_MAY_SLEEP. I can see there is a crypto_yield() function
that conditionally reschedules. What's the overhead of calling
sha1_ce_transform() in a loop vs a single call for the entire data?
--
Catalin
next prev parent reply other threads:[~2014-05-15 17:25 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-14 18:17 [PATCH v2 00/11] arm64 crypto roundup Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
2014-05-14 18:17 ` [PATCH v2 01/11] arm64/crypto: SHA-1 using ARMv8 Crypto Extensions Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
2014-05-14 18:17 ` [PATCH v2 02/11] arm64/crypto: SHA-224/SHA-256 " Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
2014-05-14 18:17 ` [PATCH v2 03/11] arm64/crypto: GHASH secure hash " Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
2014-05-14 18:17 ` [PATCH v2 04/11] arm64/crypto: AES " Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
2014-05-14 18:17 ` [PATCH v2 05/11] arm64/crypto: AES in CCM mode " Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
2014-05-14 18:17 ` [PATCH v2 06/11] arm64: pull in <asm/simd.h> from asm-generic Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
2014-05-14 18:17 ` [PATCH v2 07/11] arm64/crypto: AES-ECB/CBC/CTR/XTS using ARMv8 NEON and Crypto Extensions Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
2014-05-14 18:17 ` [PATCH v2 08/11] arm64/crypto: add shared macro to test for NEED_RESCHED Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
2014-05-14 18:17 ` [PATCH v2 09/11] arm64/crypto: add voluntary preemption to Crypto Extensions SHA1 Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
2014-05-15 17:24 ` Catalin Marinas [this message]
2014-05-15 17:24 ` Catalin Marinas
2014-05-15 21:35 ` Ard Biesheuvel
2014-05-15 21:35 ` Ard Biesheuvel
2014-05-15 21:47 ` Catalin Marinas
2014-05-15 21:47 ` Catalin Marinas
2014-05-15 22:10 ` Ard Biesheuvel
2014-05-15 22:10 ` Ard Biesheuvel
2014-05-16 8:57 ` Catalin Marinas
2014-05-16 8:57 ` Catalin Marinas
2014-05-14 18:17 ` [PATCH v2 10/11] arm64/crypto: add voluntary preemption to Crypto Extensions SHA2 Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
2014-05-14 18:17 ` [PATCH v2 11/11] arm64/crypto: add voluntary preemption to Crypto Extensions GHASH Ard Biesheuvel
2014-05-14 18:17 ` Ard Biesheuvel
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=20140515172458.GE1499@arm.com \
--to=catalin.marinas@arm.com \
--cc=ard.biesheuvel@linaro.org \
--cc=herbert@gondor.apana.org.au \
--cc=jussi.kivilinna@iki.fi \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-crypto@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.