Re: writev over OpenSSL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2/3/20 7:00 AM, Michael Wojcik wrote:
>> From: openssl-users [mailto:openssl-users-bounces@xxxxxxxxxxx] On Behalf Of
>> Viktor Dukhovni
>> Sent: Sunday, February 02, 2020 11:10
>>
>> On Sun, Feb 02, 2020 at 05:28:19PM +0000, Salz, Rich via openssl-users wrote:
>>
>>> TLS/TLS will take your data and wrap it inside it’s own record
>>> structure.  It has to, that’s the nature of the protocol.  Thinking
>>> that a single writev() is “encrypt buffers and then do analogous
>>> syscall” is wrong.
>>
>> Right, the encryption is not in place, the user's data is copied for
>> encryption, by which point there's no incentive for a writev between
>> OpenSSL and the socket.
> 
> True. There's still an argument to be made for a gather-write at the application level, though. That would let the application say "here are multiple buffers of application data which should be coalesced into as few TLS records as possible, then encrypted and transmitted". It saves either a temporary buffer and memory copy prior to calling SSL_write at the application level, or sending short TLS records.
> 
> Back in '01 I suggested it would also be useful for applications using the BIO abstraction for both TLS conversations and for plaintext stream sockets. Eighteen and a half years later, I suspect that's not a common use case.
> 
> But in any case, as I noted in my previous message, if this enhancement is sufficiently valuable to someone they can always implement it and submit a PR.

Note that kernel offloaded TLS (KTLS) changes the calculus on all of this
as you could in fact do a single system call (hence SSL_sendfile()).  One
could perhaps have a SSL_writev() that did a single system call for KTLS
and fell back to a loop of SSL_write() calls otherwise.  However, you
wouldn't have a SSL_readv() equivalent which might feel odd from an API
perspective.

-- 
John Baldwin



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux