diff options
author | Kenneth Klette Jonassen <kennetkl@ifi.uio.no> | 2015-06-10 13:08:17 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-06-11 03:09:12 -0400 |
commit | 2b0a8c9eee81882fc0001ccf6d9af62cdc682f9e (patch) | |
tree | 840b6f52906cd97767d668f5a14df3f5b010a7fb /net/ipv4/Kconfig | |
parent | 7782ad8bb55c18f634a6713ec38c8f1ae86ad0b5 (diff) |
tcp: add CDG congestion control
CAIA Delay-Gradient (CDG) is a TCP congestion control that modifies
the TCP sender in order to [1]:
o Use the delay gradient as a congestion signal.
o Back off with an average probability that is independent of the RTT.
o Coexist with flows that use loss-based congestion control, i.e.,
flows that are unresponsive to the delay signal.
o Tolerate packet loss unrelated to congestion. (Disabled by default.)
Its FreeBSD implementation was presented for the ICCRG in July 2012;
slides are available at http://www.ietf.org/proceedings/84/iccrg.html
Running the experiment scenarios in [1] suggests that our implementation
achieves more goodput compared with FreeBSD 10.0 senders, although it also
causes more queueing delay for a given backoff factor.
The loss tolerance heuristic is disabled by default due to safety concerns
for its use in the Internet [2, p. 45-46].
We use a variant of the Hybrid Slow start algorithm in tcp_cubic to reduce
the probability of slow start overshoot.
[1] D.A. Hayes and G. Armitage. "Revisiting TCP congestion control using
delay gradients." In Networking 2011, pages 328-341. Springer, 2011.
[2] K.K. Jonassen. "Implementing CAIA Delay-Gradient in Linux."
MSc thesis. Department of Informatics, University of Oslo, 2015.
Cc: Eric Dumazet <edumazet@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: David Hayes <davihay@ifi.uio.no>
Cc: Andreas Petlund <apetlund@simula.no>
Cc: Dave Taht <dave.taht@bufferbloat.net>
Cc: Nicolas Kuhn <nicolas.kuhn@telecom-bretagne.eu>
Signed-off-by: Kenneth Klette Jonassen <kennetkl@ifi.uio.no>
Acked-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/Kconfig')
-rw-r--r-- | net/ipv4/Kconfig | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig index d83071dccd74..6fb3c90ad726 100644 --- a/net/ipv4/Kconfig +++ b/net/ipv4/Kconfig | |||
@@ -615,6 +615,22 @@ config TCP_CONG_DCTCP | |||
615 | For further details see: | 615 | For further details see: |
616 | http://simula.stanford.edu/~alizade/Site/DCTCP_files/dctcp-final.pdf | 616 | http://simula.stanford.edu/~alizade/Site/DCTCP_files/dctcp-final.pdf |
617 | 617 | ||
618 | config TCP_CONG_CDG | ||
619 | tristate "CAIA Delay-Gradient (CDG)" | ||
620 | default n | ||
621 | ---help--- | ||
622 | CAIA Delay-Gradient (CDG) is a TCP congestion control that modifies | ||
623 | the TCP sender in order to: | ||
624 | |||
625 | o Use the delay gradient as a congestion signal. | ||
626 | o Back off with an average probability that is independent of the RTT. | ||
627 | o Coexist with flows that use loss-based congestion control. | ||
628 | o Tolerate packet loss unrelated to congestion. | ||
629 | |||
630 | For further details see: | ||
631 | D.A. Hayes and G. Armitage. "Revisiting TCP congestion control using | ||
632 | delay gradients." In Networking 2011. Preprint: http://goo.gl/No3vdg | ||
633 | |||
618 | choice | 634 | choice |
619 | prompt "Default TCP congestion control" | 635 | prompt "Default TCP congestion control" |
620 | default DEFAULT_CUBIC | 636 | default DEFAULT_CUBIC |
@@ -646,6 +662,9 @@ choice | |||
646 | config DEFAULT_DCTCP | 662 | config DEFAULT_DCTCP |
647 | bool "DCTCP" if TCP_CONG_DCTCP=y | 663 | bool "DCTCP" if TCP_CONG_DCTCP=y |
648 | 664 | ||
665 | config DEFAULT_CDG | ||
666 | bool "CDG" if TCP_CONG_CDG=y | ||
667 | |||
649 | config DEFAULT_RENO | 668 | config DEFAULT_RENO |
650 | bool "Reno" | 669 | bool "Reno" |
651 | endchoice | 670 | endchoice |
@@ -668,6 +687,7 @@ config DEFAULT_TCP_CONG | |||
668 | default "veno" if DEFAULT_VENO | 687 | default "veno" if DEFAULT_VENO |
669 | default "reno" if DEFAULT_RENO | 688 | default "reno" if DEFAULT_RENO |
670 | default "dctcp" if DEFAULT_DCTCP | 689 | default "dctcp" if DEFAULT_DCTCP |
690 | default "cdg" if DEFAULT_CDG | ||
671 | default "cubic" | 691 | default "cubic" |
672 | 692 | ||
673 | config TCP_MD5SIG | 693 | config TCP_MD5SIG |