Project

General

Profile

Bug #11553

Want pluggable TCP congestion control algorithms

Added by Cody Mello about 1 year ago. Updated about 1 year ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Category:
networking
Start date:
Due date:
% Done:

100%

Estimated time:
Difficulty:
Medium
Tags:
Gerrit CR:

Description

Sebastien Roy at Delphix ported FreeBSD's pluggable congestion control framework to their gate a while back. It would be nice to upstream this to gain new algorithms, and allow for supporting others in the future. The commits this is based on are:

- DLPX-25998 TCP congestion control is inadequate
- DLPX-56025 sunreno's tcp_cwnd_ssthresh should be halved after RTO

This will give us three different congestion control algorithms:

- CUBIC
- New Reno
- Sun Reno (the logic that can be currently found throughout tcp_input.c)

I pulled this into SmartOS in OS-7329, and made some additional changes.


Related issues

Related to illumos gate - Bug #11752: inet/cc.h should be shippedClosedAndy Fiddaman

Actions
#1

Updated by Cody Mello about 1 year ago

Running several iperf tests from my OmniOS VM on my laptop (going from San Francisco to Amsterdam) using the options -t 120 -P 8, I get:

Algorithm Run 1 Run 2 Run 3 Average
cubic 187 Mbits/sec 183 Mbits/sec 185 Mbits/sec 185 Mbits/sec
sunreno 183 Mbits/sec 184 Mbits/sec 184 Mbits/sec 183.66 Mbits/sec
newreno 183 Mbits/sec 186 Mbits/sec 184 Mbits/sec 184.33 Mbits/sec

Under these conditions, they're all doing about the same. On a server running SmartOS in Emeryville, California, going to the same Amsterdam server, using the options -t 120 -P 32, I get:

Algorithm Run 1 Run 2 Run 3 Run 4 Run 5 Average
cubic 1.46 Gbits/sec 1.42 Gbits/sec 1.53 Gbits/sec 1.54 Gbits/sec 1.59 Gbits/sec 1.508 Gbits/sec
sunreno 1.31 Gbits/sec 1.26 Gbits/sec 1.40 Gbits/sec 1.50 Gbits/sec 1.37 Gbits/sec 1.368 Gbits/sec
newreno 1.40 Gbits/sec 1.41 Gbits/sec 1.26 Gbits/sec 1.48 Gbits/sec 1.27 Gbits/sec 1.364 Gbits/sec

For additional testing using iperf (and some examples comparing measuring time in nanoseconds vs. ticks in the CUBIC module), see OS-7329.

#2

Updated by Electric Monk about 1 year ago

  • Status changed from New to Closed
  • % Done changed from 0 to 100

git commit 45a4b79d042e642c2ed7090ec290469ccf8fc563

commit  45a4b79d042e642c2ed7090ec290469ccf8fc563
Author: Sebastien Roy <seb@delphix.com>
Date:   2019-08-23T18:42:52.000Z

    11553 Want pluggable TCP congestion control algorithms
    Portions contributed by: Cody Peter Mello <cody.mello@joyent.com>
    Reviewed by: Dan McDonald <danmcd@joyent.com>
    Reviewed by: Robert Mustacchi <robert.mustacchi@joyent.com>
    Approved by: Richard Lowe <richlowe@richlowe.net>

#3

Updated by Andy Fiddaman about 1 year ago

  • Related to Bug #11752: inet/cc.h should be shipped added

Also available in: Atom PDF