WPI TCP CUBIC in ns-3 CS577 Brett Levasseur 12/10/2013 Outline WPI Introduction CUBIC CUBIC in Linux ns-3 Implementation Results
Conclusions 12/10/2013 2 Introduction WPI TCP grows cwnd too slowly for large bandwidth connections New TCP Variant needed 10Gbps 120,000,000 Almost 1.4 hours to take up possible cwnd 100,000,000 Bytes
80,000,000 60,000,000 cwnd 40,000,000 20,000,000 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4
1.6 1,250 byte packets ssthresh ~ 8000 bytes 100ms RTT Hours 12/10/2013 3 CUBIC WPI BIC was first attempt CUBIC simplified and improved upon BIC Grow cwnd slower around loss events 12/10/2013
4 CUBIC Basics WPI cwnd growth Packet loss C CUBIC parameter t Elapsed time from the last window reduction K Time period to increase W to Wmax W Current cwnd
Wmax 12/10/2013 cwnd at last window reduction Window decrease constant 5 CUBIC Basics WPI 300 Wmax 250 200 150 100
50 W(t=0) 0 0 2 4 6 8 10 12 14 At loss event set Wmax, reduce cwnd by and calculate K
12/10/2013 6 CUBIC Basics WPI K 300 W(t=K) 250 W(t=2) 200 150 W(t=1) 100
50 0 0 2 4 6 8 10 12 14 16 18 20
cwnd grows back to K when t = K 12/10/2013 7 CUBIC in Linux WPI Not implemented as in the CUBIC paper cwnd grows in increments of segment sizes Custom method for calculating cube roots Checks for error conditions Unit scaling 12/10/2013
8 Growing cwnd WPI 1.2 Linux only grows cwnd by full segments CUBIC can grow cwnd less than full segment Same impact by increasing amount of time between updates 12/10/2013 1 0.8 0.6 0.4
0.2 0 0 1 2 3 4 5 0 0 1 0.25 0
0 2 0.5 4 1 3 0.75 4 1 9 Scaling in CUBIC WPI
Most scaling is related to time Variable t measured with TCP timestamps Timestamps use clock cycles to increment Units are called jiffies in the Linux Kernel Number of milliseconds in a jiffy depends on the CPUs clock Scaling required to get time units correct 12/10/2013 10 ns-3 Implementation WPI Object oriented design Generic TCP defined TCP variants are extended from base TCP headers and buffers
provided Added TcpCubic object tcp-cubic.cc tcp-cubic.h 12/10/2013 11 ns-3 Methods WPI NewAck called for every new ACK received Normal cwnd updates in slow start CUBIC updates otherwise DupAck called for every duplicate ACK received Normal operation when < 3 duplicates For 3 duplicate ACKs reduce cwnd 12/10/2013
12 CUBIC Methods WPI CubicRoot Find the cubic root of a number Based on Linux Kernel implementation CubicUpdate Calculate the cwnd target for CUBIC CubicTcpFriendliness Change the cwnd target for TCP Friendliness CubicReset Reset CUBIC parameters 12/10/2013 13 CUBIC Flow NewAck CubicUpdate
If outside slow start CubicRoot WPI CubicTcp Friendliness Set K for loss event Check TCP Friendliness Recommended cwnd growth 12/10/2013 14 Issues WPI
ns-3 does not have TCP timestamps Simulation clock used instead Requires adjustments to calculating t due to different units Could remove the use of jiffy code but much of the Linux implementation relies on scaling factors based on the system clock 12/10/2013 15 Results WPI Compare to real world CUBIC example Examine simulation results Verify cwnd reduction Verify cwnd growth in relation to Wmax Compare simulated CUBIC to simulated
NewReno 12/10/2013 16 Simulation Scenario WPI Simple sender and sink topology Packet sizes 536 bytes Transmission rate 1Mbps Delay 40ms Error rate Causes lost packets at the receiver 12/10/2013 17
Measurements WPI Measurement and simulation have similar CUBIC curve Number of segments similar 12/10/2013 18 Packet Loss WPI Before loss cwnd = 216 After loss cwnd = 172 = 819 BICTCP_BETA_SCALE = 1024
12/10/2013 19 CUBIC Growth WPI convex concave & convex concave Before and after additional scaling of t More work is needed for using simulator clock with t 12/10/2013 20 NewReno Comparison
WPI Same simulation run with CUBIC and NewReno Both increment the same under slow start CUBIC grows cwnd faster CUBIC handles packet loss better than NewReno 12/10/2013 21 Conclusions WPI Created a CUBIC implementation in ns-3 Similar cwnd growth to actual CUBIC
measurements Current version outperforms NewReno Scaling adjustments required 12/10/2013 22 Questions 12/10/2013 WPI 23