[Click] how can i measure MLFFR

Eddie Kohler kohler at cs.ucla.edu
Fri Jun 30 11:47:57 EDT 2006


Whoops, duh!  Thanks for the correction.
Eddie


Roman Chertov wrote:
> Eddie Kohler wrote:
>> Hi,
>>
>> The other thing you should do is add a "PollDevice(eth0)" to COMPUTER 1's
>> configuration.  You want Computer 1 to use polling, so you can ensure that
>> Computer 1 generates packets as fast as possible.  This might suffice:
>>
>> PollDevice(eth0) -> Idle;
>>
>> Also, I hope that your ethernets are gigabit.  100Mb/s Ethernet maxes out
>> somewhere around 70000 p/s.
> 
> I have successfully done 150 Kpackets/sec on 100 Mbit Ethernet using
> Intel Pro cards.
> 
> Roman
> 
>> Eddie
>>
>>
>> ˆÒ Ôø wrote:
>>
>>> Hi everyone,
>>> I am experimenting in measuring the maximum loss-free forwarding rate(MLFFR).MLFFR measured in the paper "The Click Modular Router,ACM Transactions on Computer Systems, Vol. 18, No. 3,pp.263-297" is 330,000 packets/s.
>>> My experiement environment is like this:the computer 2 acts as a router.
>>> computer 1<->computer 2<->computer 3
>>> computer 1 eth0:ip  192.168.18.11 ethernet Address:00:10:5c:cd:7b:88
>>> computer 2 eth0:ip  192.168.18.1  ethernet Address:00:02:2a:dc:44:d6
>>>    eth1:ip  192.168.0.1   ethernet Address:00:10:5c:cd:7b:f5
>>> computer 3 eth0:ip  192.168.0.11  ethernet Address:00:10:5c:cd:7b:9d
>>> and the configuration of computer 1 :
>>> /***********************************************/
>>> FastUDPSource(100000,1000000,64,00:10:5c:cd:7b:88,192.168.18.11,50,
>>>  00:10:5c:cd:7b:9d,192.168.0.11,50)
>>> ->ctr::Counter
>>> ->ToDevice(eth0);
>>>  s::Script(
>>>  label begin_loop,
>>>  wait 1,
>>>  read ctr.rate,
>>>  goto begin_loop $(lt 1 2),
>>>  stop);
>>> /***************************************/
>>> and the configuration of computer2 is:
>>> /***************************************************/
>>> // eth0, 00:02:2a:dc:44:d6, 192.168.18.1
>>> // eth1, 00:10:5c:cd:7b:f5, 192.168.0.1
>>> c0 :: Classifier(12/0806 20/0001,
>>>                  12/0806 20/0002,
>>>                  12/0800,
>>>                  -);
>>> c1 :: Classifier(12/0806 20/0001,
>>>                  12/0806 20/0002,
>>>                  12/0800,
>>>                  -);
>>>  FromDevice(eth0)->str1::Counter->c0;
>>> FromDevice(eth1)->c1;
>>>  q0::Queue(10000)-> ToDevice(eth0);
>>> q1::Queue(10000)->str2::Counter-> ToDevice(eth1);
>>>  arpr0 ::ARPResponder(192.168.0.1/24 00:10:5c:cd:7b:f5,
>>>       192.168.18.1/24 00:02:2a:dc:44:d6,
>>>       192.168.0.11/24 00:10:5c:cd:7b:9d,
>>>       192.168.18.11/24 00:10:5c:cd:7b:88)->q0;
>>> arpr1 ::ARPResponder(192.168.0.1/24 00:10:5c:cd:7b:f5,
>>>       192.168.18.1/24 00:02:2a:dc:44:d6,
>>>       192.168.0.11/24 00:10:5c:cd:7b:9d,
>>>       192.168.18.11/24 00:10:5c:cd:7b:88)->q1;
>>>  arpq0 ::ARPQuerier(192.168.18.1, 00:02:2a:dc:44:d6);
>>> arpq1 ::ARPQuerier(192.168.0.1, 00:10:5c:cd:7b:f5);
>>>  rt::StaticIPLookup(192.168.18.1/32 0,
>>>     192.168.18.255/32 0,
>>>     192.168.18.0/32 0,
>>>     192.168.0.1/32 0,
>>>     192.168.0.255/32 0,
>>>     192.168.0.0/32 0,
>>>     192.168.18.11/24 1,
>>>     192.168.0.11/24 2,
>>>     0.0.0.0/0 192.168.18.1 1);
>>>  strip0::Strip(14);
>>> strip1::Strip(14);
>>>  // Deliver ARP responses to ARP queriers as well as Linux.
>>> c0[0] -> arpr0;
>>> c1[0] -> arpr1; 
>>> t::Tee(2);
>>> c0[1] -> t;
>>> c1[1] -> t;
>>> t[0] -> [1]arpq0[0]->q0;
>>> t[1] -> [1]arpq1[0]->q1;
>>> c0[2] -> strip0;
>>> c1[2] -> strip1;
>>>  strip0->CheckIPHeader->GetIPAddress(16)->rt;
>>> strip1->CheckIPHeader->GetIPAddress(16)->rt;
>>>  rt[0]->Discard;
>>>  rt[1] -> DropBroadcasts
>>>      -> gio1 :: IPGWOptions(192.168.18.1)
>>>      -> dt1 :: DecIPTTL
>>>      -> [0]arpq0;
>>> rt[2] -> DropBroadcasts
>>>      -> gio2 :: IPGWOptions(192.168.0.1)
>>>      -> dt2 :: DecIPTTL
>>>      -> [0]arpq1;
>>>  
>>> dt1[1] -> ICMPError(192.168.18.1, timeexceeded) -> [0]rt;
>>> dt2[1] -> ICMPError(192.168.0.1, timeexceeded) -> [0]rt;
>>>  
>>> gio1[1] -> ICMPError(192.168.18.1, parameterproblem) -> [0]rt;
>>> gio2[1] -> ICMPError(192.168.0.1, parameterproblem) -> [0]rt;
>>>  
>>> c0[3] -> Discard;
>>> c1[3] -> Discard;
>>>   
>>>  s::Script( label begin_loop,
>>>  wait 1,
>>>  read str1.rate,
>>>  read str2.rate,
>>>  read str1.count,
>>>  read str2.count,
>>>  goto begin_loop $(lt 1 2),
>>>  stop);
>>> /****************************************************************/
>>>  my experiment result is that the maximum of the input rate of computer 2 is 70,000 packets/s. How can I deal with it?
>>>
>>>
>>> __________________________________________________
>>> ¸Ï¿ì×¢²áÑÅ»¢³¬´óÈÝÁ¿Ãâ·ÑÓÊÏä?
>>> http://cn.mail.yahoo.com
>>> __________________________________________________
>>> ¸Ï¿ì×¢²áÑÅ»¢³¬´óÈÝÁ¿Ãâ·ÑÓÊÏä?
>>> http://cn.mail.yahoo.com
>>> _______________________________________________
>>> click mailing list
>>> click at amsterdam.lcs.mit.edu
>>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> click mailing list
>> click at amsterdam.lcs.mit.edu
>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click



More information about the click mailing list