svn commit: r334804 - in head/sys: kern modules/tcp modules/tcp/rack netinet netinet/tcp_stacks sys

Randall Stewart rrs at netflix.com
Fri Jun 8 00:58:26 UTC 2018



> On Jun 7, 2018, at 6:01 PM, hiren panchasara <hiren at strugglingcoder.info> wrote:
> 
> On 06/07/18 at 06:18P, Randall Stewart wrote:
>> Author: rrs
>> Date: Thu Jun  7 18:18:13 2018
>> New Revision: 334804
>> URL: https://svnweb.freebsd.org/changeset/base/334804
>> 
>> Log:
>>  This commit brings in a new refactored TCP stack called Rack.
>>  Rack includes the following features:
>>   - A different SACK processing scheme (the old sack structures are not used).
>>   - RACK (Recent acknowledgment) where counting dup-acks is no longer done
>>          instead time is used to knwo when to retransmit. (see the I-D)
>>   - TLP (Tail Loss Probe) where we will probe for tail-losses to attempt
>>          to try not to take a retransmit time-out. (see the I-D)
>>   - Burst mitigation using TCPHTPS
>>   - PRR (partial rate reduction) see the RFC.
>> 
>>  Once built into your kernel, you can select this stack by either
>>  socket option with the name of the stack is "rack" or by setting
>>  the global sysctl so the default is rack.
>> 
>>  Note that any connection that does not support SACK will be kicked
>>  back to the "default" base  FreeBSD stack (currently known as "default").
>> 
>>  To build this into your kernel you will need to enable in your
>>  kernel:
>>     makeoptions WITH_EXTRA_TCP_STACKS=1
>>     options TCPHPTS
>> 
>>  Sponsored by:	Netflix Inc.
>>  Differential Revision:		https://reviews.freebsd.org/D15525
>> 
>> Added:
>>  head/sys/modules/tcp/rack/
>>  head/sys/modules/tcp/rack/Makefile   (contents, props changed)
>>  head/sys/netinet/tcp_stacks/rack.c   (contents, props changed)
>>  head/sys/netinet/tcp_stacks/rack_bbr_common.h   (contents, props changed)
>>  head/sys/netinet/tcp_stacks/sack_filter.c   (contents, props changed)
>>  head/sys/netinet/tcp_stacks/sack_filter.h   (contents, props changed)
>>  head/sys/netinet/tcp_stacks/tcp_rack.h   (contents, props changed)
>> Modified:
>>  head/sys/kern/uipc_sockbuf.c
>>  head/sys/modules/tcp/Makefile
>>  head/sys/netinet/tcp.h
>>  head/sys/netinet/tcp_log_buf.h
>>  head/sys/netinet/tcp_output.c
>>  head/sys/netinet/tcp_stacks/fastpath.c
>>  head/sys/netinet/tcp_timer.c
>>  head/sys/netinet/tcp_timer.h
>>  head/sys/netinet/tcp_var.h
>>  head/sys/sys/mbuf.h
>>  head/sys/sys/queue.h
>>  head/sys/sys/sockbuf.h
>>  head/sys/sys/time.h
> 
> I thought we'd have more time to review/test this. Looks like BSDCan
> commit-spree in effect. :-)

The Phabricator review has been up since May 22nd. Thats over 2.5 weeks,
this was also discussed on the Thursday conference calls.
> 
> A few questions:
> 1) Does RACK work reliably without HPTS? If yes, has that config been
> tested?
> 
No it requires the pacer.

> 2) It looks like PRR is tied to RACK. Why did we go that route?
> Shouldn't it be easily used with the 'default' stack also?
> 

It is what I developed.. and I had no desire to work with the default stack. That
is a fifth rail that no one wants touched.

> 3) Can new SACK be used with the traditional stack?

Well if you want to rework the base stack you might be able to do that :)

It would be quite some effort.. I think Robert wants eventually the old
stack to be de-composed and then slowly work at getting more common
code between them until eventually you can have a diff and somehow
figure out how to integrate the two.

> 
> 4) Where should manpage like info for RACK go? a new man-page or
> extending tcp(4)? Info like how to enable system-wide or per socket
> should go here.
> 

The enable/disable or per-socket I think is in with the pluggable stack
stuff. We might want a Rack man page.. have to think about it.



> 5) Any perf numbers to go along with this commit? Synthetic or
> production numbers showing improvements in transfer speed or any other
> impact on CPU usage (specially with HPTS) that you can share?
> 

CPU will be more but we see close to a drop in rebuffers by about 12% I am told.

> 6) In your testing, have you found cases where RACK does poorly compared
> to the 'default' stack? Any recommendations on when should RACK be
> enabled? (Something like this could go in the manpage.)

Nope. 

R

> 
> Glad to finally see this in -head!
> 
> Cheers,
> Hiren

--------
Randall Stewart
rrs at netflix.com
803-317-4952







More information about the svn-src-all mailing list