Re: GSoc2010 project suggestion: swcryptX

Hubert Feyrer <[email protected]> Tue, 23 Feb 2010 00:36:18 +0100 (CET)
Newsgroups gmane.os.netbsd.current,gmane.os.netbsd.devel.crypto
Message-ID <[email protected]>
Hi,

On Mon, 22 Feb 2010, Thor Lancelot Simon wrote:
>>    This is where it gets fishy. ;) The existing opencrypto(4) framework
>>    probably needs to be make MP-aware at the same time, employing proper use
>>    of NetBSD's locking framework.
>
> You should read the existing code much more carefully before making this
> kind of lengthy proposal.  Most of what is proposed here is already done
> (allowing multiple CPUs to enter the various opencrypto components,
> including swcrypto, at the same time; converting opencrypto to modern
> locking).
>
> If you believe it's not, let's talk about the code.

You dig into the "MP-aware" part of my suggested project here, but I'm not 
sure if you read the rest - as far as the "MP-aware" part goes, this was 
probably bad wording on my side.

From my understanding of the code, opencrypto(9) spawns 1 kernel thread 
which then handles the actual crypto requests (crypto.c, crypto_init0() 
and cryptoret()). If a second opencrypto(9) call arrives while the first 
one is being handled, it is queued, and processed later 
(crypto_dispatch()).

The idea of my proposal is to make sure that more than one kernel thread 
exists to pick up such requests. I apologize for using the same 
terminology here.

As for the MP-safe part, have a look at the interaction of opencrypto(9) 
and rnd(9) in PR kern/42656, but this is not related here.


> The rest seems to me to be of questionable value, particularly
> jamming a heavy request-scheduling layer into the middle of the framework.
> I know Sam proposed this in the comments in his original code, but I would
> need to be persuaded via benchmarks that it could actually pay off.

I'm not sure more heavy request-scheduling is needed than is already 
there: Multiple providers of one crypto algorithms are already supported, 
and there is code to skip busy ones when issuing a new session (crypto.c, 
crypto_newsession()). I don't think much more is needed - just have each 
CPU that runs an swcrypto thread register their algorithms independently, 
and the existing code will pick up a free provider.

As for the "questionable" part: I agree that the suggested approach is 
pretty silly if you have a multithreaded userspace application - just run 
the crypto software in userland, and be fine. But there are in-kernel 
applications like IPsec, too, and only benchmarks will show if a specific 
application benefits from what I propose.

But for that the code has to be there first. :)


> I do think there are opencrypto-related projects that would be good
> candidates for SoC.  I don't think what you have proposed here is one.  I
> have listed several on the Wiki GSoc page...

I think they make sense, but they also require special and expensive 
hardware, where the idea behind my proposal is that you can get away 
without that to some extent.


  - Hubert