kohler / click

The Click modular router: fast modular packet processing and analysis
Other
740 stars 321 forks source link

slow packet flow when task schedule using StaticThreadSched #399

Open nilesh55 opened 6 years ago

nilesh55 commented 6 years ago

Hi, I have using user level click, when I have use StaticThreadSched to schedule click elements then there is problem with low data rate packet flow, when I sends packet at 10 PPS then packet receive other end with high latency around 1 sec, but if I remove StaticThreadSched and not using any scheduling mechanics then there is no problem packet received at other end with latency in 2 micro seconds. for high rate around 10K PPS packet flow there is no issue with StaticThreadSched.

Can anyone tell how the static scheduling affecting the low rate packet flow.

bcronje commented 6 years ago

Can you post the click config you are using?

nilesh55 commented 6 years ago

from_host :: FromDevice (eth1, PROMISC true); to_host :: ToDevice(eth1); from_server :: FromDevice (eth2, PROMISC true); to_server :: ToDevice(eth2);

host_ARPQuery :: ARPQuerier(192.168.125.6 a0:36:9f:d5:8b:b2,192.168.125.6 a0:36:9f:d5:8b:b2, TIMEOUT 86400); host_ARPResp :: ARPResponder(192.168.125.6 a0:36:9f:d5:8b:b2);

server_ARPQuery :: ARPQuerier(192.168.126.3 a0:36:9f:d5:8b:b3,192.168.126.3 a0:36:9f:d5:8b:b3, TIMEOUT 86400); server_ARPResp :: ARPResponder(192.168.126.3 a0:36:9f:d5:8b:b3);

natmapper :: IPPortBlockMapper(IPLIST 192.168.126.3 a0:36:9f:d5:8b:b3-192.168.126.3 a0:36:9f:d5:8b:b3); basic_napt :: IPRewriter(natmapper , drop);

host_ARP_clsfir :: Classifier( 12/0800, // Go for CheckData 12/0806 20/0001, // Incoming ARP Queries 12/0806 20/0002, // Incoming ARP Replies

server_ARP_clsfir :: Classifier( 12/0800, // Go for CheckData 12/0806 20/0001, // Incoming ARP Queries 12/0806 20/0002, // Incoming ARP Replies

host_ping_cl :: IPClassifier(icmp type 8,-); server_ping_cl :: IPClassifier(icmp type 8,-); nat_ip_cl :: IPClassifier(ip dst 192.168.126.3);

host_queue1 :: ThreadSafeQueue(20000); host_queue2 :: ThreadSafeQueue(20000); server_queue1 :: ThreadSafeQueue(20000); server_queue2 :: ThreadSafeQueue(20000);

host_unqueue :: Unqueue; server_unqueue :: Unqueue;

from_host -> host_ARP_clsfir -> Strip(14) -> CheckIPHeader->host_ping_cl[1] -> basic_napt ->MarkIPHeader ->server_queue1-> server_unqueue-> server_ARPQuery -> server_queue2 ->to_server; from_server -> server_ARP_clsfir -> Strip(14) ->CheckIPHeader-> server_ping_cl[1]-> nat_ip_cl -> [1]basic_napt[1]-> MarkIPHeader ->host_queue1 ->host_unqueue-> host_ARPQuery ->host_queue2 -> to_host;

host_ARP_clsfir[1] -> host_ARPResp -> host_queue2; host_ARP_clsfir[2] -> [1]host_ARPQuery -> host_queue2; host_ARP_clsfir[3] -> Discard;

host_ping_cl-> ICMPPingResponder ->host_queue1

server_ARP_clsfir[1] -> server_ARPResp -> server_queue2; server_ARP_clsfir[2] -> [1]server_ARPQuery -> server_queue2; server_ARP_clsfir[3] -> Discard;

server_ping_cl-> ICMPPingResponder ->server_queue1

st :: StaticThreadSched (from_host 1, to_host 2, from_server 3, to_server 4, host_unqueue 5 ,server_unqueue 6);