Spring 2023, Mondays 4:15-6:45 in Crown 105
February 7
Issues
Issues with implausible values of cwnd for
/proc/sys/net/ipv4/tcp_min_tso_segs
What about ethtool -K r-eth1 lro off, and ethtool -K r-eth1 gro off?
Graphing: gnuplot is available everywhere.
gnuplot> plot "3reno.out" with lines
Watch those quotation marks around the file name! They are essential.
Windows: put the gnuplot directory into your %PATH%.
What does TCP Cubic actually do?
Review the cwnd-increment strategy
Let's look at two Reno-Cubic scenarios.
For Reno, if W is the current window size, then the per-ACK increment to W is 1/W (so after a full window, we increment by 1)
For Cubic, the per-ACK increment is 𝚫W = W(t+𝚫t) - W(t) ≃ dW/dt 𝚫t, where 𝚫t is the time since the last ACK, which is generally the time it takes to send one packet on the bottleneck link.
Assumptions: RTT=50 ms
bdp (bandwidth-delay product) = 50 packets
Assume queue = 50, so Wmax = 100
Reno: W increases by 1/100 every ms at the right edge of the tooth, by 1/50 every ms at the left edge
Cubic: W(t) = C×(t−K)3 + Wmax K = (Wmax/2)1/3 = time between losses.
Recall 𝚫W = dW/dt 𝚫t.
𝚫t = 1 ms (time between packets), dW/dt = 3C(t-K)². 3C = 1.2. Max value at left edge of the tooth is 1.2K²
K here is about 3.7. Call it 4, which makes 1.2K² = 20.
Then 𝚫W, per packet, is about 20*(1/1000) = 1/50. Window increase is exactly the same as Reno
For Reno, bdp = 5000 packets. Assume queue = 3000, so Wmax = 8000.
Reno window increase per packet ranges between 1/4000 and 1/8000. (0.00025 to 0.000125)
Cubic: K = cuberoot(4000) ≃ 16
𝚫W = 1.2K² 𝚫t ≃ 300 𝚫t, where 𝚫t = time between ACKs = 0.01 ms = 0.00001 sec.
So 𝚫W ≃ 300/100,000 = 3/1000 = 0.003, 12x larger at left edge of tooth
Theory of competition
Theory of Reno-Reno competition
Mininet Reno-Cubic competition