Rapid_v0.9: Experiments on ANI Testbed 10G Network

1. Experiments: One Rapid Flow on ani-testbed over a 10Gbps Link

Description: one rapid flow on anitestbed over a 10Gbps link with no cross traffic. All the paramters used is default for rapid_v0.9. And the upper bound for AB_est is 6Gbps.
Results: For comparison, experiments with one cubic/reno flow over the same 10Gbps link were done and all of them gave the throughput of nearyly 10Gbps. But with rapid, the throughput is less than 2Gbps. All work below is to figure out why the throughput is so few.

2. Problem-shooting:

It's found that before AB_est goes up to 4G, something unexpected happened which forced AB_est to return back to a small value. To analyze AB_est, log the probe array each time the AB_est decreased by 4Gbps. After studying the probe streams in the log, AB_est goes up and down frequently and to a large extent. Several reasons are summerized here for why AB_est suddenly increases or decreases:

Reasons for sudden increase in AB_est:

1) sudden decrease in sendgaps within this probe stream:

For example: for pid= 1912:
                     pid        sendgap recvgap size
prune stream for pid 1912: pos= 12 11576 7000 3076
prune stream for pid 1912: pos= 13 11576 5000 3076
prune stream for pid 1912: pos= 14 11576 4000 3076
prune stream for pid 1912: pos= 15 10082 5000 3076
prune stream for pid 1912: pos= 16 10082 5000 3076
prune stream for pid 1912: pos= 17 10082 3000 3076
prune stream for pid 1912: pos= 18 10082 3000 3076
prune stream for pid 1912: pos= 19 8782 3000 3076
prune stream for pid 1912: pos= 20 8782 5000 3076
prune stream for pid 1912: pos= 21 8782 4000 3076
prune stream for pid 1912: pos= 22 8782 6000 3076
prune stream for pid 1912: pos= 23 2874 26000 2116
prune stream for pid 1912: pos= 24 2874 3000 3076
prune stream for pid 1912: pos= 25 2874 2000 3076
prune stream for pid 1912: pos= 26 2874 2000 3076
prune stream for pid 1912: pos= 27 2502 3000 3076
prune stream for pid 1912: pos= 28 2502 2000 3076
prune stream for pid 1912: pos= 29 2502 5000 3076
prune stream for pid 1912: pos= 30 2502 1000 3076
prune stream for pid 1912: pos= 31 2178 2000 3076
prune stream for pid 1912: pos= 32 2178 2000 3076
prune stream for pid 1912: pos= 33 2178 36000 3076
prune stream for pid 1912: pos= 34 2178 2000 3076
prune stream for pid 1912: pos= 35 1896 1000 3076
prune stream for pid 1912: pos= 36 1896 2000 3076
prune stream for pid 1912: pos= 37 1896 2000 3076
prune stream for pid 1912: pos= 38 1896 2000 3076

prune stream for pid 3277: pos= 4 30498 10000 3076
prune stream for pid 3277: pos= 5 30498 13000 3076
prune stream for pid 3277: pos= 6 30498 29000 3076
prune stream for pid 3277: pos= 7 30498 13000 3076
prune stream for pid 3277: pos= 8 26566 7000 3076
prune stream for pid 3277: pos= 9 26566 27000 3076
prune stream for pid 3277: pos= 10 26566 9000 3076
prune stream for pid 3277: pos= 11 26566 8000 3076
prune stream for pid 3277: pos= 12 23140 25000 3076
prune stream for pid 3277: pos= 13 23140 8000 3076
prune stream for pid 3277: pos= 14 23140 20000 3076
prune stream for pid 3277: pos= 15 23140 11000 3076
prune stream for pid 3277: pos= 16 20156 11000 3076
prune stream for pid 3277: pos= 17 20156 19000 3076
prune stream for pid 3277: pos= 18 20156 7000 3076
prune stream for pid 3277: pos= 19 20156 6000 3076
prune stream for pid 3277: pos= 20 17556 9000 3076
prune stream for pid 3277: pos= 21 17556 21000 3076
prune stream for pid 3277: pos= 22 17556 8000 3076
prune stream for pid 3277: pos= 23 17556 13000 3076
prune stream for pid 3277: pos= 24 15292 6000 3076
prune stream for pid 3277: pos= 25 15292 6000 3076
prune stream for pid 3277: pos= 26 15292 5000 3076
prune stream for pid 3277: pos= 27 15292 18000 3076
prune stream for pid 3277: pos= 28 13320 9000 3076
prune stream for pid 3277: pos= 29 13320 5000 3076
prune stream for pid 3277: pos= 30 13320 5000 3076
prune stream for pid 3277: pos= 31 13320 9000 3076
prune stream for pid 3277: pos= 32 11602 7000 3076
prune stream for pid 3277: pos= 33 2006 3000 1804
prune stream for pid 3277: pos= 34 2006 4000 3076
prune stream for pid 3277: pos= 35 2006 3000 3076
prune stream for pid 3277: pos= 36 1746 3000 3076
prune stream for pid 3277: pos= 37 1746 4000 3076
prune stream for pid 3277: pos= 38 1746 3000 3076
prune stream for pid 3277: pos= 39 1746 3000 3076

The cumulative send gap decreased from 8792 to 2874 suddenly. But the sendrate calculated is absolutely right. The reason is that there are 8 segments of the same probing rate. When the size of segments is smaller than 1448 when computing the gap for the first segment ot the eight, that gap will be the assigned to the following 7 segments althought the sizes of segments are different.

2) the segments in the end of the previous probe stream were not acked
probe_id= 1917 pstream_abest= 1612.79328876655 prune_size= 5 pstream_size= 80 excursion= 0 sudden decrease 
probe_id= 1922 pstream_abest= 4099.96667777408 prune_size= 34 pstream_size= 80 excursion= 0 sudden increase 
Reasons for sudden decrease in AB_est:
1) in the end of this probe stream lots of segments were not acked
2) only one segment in the probe stream
3) send gap of the previous probe stream dropped:
AB_est= 522 send_rate= 323 Mbps id= 2300
AB_est= 585 send_rate= 354 Mbps id= 2301
AB_est= 4935 send_rate= 405 Mbps id= 2302 --> so abnormal! the gaps decreased for this probe stream
AB_est= 710 send_rate= 456 Mbps id= 2303
AB_est= 812 send_rate= 507 Mbps id= 2304
AB_est= 812 send_rate= 558 Mbps id= 2305

3. Conclusion and Solutions: