Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8ad8794

Browse files
committed
DCTCP (Data Center TCP) implementation.
DCTCP congestion control algorithm aims to maximise throughput and minimiselatency in data center networks by utilising the proportion of ExplicitCongestion Notification (ECN) marked packets received from capable hardware as acongestion signal.Highlights:Implemented as a mod_cc(4) module.ECN (Explicit congestion notification) processing is done differently fromRFC3168.Takes one-sided DCTCP into consideration where only one of the sides is usingDCTCP and other is using standard ECN.IETF draft:http://tools.ietf.org/html/draft-bensley-tcpm-dctcp-00Thesis report by Midori Kato:https://eggert.org/students/kato-thesis.pdfSubmitted by:Midori Kato <katoon@sfc.wide.ad.jp> andLars Eggert <lars@netapp.com>with help and modifications fromhirenDifferential Revision:https://reviews.freebsd.org/D604Reviewed by:gnn
1 parentaad2c3d commit8ad8794

File tree

8 files changed

+658
-1
lines changed

8 files changed

+658
-1
lines changed

‎share/man/man4/Makefile‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ MAN=aac.4 \
8686
cc_cdg.4\
8787
cc_chd.4\
8888
cc_cubic.4\
89+
cc_dctcp.4\
8990
cc_hd.4\
9091
cc_htcp.4\
9192
cc_newreno.4\

‎share/man/man4/cc_dctcp.4‎

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
.\"
2+
.\" Copyright (c) 2014 Midori Kato <katoon@sfc.wide.ad.jp>
3+
.\" Copyright (c) 2014 The FreeBSD Foundation
4+
.\" All rights reserved.
5+
.\"
6+
.\" Portions of this documentation were written at Keio University, Japan.
7+
.\"
8+
.\" Redistribution and use in source and binary forms, with or without
9+
.\" modification, are permitted provided that the following conditions
10+
.\" are met:
11+
.\" 1. Redistributions of source code must retain the above copyright
12+
.\" notice, this list of conditions and the following disclaimer.
13+
.\" 2. Redistributions in binary form must reproduce the above copyright
14+
.\" notice, this list of conditions and the following disclaimer in the
15+
.\" documentation and/or other materials provided with the distribution.
16+
.\"
17+
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18+
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19+
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20+
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
21+
.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22+
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23+
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24+
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25+
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26+
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27+
.\" SUCH DAMAGE.
28+
.\"
29+
.\" $FreeBSD$
30+
.\"
31+
.DdJanuary 12, 2015
32+
.Dt CC_DCTCP 4
33+
.Os
34+
.Sh NAME
35+
.Nmcc_dctcp
36+
.NdDCTCPCongestionControlAlgorithm
37+
.Sh DESCRIPTION
38+
The DCTCP (data center TCP) congestion control algorithm aims to maximise
39+
throughput and minimise latency in data center networks by utilising the
40+
proportion of Explicit Congestion Notification (ECN) marks received from capable
41+
hardware as a congestion signal.
42+
.Pp
43+
DCTCP uses fraction of ECN marked packets to update congestion window. The
44+
window reduction ratio is always <= 1/2. Only when all of the packets are
45+
marked, congestion window is halved.
46+
.Pp
47+
In order to keep the accuracy of the ECN marked fraction, a DCTCP receiver
48+
mirrors back incoming (or missing) CE marks by setting (or clearing) ECE marks.
49+
This feedback methodology is also adopted when the receiver uses delayed ACK.
50+
.Pp
51+
FreeBSD DCTCP implementation includes two minor modifications for the one-sided
52+
deployment. Considering the situation that DCTCP is used as sender and classic
53+
ECN is used as receiver, DCTCP sets the CWR flag as the reaction to the ECE
54+
flag. In addition, when classic ECN is used as sender and DCTCP is used as
55+
receiver, DCTCP avoids to mirror back ACKs only when the CWR flag is
56+
set in the incoming packet.
57+
.Pp
58+
The other specifications are based on the paper and Internet Draft referenced
59+
in the
60+
.SxSEEALSO
61+
section below.
62+
.Sh MIB Variables
63+
The algorithm exposes the following tunable variables in the
64+
.Vanet.inet.tcp.cc.dctcp
65+
branch of the
66+
.Xrsysctl3
67+
MIB:
68+
.Bl-tag-width".Va alpha"
69+
.ItVaalpha
70+
An initial estimator of the congestion on the link.
71+
Default is 0.
72+
.ItVadctcp_shift_g
73+
An estimation gain in the alpha calculation.
74+
Default is 16.
75+
.ItVaslowstart
76+
A trigger to halve congestion window after slow start.
77+
Default does nothing to halve window.
78+
.Sh SEE ALSO
79+
.Xrcc_chd4 ,
80+
.Xrcc_cubic4 ,
81+
.Xrcc_hd4 ,
82+
.Xrcc_htcp4 ,
83+
.Xrcc_newreno4 ,
84+
.Xrcc_vegas4 ,
85+
.Xrmod_cc4 ,
86+
.Xrtcp4 ,
87+
.Xrmod_cc9
88+
.Rs
89+
.%A "Mohammad Alizadeh"
90+
.%A "Albert Greenberg"
91+
.%A "David A. Maltz"
92+
.%A "Jitendra Padhye"
93+
.%A "Parveen Patel"
94+
.%A "Balaji Prabhakar"
95+
.%A "Sudipta Sengupta"
96+
.%A "Murari Sridharan"
97+
.%T "Data Center TCP (DCTCP)"
98+
.%U "http://research.microsoft.com/pubs/121386/dctcp-public.pdf"
99+
.%J "ACM SIGCOMM 2010"
100+
.%D "July 2010"
101+
.%P "63-74"
102+
.Re
103+
.Rs
104+
.%A "Stephen Bensley"
105+
.%A "Lars Eggert"
106+
.%A "Dave Thaler"
107+
.%T "Microsoft's Datacenter TCP (DCTCP): TCP Congestion Control for Datacenters"
108+
.%U "http://tools.ietf.org/html/draft-bensley-tcpm-dctcp-01"
109+
.Re
110+
.Sh HISTORY
111+
The
112+
.Nm
113+
congestion control module first appeared in
114+
.Fx11.0 .
115+
.Pp
116+
The module was first released in 2014 by Midori Kato studying at Keio
117+
University, Japan.
118+
.Sh AUTHORS
119+
.An-nosplit
120+
The
121+
.Nm
122+
congestion control module and this manual page were written by
123+
.AnMidoriKatokatoon@sfc.wide.ad.jp
124+
and
125+
.AnLarsEggertlars@netapp.com
126+
with help and modifications from
127+
.AnHirenPanchasarahiren@FreeBSD.org

