GOPHERSPACE.DE - P H O X Y
gophering on hngopher.com
HN Gopher Feed (2017-09-06) - page 1 of 10
 
___________________________________________________________________
Playing with Kernel TLS in Linux 4.13 and Go
42 points by FiloSottile
https://blog.filippo.io/playing-with-kernel-tls-in-linux-4-13-an...
___________________________________________________________________
 
jsjohnst - 2 hours ago
So the question is, what's the result? Is it actually more
performant? If not, have you identified where further work is
needed to make it more performant?
 
  mirekrusin - 1 hours ago
  He hasn't managed to make it work - it kernel panics for him.He
  mentions that fb noticed significant performance improvement
  [1].You should see improvements in some cases, ie. when you can
  do zero-copy transfers (avoiding kernel->user and then
  user->kernel data copying), in other words when you pipe data
  from one socket/file to the other socket/file.[1]
  https://netdevconf.org/1.2/papers/ktls.pdf
 
    [deleted]
 
    lambda - 1 hours ago
    No, he said:> I ran a simple HTTPS web server with net/http,
    loaded a page on Chrome, and instead of causing a kernel
    panic...Followed by demonstrating it working.However, the point
    remains that he only got it working up to doing a toy hello
    world. The part that would be important for performance would
    be what he mentioned isn't finished, which is allowing it to be
    used with sendfile so that web servers can just sendfile over a
    TLS connection and let the kernel handle all of the IO.
 
topspin - 1 hours ago
That kernel patch sets off some alarms.  Dozens of goto statements
and many of them are not the common C exit/cleanup idiom; backwards
jumps are frequent and following some of these functions is
difficult.  tls_sw_sendmsg and tls_sw_sendpage have 8 and 5 goto
labels respectively.Ew.Might all be brilliant and flawless, but
it's not obvious.
 
  Thaxll - 53 minutes ago
  Linux kernel has a lot of goto in its code.
 
    yahna - 38 minutes ago
    Other than jump to exit stuff?
 
      cesarb - 7 minutes ago
      Yeah, the "goto retry" (jump back to the beginning of the
      function or the loop) is also common.
 
  cesarb - 8 minutes ago
  As someone who has contributed a bit to the Linux kernel, I agree
  with you that the use of goto in these two functions is...
  unusual. They do seem to fall into a few patterns, however.On a
  first look at the first function (tls_sw_sendmsg), we appear to
  have:- send_end is the normal cleanup target at the end of the
  function, that's common and found almost everywhere;-
  alloc_encrypted, alloc_plaintext, push_record seem to be "retry"
  labels, where the code goes back and tries again;-
  fallback_to_reg_send is the "then" case of an if, could be
  removed by inverting the sense of the test;- wait_for_sndbuf,
  wait_for_memory are in the style of a cleanup target, but they
  end by jumping to one of the "retry" labels above;- trim_sgl
  is... well, it seems an attempt to avoid code duplication, or
  something like that, the "goto trim_sgl;" could be replaced by
  "trim_both_sgl(sk, orig_size); goto send_end;"Yeah, this code
  looks more like assembly than C. That appears to be the kind of
  hand-optimized code usually reserved for hot functions, where the
  "normal" case encounters as few branches as possible; the
  fallback_to_reg_send case points to that (the normal case would
  be the one without the goto). So the way to understand the
  control flow of these functions would be: ignore the gotos on
  first reading, since that would be the normal case, and after
  that look at each goto and understand what it does.