<div dir="ltr">Thanks a lot @<span style="font-size:12.8000001907349px">Kathleen Nichols for showing me the path.</span><div><span style="font-size:12.8000001907349px">Best Regards</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 23, 2015 at 2:56 AM, <span dir="ltr"><<a href="mailto:codel-request@lists.bufferbloat.net" target="_blank">codel-request@lists.bufferbloat.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Send Codel mailing list submissions to<br>
<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
<a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
or, via email, send a message with subject or body 'help' to<br>
<a href="mailto:codel-request@lists.bufferbloat.net">codel-request@lists.bufferbloat.net</a><br>
<br>
You can reach the person managing the list at<br>
<a href="mailto:codel-owner@lists.bufferbloat.net">codel-owner@lists.bufferbloat.net</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of Codel digest..."<br>
<br>
<br>
Today's Topics:<br>
<br>
1. Re: Codel Digest, Vol 29, Issue 4 (Kathleen Nichols)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Sun, 22 Feb 2015 13:25:52 -0800<br>
From: Kathleen Nichols <<a href="mailto:nichols@pollere.com">nichols@pollere.com</a>><br>
To: <a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a><br>
Subject: Re: [Codel] Codel Digest, Vol 29, Issue 4<br>
Message-ID: <<a href="mailto:54EA4960.8030709@pollere.com">54EA4960.8030709@pollere.com</a>><br>
Content-Type: text/plain; charset=windows-1252<br>
<br>
<br>
I used TCP/Linux because it was closer to what is out there in a lot of<br>
boxes<br>
that people use and I think there may have been some ns-2 reason also but<br>
I'm thankfully not using simulators currently, spending more time with<br>
traces<br>
and lab stuff. You can and should use anything you want.<br>
<br>
Reverse ftps are used to create a flow of acks in the the monitored<br>
direction. This<br>
can make a huge difference in what you observe. I believe the first work<br>
on this might<br>
be something Lixia Zhang published as a grad student and I also found<br>
this in early<br>
simulation work I did. You could read about it and you can also do<br>
different experiments<br>
yourself to see how results differ. You might also read<br>
<a href="http://queue.acm.org/detail.cfm?id=2209336" target="_blank">http://queue.acm.org/detail.cfm?id=2209336</a> and some of the references cited.<br>
<br>
On 2/22/15 6:35 AM, kanu monga wrote:<br>
> Thank you so much for replying. i really appreciate it.<br>
> i have two more questions:<br>
> (1) what is the concept of using TCP/Linux with codel. can't we use<br>
> other TCP Variants<br>
> (2) N what is purpose of using reverse ftps<br>
><br>
><br>
> On Fri, Feb 20, 2015 at 11:32 PM, <<a href="mailto:codel-request@lists.bufferbloat.net">codel-request@lists.bufferbloat.net</a><br>
> <mailto:<a href="mailto:codel-request@lists.bufferbloat.net">codel-request@lists.bufferbloat.net</a>>> wrote:<br>
><br>
> Send Codel mailing list submissions to<br>
> <a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a> <mailto:<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>><br>
><br>
> To subscribe or unsubscribe via the World Wide Web, visit<br>
> <a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
> or, via email, send a message with subject or body 'help' to<br>
> <a href="mailto:codel-request@lists.bufferbloat.net">codel-request@lists.bufferbloat.net</a><br>
> <mailto:<a href="mailto:codel-request@lists.bufferbloat.net">codel-request@lists.bufferbloat.net</a>><br>
><br>
> You can reach the person managing the list at<br>
> <a href="mailto:codel-owner@lists.bufferbloat.net">codel-owner@lists.bufferbloat.net</a><br>
> <mailto:<a href="mailto:codel-owner@lists.bufferbloat.net">codel-owner@lists.bufferbloat.net</a>><br>
><br>
> When replying, please edit your Subject line so it is more specific<br>
> than "Re: Contents of Codel digest..."<br>
><br>
><br>
> Today's Topics:<br>
><br>
> 1. Re: Codel code (Kathleen Nichols)<br>
> 2. Re: Codel code (Dave Taht)<br>
> 3. Setpoint in CoDel (Anjali Chawla)<br>
> 4. Re: Setpoint in CoDel (Dave Taht)<br>
> 5. Re: Setpoint in CoDel (Dave Taht)<br>
><br>
><br>
> ----------------------------------------------------------------------<br>
><br>
> Message: 1<br>
> Date: Thu, 19 Feb 2015 13:34:14 -0800<br>
> From: Kathleen Nichols <<a href="mailto:nichols@pollere.com">nichols@pollere.com</a><br>
> <mailto:<a href="mailto:nichols@pollere.com">nichols@pollere.com</a>>><br>
> To: <a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a> <mailto:<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>><br>
> Subject: Re: [Codel] Codel code<br>
> Message-ID: <<a href="mailto:54E656D6.5010308@pollere.com">54E656D6.5010308@pollere.com</a><br>
> <mailto:<a href="mailto:54E656D6.5010308@pollere.com">54E656D6.5010308@pollere.com</a>>><br>
> Content-Type: text/plain; charset=windows-1252<br>
><br>
><br>
> I'll reply list in case anyone else is interested. Just delete if you<br>
> are fortunate enough to<br>
> have nothing to do with ns-2.<br>
><br>
> First of all, I'm as much a victim of ns-2's tcl as the next person and<br>
> secondly, I will<br>
> tell you what I remember without looking at the c++ code, but would<br>
> recommend<br>
> you take a look at that for some of the settings.<br>
><br>
> The first commented line just shows how you can set stuff on the command<br>
> line and what<br>
> the different variables are. This particular script is using PackMime to<br>
> generate web<br>
> traffic though there is also an update of a web script I wrote many<br>
> years ago and<br>
> CableLabs paid me to update. I also used that for some codel tests. So<br>
> this can run<br>
> a mix of f ftp connections, w web connections per sec, c constant bit<br>
> rate connections<br>
> through a bottleneck of b Mbps. Use s to set the file size that the ftps<br>
> transfer and if<br>
> set to -1 the ftps are infinite, that is don't terminate over the<br>
> simulation run. This avoids<br>
> lots of slow starts. d is something I used to get the dynamic bandwidth<br>
> thing to work,<br>
> that is it makes the bottleneck link change periodically (you can see<br>
> the plot of this<br>
> in the ACM CoDel paper). Reverse ftps are sourced at the opposite end of<br>
> the bottleneck<br>
> so they create acks in the "forward" direction.<br>
><br>
> There is a routine called build_cbr and that's where the rate and packet<br>
> size for the CBRs is set. This sets dynamic bw to 0 so the bandwidth<br>
> doesn't change unless set in the command line to do so. I don't remember<br>
> off hand what greedy is. I think it sets one<br>
> ftp to be "greedy".<br>
><br>
> A bunch of this you should try to figure out for yourself by looking at<br>
> ns2 documentation<br>
> and perhaps at the agent .cc files.<br>
><br>
> The nominal RTT is what is "expected" and is used as the interval but<br>
> the real rtt is what<br>
> is actually experienced in the particular experiment. I will use this<br>
> opportunity once again<br>
> to note that CoDel is actually more sensitive to this parameter than to<br>
> target in the sense<br>
> that excess drops will happen if the real rtt is longer than the<br>
> interval (I keep trying to<br>
> explain this but no one hears it.)<br>
><br>
> Code to set the random seed. Sometimes you want different runs to use<br>
> different random<br>
> seeds and sometimes you want to run exactly the same scenario.<br>
><br>
> There's a bunch of parameters to the TCP agents. Some of these are in<br>
> ns2 documentation,<br>
> but you can find it in the code also.<br>
><br>
> Just a note that I couldn't get the ns2 TCP/Linux code to work the way<br>
> it was supposed to,<br>
> specifically the idle() routine never seemed to get called. (This sort<br>
> of thing is pretty<br>
> common with ns2) and I didn't want to waste a lot of time untangling the<br>
> tcl-c++<br>
> relationship in ns2. Anyway, so I wrote those tcl procedures to get the<br>
> ftps to restart.<br>
> I wanted to run more modern TCPs, hence use of the Linux TCP.<br>
><br>
> The dynamic bandwidth thing changes the bandwidth and preset times. It<br>
> does it by multiplying the original bandwidth so I set up an array of<br>
> the mulipliers. I'm sure there's<br>
> a more elegant way to do it but, at this stage of my life, I have<br>
> accepted that I don't do<br>
> elegant. I'm more of a "get the job done" kind of coder. And I really<br>
> don't like ns2 so I<br>
> generally find it works better to just whack it with a hammer rather<br>
> than to try to do<br>
> something beautifully. Note, as above, that a lot of the stuff in ns2<br>
> just doesn't work.<br>
><br>
> There is code to build up the topology which shouldn't be that hard to<br>
> figure out.<br>
><br>
> Kathie<br>
><br>
> On 2/18/15 11:19 PM, kanu monga wrote:<br>
> > is there anyone who can help me in understanding tcl code of<br>
> codel(given<br>
> > below)<br>
> > This one is quite complex for me.<br>
> > please help if you can.<br>
> > Thanks in advance.<br>
> ><br>
> > ###################################################################<br>
> ><br>
> ><br>
> > # ns codel.tcl f w c {b}Mb s d r<br>
> > # where:<br>
> > #f = # ftps<br>
> > #w = # PackMime connections per second<br>
> > #c = # CBRs<br>
> > #b = bottleneck bandwidth in Mbps<br>
> > #s = filesize for ftp, -1 for infinite<br>
> > #d = dynamic bandwidth, if non-zero, changes (kind of kludgey)<br>
> > #have to set the specific change ratios in this file (below)<br>
> > #r = number of "reverse" ftps<br>
> ><br>
> > set stopTime 300<br>
> > set ns [new Simulator]<br>
> ><br>
> > # These are defaults if values not set on command line<br>
> ><br>
> > set num_ftps 1<br>
> > set web_rate 0<br>
> > set revftp 0<br>
> > set num_cbrs 0<br>
> > #rate and packetSize set in build_cbr<br>
> > set bottleneck 3Mb<br>
> > #for a 10MB ftp<br>
> > set filesize 10000000<br>
> > set dynamic_bw 0<br>
> > set greedy 0<br>
> ><br>
> > # Parse command line<br>
> ><br>
> > if {$argc >= 1} {<br>
> > set num_ftps [lindex $argv 0]<br>
> > if {$argc >= 2} {<br>
> > set web_rate [lindex $argv 1]<br>
> > if {$argc >= 3} {<br>
> > set num_cbrs [lindex $argv 2]<br>
> > if {$argc >= 4} {<br>
> > set bottleneck [lindex $argv 3]<br>
> > if {$argc >= 5} {<br>
> > set filesize [lindex $argv 4]<br>
> > if {$argc >= 6} {<br>
> > set dynamic_bw [lindex $argv 5]<br>
> > if {$argc >= 7} {<br>
> > set revftp [lindex $argv 6]<br>
> > }<br>
> > }<br>
> > }<br>
> > }<br>
> > }<br>
> > }<br>
> > }<br>
> ><br>
> > set bw [bw_parse $bottleneck]<br>
> > if { $revftp >= 1} {<br>
> > set num_revs $revftp<br>
> > } else {<br>
> > set num_revs 0<br>
> > }<br>
> > puts "ftps $num_ftps webrate $web_rate cbrs $num_cbrs bw $bw filesize<br>
> > $filesize reverse $num_revs"<br>
> ><br>
> > # experiment settings<br>
> > set psize 1500<br>
> > if { $bw < 1000000} { set psize 500 }<br>
> > set nominal_rtt [delay_parse 100ms]<br>
> > set accessdly 20<br>
> > set bdelay 10<br>
> > set realrtt [expr 2*(2*$accessdly + $bdelay)]<br>
> > puts "accessdly $accessdly bneckdly $bdelay realrtt $realrtt<br>
> bneckbw $bw"<br>
> ><br>
> > # CoDel values<br>
> > # interval to keep min over<br>
> > set interval [delay_parse 100ms]<br>
> > # target in ms.<br>
> > set target [delay_parse 5ms]<br>
> ><br>
> > global defaultRNG<br>
> > $defaultRNG seed 0<br>
> > ns-random 0<br>
> > #$defaultRNG seed 54321<br>
> > #ns-random 23145<br>
> ><br>
> > # ------- config info is all above this line ----------<br>
> ><br>
> > #bdp in packets, based on the nominal rtt<br>
> > set bdp [expr round($bw*$nominal_rtt/(8*$psize))]<br>
> ><br>
> > Trace set show_tcphdr_ 1<br>
> > set startTime 0.0<br>
> ><br>
> > #TCP parameters - have to set both for FTPs and PackMime<br>
> ><br>
> > Agent/TCP set window_ [expr $bdp*16]<br>
> > Agent/TCP set segsize_ [expr $psize-40]<br>
> > Agent/TCP set packetSize_ [expr $psize-40]<br>
> > Agent/TCP set windowInit_ 4<br>
> > Agent/TCP set segsperack_ 1<br>
> > Agent/TCP set timestamps_ true<br>
> > set delack 0.4<br>
> > Agent/TCP set interval_ $delack<br>
> ><br>
> > Agent/TCP/FullTcp set window_ [expr $bdp*16]<br>
> > Agent/TCP/FullTcp set segsize_ [expr $psize-40]<br>
> > Agent/TCP/FullTcp set packetSize_ [expr $psize-40]<br>
> > Agent/TCP/FullTcp set windowInit_ 4<br>
> > Agent/TCP/FullTcp set segsperack_ 1<br>
> > Agent/TCP/FullTcp set timestamps_ true<br>
> > Agent/TCP/FullTcp set interval_ $delack<br>
> ><br>
> ><br>
> > Agent/TCP/Linux instproc done {} {<br>
> > global ns filesize<br>
> > #this doesn't seem to work, had to hack tcp-linux.cc to do repeat ftps<br>
> > $self set closed_ 0<br>
> > #needs to be delayed by at least .3sec to slow start<br>
> > puts "[$ns now] TCP/Linux proc done called"<br>
> > $ns at [expr [$ns now] + 0.3] "$self send $filesize"<br>
> > }<br>
> ><br>
> > # problem is that idle() in tcp.cc never seems to get called...<br>
> > Application/FTP instproc resume {} {<br>
> > puts "called resume"<br>
> > global filesize<br>
> > $self send $filesize<br>
> > #$ns at [expr [$ns now] + 0.5] "[$self agent] reset"<br>
> > $ns at [expr [$ns now] + 0.5] "[$self agent] send $filesize"<br>
> > }<br>
> ><br>
> > Application/FTP instproc fire {} {<br>
> > global filesize<br>
> > $self instvar maxpkts_<br>
> > set maxpkts_ $filesize<br>
> > [$self agent] set maxpkts_ $filesize<br>
> > $self send $maxpkts_<br>
> > puts "fire() FTP"<br>
> > }<br>
> ><br>
> > #buffersizes<br>
> > set buffersize [expr $bdp]<br>
> > set buffersize1 [expr $bdp*10]<br>
> ><br>
> > Queue/CoDel set target_ $target<br>
> > Queue/CoDel set interval_ $interval<br>
> ><br>
> > #set Flow_id 1<br>
> ><br>
> > proc build_topology { ns } {<br>
> > # nodes n0 and n1 are the server and client side gateways and<br>
> > # the link between them is the congested slow link. n0 -> n1<br>
> > # handles all the server to client traffic.<br>
> > #<br>
> > # if the web_rate is non-zero, node n2 will be the packmime<br>
> server cloud<br>
> > # and node n3 will be the client cloud.<br>
> > #<br>
> > # num_ftps server nodes and client nodes are created for the ftp<br>
> > sessions.<br>
> > # the first client node is n{2+w} and the first server node is<br>
> n{2+f+w}<br>
> > # where 'f' is num_ftps and 'w' is 1 if web_rate>0 and 0<br>
> otherwise.<br>
> > # servers will be even numbered nodes, clients odd<br>
> > # Warning: the numbering here is ridiculously complicated<br>
> ><br>
> > global bw bdelay accessdly buffersize buffersize1 filesize<br>
> node_cnt<br>
> > set node_cnt 2<br>
> ><br>
> > # congested link<br>
> > global n0 n1<br>
> > set n0 [$ns node]<br>
> > set n1 [$ns node]<br>
> > $ns duplex-link $n0 $n1 $bw ${bdelay}ms CoDel<br>
> > $ns duplex-link-op $n0 $n1 orient right<br>
> > $ns duplex-link-op $n0 $n1 queuePos 0.5<br>
> > $ns duplex-link-op $n1 $n0 queuePos 1.5<br>
> > $ns queue-limit $n0 $n1 $buffersize<br>
> > $ns queue-limit $n1 $n0 $buffersize<br>
> > set node_cnt 2<br>
> ><br>
> > #dynamic bandwidth<br>
> > # these are the multipliers for changing bw, times initial set bw<br>
> > # edit these values to get different patterns<br>
> > global stopTime dynamic_bw<br>
> > array names bw_changes<br>
> > set bw_changes(1) 0.1<br>
> > set bw_changes(2) 0.01<br>
> > set bw_changes(3) 0.5<br>
> > set bw_changes(4) 0.01<br>
> > set bw_changes(5) 1.0<br>
> ><br>
> > puts "bottleneck starts at [[[$ns link $n0 $n1] link] set<br>
> > bandwidth_]bps"<br>
> > for {set k 1} {$k <= $dynamic_bw} {incr k 1} {<br>
> > set changeTime [expr $k*$stopTime/($dynamic_bw+1)]<br>
> > set f $bw_changes($k)<br>
> > set newBW [expr $f*$bw]<br>
> > puts "change at $changeTime to [expr $newBW/1000000.]Mbps"<br>
> > $ns at $changeTime "[[$ns link $n0 $n1] link] set bandwidth_ $newBW"<br>
> > $ns at $changeTime "[[$ns link $n1 $n0] link] set bandwidth_ $newBW"<br>
> > $ns at $changeTime "puts $newBW"<br>
> > }<br>
> ><br>
> > set li_10 [[$ns link $n1 $n0] queue]<br>
> > set li_01 [[$ns link $n0 $n1] queue]<br>
> ><br>
> > set tchan_ [open /tmp/<a href="http://redqvar.tr" target="_blank">redqvar.tr</a> <<a href="http://redqvar.tr" target="_blank">http://redqvar.tr</a>><br>
> <<a href="http://redqvar.tr" target="_blank">http://redqvar.tr</a>> w]<br>
> > $li_01 trace curq_<br>
> > $li_01 trace d_exp_<br>
> > $li_01 attach $tchan_<br>
> ><br>
> > global num_ftps web_rate num_cbrs greedy num_revs<br>
> > set linkbw [expr $bw*10]<br>
> ><br>
> > set w [expr $web_rate > 0]<br>
> > if {$w} {<br>
> > global n2 n3<br>
> > #server<br>
> > set n2 [$ns node]<br>
> > $ns duplex-link $n2 $n0 $linkbw ${accessdly}ms DropTail<br>
> > $ns queue-limit $n2 $n0 $buffersize1<br>
> > $ns queue-limit $n0 $n2 $buffersize1<br>
> ><br>
> > #client<br>
> > set n3 [$ns node]<br>
> > $ns duplex-link $n1 $n3 $linkbw ${accessdly}ms DropTail<br>
> > $ns queue-limit $n1 $n3 $buffersize1<br>
> > $ns queue-limit $n3 $n1 $buffersize1<br>
> > set node_cnt 4<br>
> > }<br>
> > #need to fix the angles if use nam<br>
> > for {set k 0} {$k < $num_ftps} {incr k 1} {<br>
> > # servers<br>
> > set j $node_cnt<br>
> > global n$j<br>
> > set n$j [$ns node]<br>
> > if {$greedy > 0 && $k == 0} {<br>
> > $ns duplex-link [set n$j] $n0 $linkbw 1ms DropTail<br>
> > } else {<br>
> > $ns duplex-link [set n$j] $n0 $linkbw ${accessdly}ms DropTail<br>
> > }<br>
> > $ns queue-limit [set n$j] $n0 $buffersize1<br>
> > $ns queue-limit $n0 [set n$j] $buffersize1<br>
> > set angle [expr $num_ftps>1? 0.75+($k-1)*.5/($num_ftps-1) : 1]<br>
> > $ns duplex-link-op $n0 [set n$j] orient $angle<br>
> > incr node_cnt<br>
> ><br>
> > # clients<br>
> > set j $node_cnt<br>
> > global n$j<br>
> > set n$j [$ns node]<br>
> > set dly [expr ${accessdly} +($k+1)]<br>
> > $ns duplex-link $n1 [set n$j] $linkbw ${dly}ms DropTail<br>
> > $ns queue-limit $n1 [set n$j] $buffersize1<br>
> > $ns queue-limit [set n$j] $n1 $buffersize1<br>
> > set angle [expr $num_ftps>1?<br>
> fmod(2.25-($k-1)*.5/($num_ftps-1),<br>
> > 2) : 0]<br>
> > $ns duplex-link-op $n1 [set n$j] orient $angle<br>
> > incr node_cnt<br>
> > }<br>
> > for {set k 0} {$k < $num_cbrs} {incr k 1} {<br>
> > # servers<br>
> > set j $node_cnt<br>
> > global n$j<br>
> > set n$j [$ns node]<br>
> > $ns duplex-link [set n$j] $n0 $linkbw ${accessdly}ms DropTail<br>
> > $ns queue-limit [set n$j] $n0 $buffersize1<br>
> > $ns queue-limit $n0 [set n$j] $buffersize1<br>
> > # set angle [expr $num_cbrs>1? 0.75+($k-1)*.5/($num_cbrs-1)<br>
> : 1]<br>
> > $ns duplex-link-op $n0 [set n$j] orient $angle<br>
> > incr node_cnt<br>
> ><br>
> > # clients<br>
> > set j $node_cnt<br>
> > global n$j<br>
> > set n$j [$ns node]<br>
> > $ns duplex-link $n1 [set n$j] $linkbw ${accessdly}ms<br>
> DropTail<br>
> > $ns queue-limit $n1 [set n$j] $buffersize1<br>
> > $ns queue-limit [set n$j] $n1 $buffersize1<br>
> > # set angle [expr $num_cbrs>1?<br>
> fmod(2.25-($k-1)*.5/($num_ftps-1),<br>
> > 2) : 0]<br>
> > $ns duplex-link-op $n1 [set n$j] orient $angle<br>
> > incr node_cnt<br>
> > }<br>
> > #reverse direction ftps<br>
> > for {set k 0} {$k < $num_revs} {incr k 1} {<br>
> > # clients<br>
> > set j $node_cnt<br>
> > global n$j<br>
> > set n$j [$ns node]<br>
> > $ns duplex-link [set n$j] $n0 $linkbw ${accessdly}ms DropTail<br>
> > $ns queue-limit [set n$j] $n0 $buffersize1<br>
> > $ns queue-limit $n0 [set n$j] $buffersize1<br>
> > set angle [expr $num_ftps>1? 0.75+($k-1)*.5/($num_ftps-1) : 1]<br>
> > $ns duplex-link-op $n0 [set n$j] orient $angle<br>
> > incr node_cnt<br>
> ><br>
> > # servers<br>
> > set j $node_cnt<br>
> > global n$j<br>
> > set n$j [$ns node]<br>
> > set dly [expr ($accessdly)*1.1 +($k+1)]<br>
> > $ns duplex-link $n1 [set n$j] $linkbw ${dly}ms DropTail<br>
> > $ns queue-limit $n1 [set n$j] $buffersize1<br>
> > $ns queue-limit [set n$j] $n1 $buffersize1<br>
> > set angle [expr $num_ftps>1?<br>
> fmod(2.25-($k-1)*.5/($num_ftps-1),<br>
> > 2) : 0]<br>
> > $ns duplex-link-op $n1 [set n$j] orient $angle<br>
> > incr node_cnt<br>
> > }<br>
> > }<br>
> ><br>
> > proc build_cbr {cnd snd startTime timeToStop Flow_id} {<br>
> > global ns<br>
> > set udp [$ns create-connection UDP $snd LossMonitor $cnd $Flow_id]<br>
> > set cbr [new Application/Traffic/CBR]<br>
> > $cbr attach-agent $udp<br>
> > # change these for different types of CBRs<br>
> > $cbr set packetSize_ 100<br>
> > $cbr set rate_ 0.064Mb<br>
> > $ns at $startTime "$cbr start"<br>
> > $ns at $timeToStop "$cbr stop"<br>
> > }<br>
> ><br>
> > # cnd is client node, snd is server node<br>
> > proc build_ftpclient {cnd snd startTime timeToStop Flow_id} {<br>
> ><br>
> > global ns filesize greedy revftp<br>
> > set ctcp [$ns create-connection TCP/Linux $snd TCPSink/Sack1 $cnd<br>
> > $Flow_id]<br>
> > $ctcp select_ca cubic<br>
> > set ftp [$ctcp attach-app FTP]<br>
> > $ftp set enableResume_ true<br>
> > $ftp set type_ FTP<br>
> ><br>
> > #set up a single infinite ftp with smallest RTT<br>
> > if {$greedy > 0 || $filesize < 0} {<br>
> > $ns at $startTime "$ftp start"<br>
> > set greedy 0<br>
> > } else {<br>
> > $ns at $startTime "$ftp send $filesize"<br>
> > }<br>
> > $ns at $timeToStop "$ftp stop"<br>
> > }<br>
> ><br>
> > proc build_webs {cnd snd rate startTime timeToStop} {<br>
> > set CLIENT 0<br>
> > set SERVER 1<br>
> ><br>
> > # SETUP PACKMIME<br>
> > set pm [new PackMimeHTTP]<br>
> > $pm set-TCP Sack<br>
> > $pm set-client $cnd<br>
> > $pm set-server $snd<br>
> > $pm set-rate $rate; # new connections per<br>
> second<br>
> > $pm set-http-1.1; # use HTTP/1.1<br>
> ><br>
> > # create RandomVariables<br>
> > set flow_arrive [new RandomVariable/PackMimeHTTPFlowArrive $rate]<br>
> > set req_size [new RandomVariable/PackMimeHTTPFileSize $rate<br>
> $CLIENT]<br>
> > set rsp_size [new RandomVariable/PackMimeHTTPFileSize $rate<br>
> $SERVER]<br>
> ><br>
> > # assign RNGs to RandomVariables<br>
> > $flow_arrive use-rng [new RNG]<br>
> > $req_size use-rng [new RNG]<br>
> > $rsp_size use-rng [new RNG]<br>
> ><br>
> > # set PackMime variables<br>
> > $pm set-flow_arrive $flow_arrive<br>
> > $pm set-req_size $req_size<br>
> > $pm set-rsp_size $rsp_size<br>
> ><br>
> > global ns<br>
> > $ns at $startTime "$pm start"<br>
> > $ns at $timeToStop "$pm stop"<br>
> > }<br>
> ><br>
> > proc uniform {a b} {<br>
> > expr $a + (($b- $a) * ([ns-random]*1.0/0x7fffffff))<br>
> > }<br>
> ><br>
> > proc finish {} {<br>
> > global ns<br>
> > $ns halt<br>
> > $ns flush-trace<br>
> > exit 0<br>
> > }<br>
> ><br>
> > # $ns namtrace-all [open out.nam w]<br>
> > # $ns color 2 blue<br>
> > # $ns color 3 red<br>
> > # $ns color 4 yellow<br>
> > # $ns color 5 green<br>
> ><br>
> > build_topology $ns<br>
> ><br>
> > #$ns trace-queue $n0 $n1 [open <a href="http://out_n0ton1.tr" target="_blank">out_n0ton1.tr</a><br>
> <<a href="http://out_n0ton1.tr" target="_blank">http://out_n0ton1.tr</a>> <<a href="http://out_n0ton1.tr" target="_blank">http://out_n0ton1.tr</a>> w]<br>
> > #set fname f${num_ftps}w${web_rate}b${bottleneck}.tr<br>
> > set fname <a href="http://f.tr" target="_blank">f.tr</a> <<a href="http://f.tr" target="_blank">http://f.tr</a>> <<a href="http://f.tr" target="_blank">http://f.tr</a>><br>
> > puts $fname<br>
> > $ns trace-queue $n0 $n1 [open /tmp/$fname w]<br>
> > #reverse direction<br>
> > #$ns trace-queue $n1 $n0 [open /tmp/$fname w]<br>
> ><br>
> > set node_cnt 2<br>
> > if {$web_rate > 0} {<br>
> > build_webs $n3 $n2 $web_rate 0 $stopTime<br>
> > set node_cnt 4<br>
> > }<br>
> ><br>
> > for {set k 1} {$k <= $num_ftps} {incr k 1} {<br>
> > set j $node_cnt<br>
> > incr node_cnt<br>
> > set i $node_cnt<br>
> > build_ftpclient [set n$i] [set n$j] \<br>
> > $startTime $stopTime $i<br>
> > # [expr 1.0*($k-1)] $stopTime $i<br>
> > # [expr $startTime+($k-1)*[uniform 0.0 2.0]] $stopTime $i<br>
> > incr node_cnt<br>
> > }<br>
> ><br>
> > for {set k 1} {$k <= $num_cbrs} {incr k 1} {<br>
> > set j $node_cnt<br>
> > incr node_cnt<br>
> > set i $node_cnt<br>
> > build_cbr [set n$i] [set n$j] \<br>
> > [expr $startTime+($k-1)*[uniform 0.0 2.0]] $stopTime $i<br>
> > incr node_cnt<br>
> > }<br>
> ><br>
> > #for reverse direction, give client smaller number<br>
> > for {set k 1} {$k <= $num_revs} {incr k 1} {<br>
> > set j $node_cnt<br>
> > incr node_cnt<br>
> > set i $node_cnt<br>
> > build_ftpclient [set n$j] [set n$i] $startTime $stopTime $j<br>
> > incr node_cnt<br>
> > }<br>
> ><br>
> > $ns at [expr $stopTime ] "finish"<br>
> > $ns run<br>
> > exit 0<br>
> > ###################################################################<br>
> ><br>
> ><br>
> > _______________________________________________<br>
> > Codel mailing list<br>
> > <a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a> <mailto:<a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a>><br>
> > <a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
> ><br>
><br>
><br>
><br>
> ------------------------------<br>
><br>
> Message: 2<br>
> Date: Thu, 19 Feb 2015 13:38:53 -0800<br>
> From: Dave Taht <<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a> <mailto:<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a>>><br>
> To: Kathleen Nichols <<a href="mailto:nichols@pollere.com">nichols@pollere.com</a> <mailto:<a href="mailto:nichols@pollere.com">nichols@pollere.com</a>>><br>
> Cc: "<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a><br>
> <mailto:<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>>" <<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a><br>
> <mailto:<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>>><br>
> Subject: Re: [Codel] Codel code<br>
> Message-ID:<br>
><br>
> <CAA93jw5dWzXfEX70w1PFmPudH+qfurq=<a href="mailto:e4Srbth2%2Bf4QC2h4Og@mail.gmail.com">e4Srbth2+f4QC2h4Og@mail.gmail.com</a><br>
> <mailto:<a href="mailto:e4Srbth2%252Bf4QC2h4Og@mail.gmail.com">e4Srbth2%2Bf4QC2h4Og@mail.gmail.com</a>>><br>
> Content-Type: text/plain; charset=UTF-8<br>
><br>
> I am fairly happy with the example codel code that is now in the ns3<br>
> branch,<br>
> which is pure c++, and quite a bit easier to understand than tcl, to<br>
> my eye.<br>
><br>
> <a href="https://www.nsnam.org/doxygen/codel-vs-droptail-asymmetric_8cc.html" target="_blank">https://www.nsnam.org/doxygen/codel-vs-droptail-asymmetric_8cc.html</a><br>
><br>
> regrettably the fq_codel version for ns3 is still out of tree.<br>
><br>
><br>
> ------------------------------<br>
><br>
> Message: 3<br>
> Date: Fri, 20 Feb 2015 00:46:11 -0800<br>
> From: Anjali Chawla <<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a><br>
> <mailto:<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a>>><br>
> To: <a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a> <mailto:<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>><br>
> Subject: [Codel] Setpoint in CoDel<br>
> Message-ID:<br>
><br>
> <CAL6QuG8ktPQgrGkA+wp9V=<a href="mailto:BHqdcQh4E19dsX02Pozh_fjfJ%2B0w@mail.gmail.com">BHqdcQh4E19dsX02Pozh_fjfJ+0w@mail.gmail.com</a><br>
> <mailto:<a href="mailto:BHqdcQh4E19dsX02Pozh_fjfJ%252B0w@mail.gmail.com">BHqdcQh4E19dsX02Pozh_fjfJ%2B0w@mail.gmail.com</a>>><br>
> Content-Type: text/plain; charset="utf-8"<br>
><br>
> Hi<br>
> anyone please explain me what is concept behind setpoint in codel<br>
> algorithm??<br>
> Thanks<br>
> -------------- next part --------------<br>
> An HTML attachment was scrubbed...<br>
> URL:<br>
> <<a href="https://lists.bufferbloat.net/pipermail/codel/attachments/20150220/285d07dd/attachment-0001.html" target="_blank">https://lists.bufferbloat.net/pipermail/codel/attachments/20150220/285d07dd/attachment-0001.html</a>><br>
><br>
> ------------------------------<br>
><br>
> Message: 4<br>
> Date: Fri, 20 Feb 2015 01:21:13 -0800<br>
> From: Dave Taht <<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a> <mailto:<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a>>><br>
> To: Anjali Chawla <<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a><br>
> <mailto:<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a>>><br>
> Cc: "<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a><br>
> <mailto:<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>>" <<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a><br>
> <mailto:<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>>><br>
> Subject: Re: [Codel] Setpoint in CoDel<br>
> Message-ID:<br>
><br>
> <<a href="mailto:CAA93jw43TJdo9FK61HK0et3Mopq8-YKjjkNm_6_OF7%2Bg0iMipw@mail.gmail.com">CAA93jw43TJdo9FK61HK0et3Mopq8-YKjjkNm_6_OF7+g0iMipw@mail.gmail.com</a><br>
> <mailto:<a href="mailto:CAA93jw43TJdo9FK61HK0et3Mopq8-YKjjkNm_6_OF7%252Bg0iMipw@mail.gmail.com">CAA93jw43TJdo9FK61HK0et3Mopq8-YKjjkNm_6_OF7%2Bg0iMipw@mail.gmail.com</a>>><br>
> Content-Type: text/plain; charset=UTF-8<br>
><br>
> the best talk on the subject was van?s at ietf, it is well worth<br>
> watching multiple times.<br>
><br>
> <a href="http://www.bufferbloat.net/projects/cerowrt/wiki/Bloat-videos" target="_blank">http://www.bufferbloat.net/projects/cerowrt/wiki/Bloat-videos</a><br>
><br>
> He goes deeply into the reasoning behind the sojourn time, and setpoint.<br>
><br>
> About the only other somewhat in-depth talk on how codel really works<br>
> was my attempt at stanford.<br>
><br>
> and there are of course other talks above that try to describe bits of<br>
> the elephant.<br>
><br>
> One of these days I hope someone puts together the definitive talk on<br>
> codel complete with even more elegant demos than stephen hemminger<br>
> came up with..., but it does seem to be really hard for people to get<br>
> at a deep level... most of my own talks are more about fq than<br>
> fq_codel, and that is *tons* easier to explain.<br>
><br>
> If you watch them all a bunch of times, and run a few experiments of<br>
> your own, enlightenment will come. For me, it was seeing kathie give<br>
> the first public explanation of codel - about midway through I started<br>
> vibrating in my seat - but I had just completed a slash and burn tour<br>
> through all the aqm literature going back 30 years, and trying<br>
> everything that seemed to make sense. I don?t know how to impart that<br>
> in an email...<br>
><br>
><br>
> On Fri, Feb 20, 2015 at 12:46 AM, Anjali Chawla<br>
> <<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a> <mailto:<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a>>> wrote:<br>
> > Hi<br>
> > anyone please explain me what is concept behind setpoint in codel<br>
> > algorithm??<br>
> > Thanks<br>
> ><br>
> > _______________________________________________<br>
> > Codel mailing list<br>
> > <a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a> <mailto:<a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a>><br>
> > <a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
> ><br>
><br>
><br>
><br>
> --<br>
> Dave T?ht<br>
><br>
> thttp://<a href="http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks" target="_blank">www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks</a><br>
> <<a href="http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks" target="_blank">http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks</a>><br>
><br>
><br>
> ------------------------------<br>
><br>
> Message: 5<br>
> Date: Fri, 20 Feb 2015 10:01:54 -0800<br>
> From: Dave Taht <<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a> <mailto:<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a>>><br>
> To: Anjali Chawla <<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a><br>
> <mailto:<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a>>><br>
> Cc: "<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a><br>
> <mailto:<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>>" <<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a><br>
> <mailto:<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>>><br>
> Subject: Re: [Codel] Setpoint in CoDel<br>
> Message-ID:<br>
><br>
> <CAA93jw7147Ucy=<a href="mailto:fRmt-65VuUSDyVwHwH9NCmOFjq4GULYGC63A@mail.gmail.com">fRmt-65VuUSDyVwHwH9NCmOFjq4GULYGC63A@mail.gmail.com</a><br>
> <mailto:<a href="mailto:fRmt-65VuUSDyVwHwH9NCmOFjq4GULYGC63A@mail.gmail.com">fRmt-65VuUSDyVwHwH9NCmOFjq4GULYGC63A@mail.gmail.com</a>>><br>
> Content-Type: text/plain; charset=UTF-8<br>
><br>
> On Fri, Feb 20, 2015 at 1:21 AM, Dave Taht <<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a><br>
> <mailto:<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a>>> wrote:<br>
> > the best talk on the subject was van?s at ietf, it is well worth<br>
> > watching multiple times.<br>
> ><br>
> > <a href="http://www.bufferbloat.net/projects/cerowrt/wiki/Bloat-videos" target="_blank">http://www.bufferbloat.net/projects/cerowrt/wiki/Bloat-videos</a><br>
> ><br>
> > He goes deeply into the reasoning behind the sojourn time, and<br>
> setpoint.<br>
> ><br>
> > About the only other somewhat in-depth talk on how codel really works<br>
> > was my attempt at stanford.<br>
><br>
> The stanford talk took some digging to find. I would really like a shot<br>
> at a do-over one day - or for van to give his talk again to be filmed at<br>
> high quality.<br>
><br>
> <a href="https://www.youtube.com/watch?v=Mxoa5Si4Ubw" target="_blank">https://www.youtube.com/watch?v=Mxoa5Si4Ubw</a><br>
><br>
> ><br>
> > and there are of course other talks above that try to describe bits of<br>
> > the elephant.<br>
> ><br>
> > One of these days I hope someone puts together the definitive talk on<br>
> > codel complete with even more elegant demos than stephen hemminger<br>
> > came up with..., but it does seem to be really hard for people to get<br>
> > at a deep level... most of my own talks are more about fq than<br>
> > fq_codel, and that is *tons* easier to explain.<br>
> ><br>
> > If you watch them all a bunch of times, and run a few experiments of<br>
> > your own, enlightenment will come. For me, it was seeing kathie give<br>
> > the first public explanation of codel - about midway through I started<br>
> > vibrating in my seat - but I had just completed a slash and burn tour<br>
> > through all the aqm literature going back 30 years, and trying<br>
> > everything that seemed to make sense. I don?t know how to impart that<br>
> > in an email...<br>
> ><br>
> ><br>
> > On Fri, Feb 20, 2015 at 12:46 AM, Anjali Chawla<br>
> > <<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a> <mailto:<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a>>><br>
> wrote:<br>
> >> Hi<br>
> >> anyone please explain me what is concept behind setpoint in codel<br>
> >> algorithm??<br>
> >> Thanks<br>
> >><br>
> >> _______________________________________________<br>
> >> Codel mailing list<br>
> >> <a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a> <mailto:<a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a>><br>
> >> <a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
> >><br>
> ><br>
> ><br>
> ><br>
> > --<br>
> > Dave T?ht<br>
> ><br>
> > thttp://<a href="http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks" target="_blank">www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks</a><br>
> <<a href="http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks" target="_blank">http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks</a>><br>
><br>
><br>
><br>
> --<br>
> Dave T?ht<br>
><br>
> thttp://<a href="http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks" target="_blank">www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks</a><br>
> <<a href="http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks" target="_blank">http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks</a>><br>
><br>
><br>
> ------------------------------<br>
><br>
> _______________________________________________<br>
> Codel mailing list<br>
> <a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a> <mailto:<a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a>><br>
> <a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
><br>
><br>
> End of Codel Digest, Vol 29, Issue 4<br>
> ************************************<br>
><br>
><br>
><br>
><br>
> _______________________________________________<br>
> Codel mailing list<br>
> <a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a><br>
> <a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
><br>
<br>
<br>
<br>
------------------------------<br>
<br>
_______________________________________________<br>
Codel mailing list<br>
<a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a><br>
<a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
<br>
<br>
End of Codel Digest, Vol 29, Issue 6<br>
************************************<br>
</blockquote></div><br></div>