‎share/man/man4/mod_cc.4‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
.\"
3131
.\" $FreeBSD$
3232
.\"
33-
.DdDecember 26, 2014
33+
.DdJanuary 12, 2015
3434
.Dt MOD_CC 4
3535
.Os
3636
.Sh NAME
@@ -78,6 +78,7 @@ MIB variable.
7878
.Xrcc_cdg4 ,
7979
.Xrcc_chd4 ,
8080
.Xrcc_cubic4 ,
81+
.Xrcc_dctcp4 ,
8182
.Xrcc_hd4 ,
8283
.Xrcc_htcp4 ,
8384
.Xrcc_newreno4 ,

‎sys/modules/cc/Makefile‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
SUBDIR=cc_cdg\
44
cc_chd\
55
cc_cubic\
6+
cc_dctcp\
67
cc_hd\
78
cc_htcp\
89
cc_vegas

‎sys/modules/cc/cc_dctcp/Makefile‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# $FreeBSD$
2+
3+
.PATH: ${.CURDIR}/../../../netinet/cc
4+
KMOD=cc_dctcp
5+
SRCS=cc_dctcp.c
6+
7+
.include <bsd.kmod.mk>

‎sys/netinet/cc.h‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ struct cc_var {
9090
/* cc_var flags. */
9191
#defineCCF_ABC_SENTAWND0x0001/* ABC counted cwnd worth of bytes? */
9292
#defineCCF_CWND_LIMITED0x0002/* Are we currently cwnd limited? */
93+
#defineCCF_DELACK0x0004/* Is this ack delayed? */
94+
#defineCCF_ACKNOW0x0008/* Will this ack be sent now? */
95+
#defineCCF_IPHDR_CE0x0010/* Does this packet set CE bit? */
96+
#defineCCF_TCPHDR_CWR0x0020/* Does this packet set CWR bit? */
9397

9498
/* ACK types passed to the ack_received() hook. */
9599
#defineCC_ACK0x0001/* Regular in sequence ACK. */
@@ -143,6 +147,9 @@ struct cc_algo {
143147
/* Called when data transfer resumes after an idle period. */
144148
void(*after_idle)(structcc_var*ccv);
145149

150+
/* Called for an additional ECN processing apart from RFC3168. */
151+
void(*ecnpkt_handler)(structcc_var*ccv);
152+
146153
STAILQ_ENTRY (cc_algo)entries;
147154
};
148155

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2026 Movatter.jp