Page MenuHomeFreeBSD
Authored By
rscheff
May 12 2020, 7:30 AM
Size
3 KB
Referenced Files
None
Subscribers
None

dctcp-post-recovery.pkt

// Testing DCTCP
--tolerance_usecs=20000
// Load and enable DCTCP module and flush hostcache
0.0 `if kldstat | grep -q cc_dctcp; then echo dctcp already loaded; else kldload cc_dctcp; fi`
+0.05 `sysctl net.inet.tcp.cc.algorithm=dctcp`
+0.05 `sysctl net.inet.tcp.cc.dctcp.alpha=512`
+0.05 `sysctl net.inet.tcp.cc.dctcp.shift_g=1` // make alpha very depended on last window
+0.05 `sysctl net.inet.tcp.initcwnd_segments=10`
+0.05 `sysctl net.inet.tcp.ecn.enable=1`
+0.05 `sysctl net.inet.tcp.hostcache.purgenow=1`
// Create a listening TCP socket.
0.50 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0.01 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0.01 setsockopt(3, SOL_SOCKET, SO_SNDBUF, [1048576], 4) = 0
+0.01 setsockopt(3, SOL_SOCKET, SO_DEBUG, [1], 4) = 0
+0.01 bind(3, ..., ...) = 0
+0.01 listen(3, 1) = 0
// Establish a TCP connection.
0.80 <[noecn] SEW 0:0(0) win 65535 <mss 1000, sackOK, wscale 10, eol, nop, nop >
+0.00 >[noecn] SE. 0:0(0) ack 1 win 65535 <...>
+0.00 <[noecn] . 1:1(0) ack 1 win 65535
+0.00 accept(3, ..., ...) = 4
+1.0 write(4, ..., 22000) = 22000
// Send IW plus 1 segment, check ECN bits
+0 %{
print("\t\t\tcwnd\tssthresh")
print("initial window:\t\t\t{}\t{}".format(tcpi_snd_cwnd, tcpi_snd_ssthresh))
if (tcpi_snd_cwnd < 10000):
print("Error - Initial Window smaller than 10 MSS!")
assert tcpi_snd_cwnd >= 10000
}%
+0 >[ect0] . 1:1001(1000) ack 1 win 1032
+0 >[ect0] . 1001:2001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 1 win 65535 <sack 1001:2001, eol, nop>
+0 >[ect0] . 2001:3001(1000) ack 1 win 1032
+0 >[ect0] . 3001:4001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 1 win 65535 <sack 1001:4001, eol, nop>
+0 >[ect0] . 4001:5001(1000) ack 1 win 1032
+0 >[ect0] . 5001:6001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 1 win 65535 <sack 1001:6001, eol, nop>
+0 >[ect0] . 6001:7001(1000) ack 1 win 1032
+0 >[ect0] . 7001:8001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 1 win 65535 <sack 1001:8001, eol, nop>
+0 >[ect0] . 8001:9001(1000) ack 1 win 1032
+0 >[ect0] . 9001:10001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 1 win 65535 <sack 1001:10001, eol, nop>
+0 >[ect0] W. 10001:11001(1000) ack 1 win 1032
+0 >[ect0] . 11001:12001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 1 win 65535 <sack 1001:12001, eol, nop>
+0 >[noecn] W. 1:1001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 12001 win 65535
+0 %{
print("after iw with all marks:\t{}\t{}".format(tcpi_snd_cwnd, tcpi_snd_ssthresh))
if not ((tcpi_snd_cwnd >= 2700) and (tcpi_snd_cwnd <= 3100)):
print("Error - Window after loss and all marks not around 1/4 of initial window!")
assert ((tcpi_snd_cwnd >= 2700) and (tcpi_snd_cwnd <= 3100))
}%
+0 >[ect0] . 12001:13001(1000) ack 1 win 1032
+0 >[ect0] . 13001:14001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 14001 win 65535
+0 >[ect0] . 14001:15001(1000) ack 1 win 1032
+0 >[ect0] W. 15001:16001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 16001 win 65535
+0 >[ect0] . 16001:17001(1000) ack 1 win 1032
+0 >[ect0] . 17001:18001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 18001 win 65535
+0 >[ect0] . 18001:19001(1000) ack 1 win 1032
+0 >[ect0] . 19001:20001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 20001 win 65535
+0 >[ect0] W. 20001:21001(1000) ack 1 win 1032
+0 >[ect0] P. 21001:22001(1000) ack 1 win 1032
+0 <[noecn] E. 1:1(0) ack 22001 win 65535
+0 %{
print("final window with all marks:\t{}\t{}".format(tcpi_snd_cwnd, tcpi_snd_ssthresh))
if not ((tcpi_snd_cwnd >= 5000) and (tcpi_snd_cwnd <= 5100)):
print("Error - Final window not around 5 MSS!")
assert ((tcpi_snd_cwnd >= 5000) and (tcpi_snd_cwnd <= 5100))
}%
+1.00 close(4) = 0
+0.00 >[noecn] F. 22001:22001(0) ack 1 <...>
+0.10 <[noecn] F. 1:1(0) ack 22002 win 65535
+0.00 >[noecn] . 22002:22002(0) ack 2 <...>
`sysctl net.inet.tcp.cc.algorithm=newreno`

File Metadata

Mime Type
text/plain
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2573255
Default Alt Text
dctcp-post-recovery.pkt (3 KB)

Event Timeline