1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
<table class="head">
<tr>
<td class="head-ltitle">CC_DCTCP(4)</td>
<td class="head-vol">Device Drivers Manual</td>
<td class="head-rtitle">CC_DCTCP(4)</td>
</tr>
</table>
<div class="manual-text">
<section class="Sh">
<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
<p class="Pp"><code class="Nm">cc_dctcp</code> — <span class="Nd">DCTCP
Congestion Control Algorithm</span></p>
</section>
<section class="Sh">
<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
<p class="Pp">The DCTCP (data center TCP) congestion control algorithm aims to
maximise throughput and minimise latency in data center networks by
utilising the proportion of Explicit Congestion Notification (ECN) marks
received from capable hardware as a congestion signal.</p>
<p class="Pp">DCTCP uses fraction of ECN marked packets to update congestion
window. The window reduction ratio is always <= 1/2. Only when all of the
packets are marked, congestion window is halved.</p>
<p class="Pp">In order to keep the accuracy of the ECN marked fraction, a DCTCP
receiver mirrors back incoming (or missing) CE marks by setting (or
clearing) ECE marks. This feedback methodology is also adopted when the
receiver uses delayed ACK.</p>
<p class="Pp">The <span class="Ux">FreeBSD</span> DCTCP implementation includes
two minor modifications for the one-sided deployment. Considering the
situation that DCTCP is used as sender and classic ECN is used as receiver,
DCTCP sets the CWR flag as the reaction to the ECE flag. In addition, when
classic ECN is used as sender and DCTCP is used as receiver, DCTCP avoids to
mirror back ACKs only when the CWR flag is set in the incoming packet.</p>
<p class="Pp">The other specifications are based on the paper and the RFC
referenced in the <a class="Sx" href="#SEE_ALSO">SEE ALSO</a> section
below.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="MIB_Variables"><a class="permalink" href="#MIB_Variables">MIB
Variables</a></h1>
<p class="Pp">The algorithm exposes the following tunable variables in the
<var class="Va">net.inet.tcp.cc.dctcp</var> branch of the
<a class="Xr">sysctl(3)</a> MIB:</p>
<dl class="Bl-tag">
<dt id="alpha"><var class="Va">alpha</var></dt>
<dd>The initial value to estimate the congestion on the link. The valid range
is from 0 to 1024, where 1024 reduces the congestion window to half, if a
CE is observed in the first window and <var class="Va">alpha</var> could
not yet adjust to the congestion level on that path. Default is 1024.</dd>
<dt id="shift_g"><var class="Va">shift_g</var></dt>
<dd>An estimation gain in the <var class="Va">alpha</var> calculation. This
influences the responsiveness when adjusting alpha to the most recent
observed window. Valid range from 0 to 10, the default is 4, resulting in
an effective gain of 1 / ( 2 ^ <var class="Va">shift_g</var> ), or
1/16th.</dd>
<dt id="slowstart"><var class="Va">slowstart</var></dt>
<dd>A flag if the congestion window should be reduced by one half after slow
start. Valid settings 0 and 1, default 0.</dd>
<dt id="ect1"><var class="Va">ect1</var></dt>
<dd>Controls if a DCTCP session should use IP ECT(0) marking when sending out
segments (default), or ECT(1) marking making use of L4S infrastructure.
Changes to this setting will only affect new sessions, existing sessions
will retain their previous marking value.</dd>
</dl>
</section>
<section class="Sh">
<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
ALSO</a></h1>
<p class="Pp"><a class="Xr">cc_cdg(4)</a>, <a class="Xr">cc_chd(4)</a>,
<a class="Xr">cc_cubic(4)</a>, <a class="Xr">cc_hd(4)</a>,
<a class="Xr">cc_htcp(4)</a>, <a class="Xr">cc_newreno(4)</a>,
<a class="Xr">cc_vegas(4)</a>, <a class="Xr">mod_cc(4)</a>,
<a class="Xr">tcp(4)</a>, <a class="Xr">mod_cc(9)</a></p>
<p class="Pp"><cite class="Rs"><span class="RsA">Mohammad Alizadeh</span>,
<span class="RsA">Albert Greenberg</span>, <span class="RsA">David A.
Maltz</span>, <span class="RsA">Jitendra Padhye</span>,
<span class="RsA">Parveen Patel</span>, <span class="RsA">Balaji
Prabhakar</span>, <span class="RsA">Sudipta Sengupta</span>, and
<span class="RsA">Murari Sridharan</span>, <span class="RsT">Data Center TCP
(DCTCP)</span>, <i class="RsJ">ACM SIGCOMM 2010</i>,
<a class="RsU" href="http://research.microsoft.com/pubs/121386/dctcp-public.pdf">http://research.microsoft.com/pubs/121386/dctcp-public.pdf</a>,
<span class="RsP">63-74</span>, <span class="RsD">July
2010</span>.</cite></p>
<p class="Pp"><cite class="Rs"><span class="RsA">Stephen Bensley</span>,
<span class="RsA">Dave Thaler</span>, <span class="RsA">Praveen
Balasubramanian</span>, <span class="RsA">Lars Eggert</span>, and
<span class="RsA">Glenn Judd</span>, <span class="RsT">Data Center TCP
(DCTCP): TCP Congestion Control for Data Centers</span>,
<a class="RsU" href="https://tools.ietf.org/html/rfc8257">https://tools.ietf.org/html/rfc8257</a>.</cite></p>
</section>
<section class="Sh">
<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
<p class="Pp">The <code class="Nm">cc_dctcp</code> congestion control module
first appeared in <span class="Ux">FreeBSD 11.0</span>.</p>
<p class="Pp">The module was first released in 2014 by Midori Kato studying at
Keio University, Japan.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
<p class="Pp">The <code class="Nm">cc_dctcp</code> congestion control module and
this manual page were written by <span class="An">Midori Kato</span>
<a class="Mt" href="mailto:katoon@sfc.wide.ad.jp">katoon@sfc.wide.ad.jp</a>
and <span class="An">Lars Eggert</span>
<a class="Mt" href="mailto:lars@netapp.com">lars@netapp.com</a> with help
and modifications from <span class="An">Hiren Panchasara</span>
<a class="Mt" href="mailto:hiren@FreeBSD.org">hiren@FreeBSD.org</a></p>
</section>
</div>
<table class="foot">
<tr>
<td class="foot-date">November 8, 2022</td>
<td class="foot-os">FreeBSD 15.0</td>
</tr>
</table>
|