Summery of Problems and Suggestion for Modification
Problems Encountered in Previous Experiments:
1. Failure in grasping available bandwidth when there is any cross traffic (See Intra-protocol fairness experiments and Rapid with UDP Cross Traffic)
2. Sequential packets are rejected by the receiver after retransmissions because the timestamps in the data segments are smaller than those of retransmitted segments, which violates PAWS mechanism in RFC 1312. (See Rapid With UDP Cross Traffic) The root of this problem is that in rapid_v0.9 retransmitted segments are send out in prior to all the other segments.
3. Rapid flow needs sufficient send/receive buffers and congestion window to achieve full available bandwidth if BDP is large.(See Effect of Window Size)
4. There is abnormal decrease in gaps in some probe streams. The reason is that the current code only calculates the gap for the first segments of that group of segments with the same probing rate. But the size of the first segment might be smaller than the following segment, resulting in sudden decrease in gaps and increase in probing rate. ( See Experiments on 10G ANI-Testbed)
5. When determing AB_est for a probe stream, single-segment probe stream leads to a much lower AB_est. Besides, in many probe streams, at the tail of them lots of segments are no acknowledged. Thus even if there is no excursion detected from that pstream, the AB_est will be unexpected lower because AB_est computing algorithm only take into account several segments in the very beginning of that stream. (See Experiments on 10G ANI-Testbed)
Suggestion for Code Modification
1. To solve Problem 2, do not treat the retransmitted segments specially or send them ahead of all data segments. Try to assign a scheduled departure time for each retransmitted segment and schedule it with the scheduling heap.
2. For problem 3, enable autotuning cwin in rapid code to allocate enough send/receive buffers and congestion window size. Make MAX_IN_FLIGHT indepedent of BDP and irrelevant to cwin
3. For problem 4, to ensure the correct gaps, create gaps based on the probing rate and the size of that segment.
4. For problem 5, when computing AB_est for each probe stream, ignore those streams with only 1 segment in it. Besides, try to avoid declines in AB_est due to unacknowledged segments in the end of the probe stream. If at the end of one probe stream lots of segments are not acked, then if there's no excursion in that probe stream, keep AB_est the same as the previous probe stream to avoid unnecessary decrease. If there's any excursion, then use that AB_est to calculate the sendrate for the next probe stream.
5. Hopefully the solutions to the above problems will consequently solve Problem 1.