NUS-SNL/Gordon

Regarding the bandwidth switching

Closed this issue · 2 comments

Thank you again for sharing the source code of your paper. I am still working with your code to get more information on the Congestion Control Algorithm.

In your paper, you mentioned you limited the bottleneck bandwidth to 500 packets/s for the first 1500 packets received.
I want to adjust the bandwidth, so want to modify your code based on what you mentioned.

However, I couldn't find which part you limited the bottleneck bandwidth.

I found

Arguments    : 
<target> URL of the target host
<qd1> First queuing delay to be emulated in ms
<qd2> Second queuing delay to be emulated in ms
<trans-time> No. of packets, after which the delay must be changed

if the arguments are 5000 8000 1000, the First queuing delay will be 5000-microsecond delay per each response, the Second will be 8000 microseconds after getting 1000 packets.

Also, from your probe.c,

...
int cap = 500;
...
else if(acceptWindow < cap){		
		if(acceptWindow == emuDrop){
			ss=0;
			acceptWindow++;
			randomSeq = tseq;
			return nfq_set_verdict(qh, id, NF_DROP, 0, NULL);
		}
		else{
			acceptWindow++;
			return nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);
		}
	}
...

I think the capacity starts from 500 and it's checking if acceptWindow is bigger than 500, then dropWindow++.
Sorry, I couldn't fully understand the dropWindow and acceptWindow.

Could you please guide me on how to adjust or change the bandwidth? Thank you.

qd1 and qd2 refer to the interpacket arrival times (in microseconds) you want to emulate before and after the switch point, which happens after trans-time number of packets have been received. Note that each packet is delayed in the queue by qd1 and qd2 amount of time.

So, for example, if you want to emulate a bottleneck bandwidth of 1000 packets per-second for the first 1500 packets and 500 packets per second for the rest of the connection, qd1=1000, qd2=2000, and trans-time=1500

If you want to make this measurement over multiple trials, you should then call multiprober as follows:
./multiprober <URL> 1000 2000 1500 <num_of_trials>

acceptWindow keeps track of how many packets have been accepted by prober/multiprober in the current connection. dropWindow keeps track of the dropped packets in the current connection.
The code snippet you are referring to takes care of emulating a packet drop the first time it sees the window size increase above 80 packets (see emuDrop calculation here).

Thank you so much, I really appreciate your response and will check it thank you.