Re: Packet loss with PollDevice

Yu Chen <[email protected]>
Newsgroups gmane.network.routing.click
Message-ID <[email protected]>
A correction: User 1 and User 2 are sending to each other, User 3 and User 4
are sending to each other.

Besides, I also tried to use one flow, given the default txqueuelen=1000. 
There are also random losses.

The Click version is 1.8.0 on Linux 2.6.24.7.
On Thu, Jan 19, 2012 at 01:45:00PM -0500, Yu Chen wrote:
> Hi all,
> 
> I am having an experiment with the following topology running on Deterlab. I 
> am having a 4-core Xeon and modified e1000 driver running ore Xeon and modified 
> e1000 driver running. The memory is 4GB.
>                      
> 		     User1
>                        |
> 	   User3-----Router------User4		
>                        |
> 	             User2
> 
> User 1 is sending packet to User 2; User 3 is sending packets to User 4. 
> The router only routes stuff with best effort. However, what I observed is 
> very few losses, distributed on a small random set of rounds. What is 
> surprising is that there are losses on one particular netcard when the sending 
> rate is only 125,000 packets/second. The loss happens at the receiving phase.
> 
> Below is what I have tried:
> 1' I am using 4 threads, each corresponding to one pair of PollDevice and 
> ToDevice. 
> 2' I have changed the queue length at the interface cards. I set txqueuelen=1 
> for the senders to decrease the possible burstiness. By increasing the 
> receiving queue length from 64 to 4096
> (the maximum queue length), the loss rate decreases.
> 3' I tried to discard the packets on their arrival at the router. In this case, 
> there is no observed loss.
> 
> I am kind of lost at the point. Any suggestions on what can be the possible 
> reason and what I can try next?
> 
> Attached is my code.
> 
> Best Regards,
> Yu 
> 
> Router:
> ----------------------------------------------------------------------- 
> ddressInfo(router1-w1      10.0.1.1      00:15:17:5d:16:4a,      //eth2
> user1-w1        10.0.1.2      00:15:17:5d:29:28,      //eth0
> router1-w2      10.0.2.1      00:15:17:5d:16:48,      //eth0
> user2-w2        10.0.2.2      00:15:17:57:ce:14,      //eth0
> router1-w3      10.0.3.1      00:15:17:5d:16:4b,      //eth3
> user3-w3        10.0.3.2      00:15:17:5d:27:e8,      //eth0
> router1-w4      10.0.4.1      00:15:17:5d:16:49,      //eth1
> user4-w4        10.0.4.2      00:15:17:5d:2a:3c,      //eth0
> );
> 
> c1 :: Classifier(12/0806 20/0001,
>                  12/0806 20/0002,
>                  12/0800,
>                  -);
> c2 :: Classifier(12/0806 20/0001,
>                  12/0806 20/0002,
>                  12/0800,
>                  -);
> c3 :: Classifier(12/0806 20/0001,
>                  12/0806 20/0002,
>                  12/0800,
>                  -);
> c4 :: Classifier(12/0806 20/0001,
>                  12/0806 20/0002,
>                  12/0800,
>                  -);
> 
> q0 :: Discard;
> // Idle -> ToDevice(eth1);
> // Idle -> ToDevice(eth3);
> // Idle -> ToDevice(eth2);
> // Idle -> ToDevice(eth0);
> q1 :: CPUQueue(1000000) -> EtherEncap(0x0800, router1-w1, user1-w1) -> td1 :: ToDevice(eth2);
> q2 :: CPUQueue(1000000) -> EtherEncap(0x0800, router1-w2, user2-w2) -> td3 :: ToDevice(eth0);
> q3 :: CPUQueue(1000000) -> EtherEncap(0x0800, router1-w3, user3-w3) -> td2 :: ToDevice(eth3);
> q4 :: CPUQueue(1000000) -> EtherEncap(0x0800, router1-w4, user4-w4) -> td0 :: ToDevice(eth1);
> 
> rt :: LookupIPRouteMP(10.0.1.0/32 0, 10.0.1.1/32 0, 10.0.1.255/32 0,
>                      10.0.2.0/32 0, 10.0.2.1/32 0, 10.0.2.255/32 0,
>                      10.0.3.0/32 0, 10.0.3.1/32 0, 10.0.3.255/32 0,
>                      10.0.4.0/32 0, 10.0.4.1/32 0, 10.0.4.255/32 0,
>                      10.0.1.0/24 1, 10.0.2.0/24 2, 10.0.3.0/24 3,
>                      10.0.4.0/24 4, 0.0.0.0/0 0);
> rt[0] -> Discard;
> rt[1] -> q1;
> rt[2] -> q2;
> rt[3] -> q3;
> rt[4] -> q4;
> 
> pd1 :: PollDevice(eth2) -> c1;
> c1[0] -> q0;
> c1[1] -> q0;
> c1[2] -> DropBroadcasts -> Strip(14) -> GetIPAddress(16) -> rt;
> c1[3] -> Discard;
> 
> pd3 :: PollDevice(eth0) -> c2;
> c2[0] -> q0;
> c2[1] -> q0;
> c2[2] -> DropBroadcasts -> Strip(14) -> GetIPAddress(16) -> rt;
> c2[3] -> Discard;
> 
> pd2 :: PollDevice(eth3) -> c3;
> c3[0] -> q0;
> c3[1] -> q0;
> c3[2] -> DropBroadcasts -> Strip(14) -> GetIPAddress(16) -> rt;
> c3[3] -> Discard;
> 
> pd0 :: PollDevice(eth1) -> c4;
> c4[0] -> q0;
> c4[1] -> q0;
> c4[2] -> DropBroadcasts -> Strip(14) -> GetIPAddress(16) -> rt;
> c4[3] -> Discard;
> 
> StaticThreadSched(pd2 0, td0 0, pd0 1, td2 1, pd3 2, td1 2, pd1 3, td3 3);
> 
> User:
> //
> AddressInfo(router1-w1      10.0.1.1      00:15:17:5d:16:4a,      //eth2
> user1-w1        10.0.1.2      00:15:17:5d:29:28,      //eth0
> router1-w2      10.0.2.1      00:15:17:5d:16:48,      //eth0
> user2-w2        10.0.2.2      00:15:17:57:ce:14,      //eth0
> router1-w3      10.0.3.1      00:15:17:5d:16:4b,      //eth3
> user3-w3        10.0.3.2      00:15:17:5d:27:e8,      //eth0
> router1-w4      10.0.4.1      00:15:17:5d:16:49,      //eth1
> user4-w4        10.0.4.2      00:15:17:5d:2a:3c,      //eth0
> );
> //Send
> udp :: FastUDPSource(RATE 400000, LIMIT 20000000, LENGTH 78,
> 		     SRCETH user1-w1, SRCIP user1-w1, SPORT 1,
> 		     DSTETH router1-w1, DSTIP user2-w2, DPORT 1,
> 		     CHECKSUM false, INTERVAL 0, ACTIVE false)
> 	-> ToDevice(eth0);
> 
> s :: Script(TYPE ACTIVE, write ctr.reset, write udp.active false, 
> 	    wait 1, wait 9, write udp.active true);
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.