Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 8 Jan 2021 19:46:10 -0500
From:      Andrew Gallatin <gallatin@cs.duke.edu>
To:        Steve Kargl <sgk@troutmask.apl.washington.edu>
Cc:        freebsd-arch@freebsd.org, Rick Macklem <rmacklem@uoguelph.ca>, Allan Jude <allanjude@freebsd.org>
Subject:   Re: Should we enable KERN_TLS on amd64 for FreeBSD 13?
Message-ID:  <10fb8ede-b8cf-645c-ceee-a9cb3f9fe39f@cs.duke.edu>
In-Reply-To: <20210108202256.GA7669@troutmask.apl.washington.edu>
References:  <8eff83e5-49bc-d410-626e-603c03877b80@cs.duke.edu> <20210108202256.GA7669@troutmask.apl.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On 1/8/21 3:22 PM, Steve Kargl wrote:
> On Fri, Jan 08, 2021 at 12:26:38PM -0500, Andrew Gallatin wrote:
>>
>> Kernel TLS (KTLS) support was added roughly a year ago, and provides
>> an efficient software or hardware accelerated path to have the kernel
>> (or the NIC) handle TLS crypto.  This is quite useful for web and
>> NFS servers, and provides a huge (2x -> 5x) efficiency gain by
>> avoiding data copies into userspace for crypto, and potentially
>> offloading the crypto to hardware.
>>
>> KTLS is well tested on amd64, having been used in production at Netflix
>> for nearly 4 years.   The vast majority of Netflix video has been served
>> via KTLS for the last few years.  Its what has allowed us to serve
>> 100Gb/s on Xeon 2697A cpus for years, and what allows us to serve
>> nearly 400Gb/s on AMD servers with NICs which support crypto offload.
>>
>> I have received a few requests to enable it by default in GENERIC, and
>> I'd like to get some opinions.
>>
>> There are essentially 3 options
>>
>> 1) Fully enable KTLS by adding 'options KERN_TLS' to GENERIC, and
>> flipping kern.ipc.tls.enable=1
>>
>> The advantage of this is that it "just works" out of the box for users,
>> and for reviewers.
>>
>> The drawback is that new code is thrust on unsuspecting users,
>> potentially exposing them to bugs that we have not found in our
>> somewhat limited web serving workload.
>>
>> 2) Enable KTLS in GENERIC, but leave it turned off by default.
>>
>> This option allows users to enable ktls without a rebuild of GENERIC,
>> but does not enable it by default. So they can enable it if they
>> know about it, but are protected from bugs.
>>
>> The disadvantages of this are that it increases the kernel size
>> by ~20K, starts up one thread per core on every amd64 machine,
>> and it adds more required tuning to get good performance from FreeBSD.
>>
>>
>> 3) Continue along with KTLS disabled in GENERIC
>>
>> This is the lowest risk, but adds a higher bar for users wanting
>> to use ktls.
>>
> 
> Drew,
> 
> For those that use a custom kernel configuration, would we need
> to add 'options KERN_TLS' to our config files, or can a module
> be loaded from the boot loader (ie. via /boot/loader.conf)?
> 
> I have no preference between 1 or 2, either seems acceptable to
> me for those running the bleeding edge.
> 

Its not as simple as just loading a module, you'd need to have
options KERN_TLS in your kernel config.  There are a few
places in the kernel with ifdefs for KERN_TLS (sendfile,
and sockets, for example).

Thank you for the feedback!

Drew



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?10fb8ede-b8cf-645c-ceee-a9cb3f9fe39f>