Hi Dave,

Thanks.

I agree with your point that there is less chance of consecutive packets having 
same source IP. However both functions: ip4_local_check_src(), 
ip4_local_check_src_x2() already have the trick to avoid fib lookup for 
consecutive packets having same source IP. Correct me if I am wrong, currently 
else {} part in both aforementioned functions seems to be a dead code as 
PREDICT_FALSE(last_check->first) is always TRUE (as last_check->first is always 
1 throughout ip4_local_inline() function).

Also with my patch, there is no impact on cycle count of ip4_local node (both 
x86 and ARM) where source IP increments for every packet in a terminating 
frame. It does decrease cycles for ip4-local when all packets have similar 
source IP.

So is there any gap in my understanding or is it deliberate to make else {} 
case  as dead code?

Thanks,
Nitin

From: Dave Barach (dbarach) <dbar...@cisco.com>
Sent: Friday, January 3, 2020 8:08 PM
To: Nitin Saxena <nsax...@marvell.com>; vpp-dev@lists.fd.io
Subject: [EXT] RE: [vpp-dev] Check in ip4_local_inline()

External Email
________________________________
Ask yourself how often there will be precisely one source (or dst) IP address 
in this path. Optimizing a specific lab/benchmark case may or may not make 
sense.

D.

From: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> 
<vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io>> On Behalf Of Nitin Saxena
Sent: Friday, January 3, 2020 8:02 AM
To: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io>
Subject: [vpp-dev] Check in ip4_local_inline()

Hi,

I am sending UDP termination packets to VPP interface with single source IP. I 
find that fib lookup is happening for every packet, even if source IP for 
current packet is same as last packet. Is it expected behavior? Following patch 
seems to avoid lookup for every packet.

Thanks,
Nitin

diff --git a/src/vnet/ip/ip4_forward.c b/src/vnet/ip/ip4_forward.c
index aa554ea..59edaba 100644
--- a/src/vnet/ip/ip4_forward.c
+++ b/src/vnet/ip/ip4_forward.c
@@ -1542,6 +1542,7 @@ ip4_local_check_src (vlib_buffer_t * b, ip4_header_t * 
ip0,
       last_check->src.as_u32 = ip0->src_address.as_u32;
       last_check->lbi = lbi0;
       last_check->error = *error0;
+      last_check->first = 0;
     }
   else
     {
@@ -1549,7 +1550,6 @@ ip4_local_check_src (vlib_buffer_t * b, ip4_header_t * 
ip0,
        vnet_buffer (b)->ip.adj_index[VLIB_TX];
       vnet_buffer (b)->ip.adj_index[VLIB_TX] = last_check->lbi;
       *error0 = last_check->error;
-      last_check->first = 0;
     }
}

@@ -1638,6 +1638,7 @@ ip4_local_check_src_x2 (vlib_buffer_t ** b, ip4_header_t 
** ip,
       last_check->src.as_u32 = ip[1]->src_address.as_u32;
       last_check->lbi = lbi[1];
       last_check->error = error[1];
+      last_check->first = 0;
     }
   else
     {
@@ -1651,7 +1652,6 @@ ip4_local_check_src_x2 (vlib_buffer_t ** b, ip4_header_t 
** ip,

       error[0] = last_check->error;
       error[1] = last_check->error;
-      last_check->first = 0;
     }
}



-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#15036): https://lists.fd.io/g/vpp-dev/message/15036
Mute This Topic: https://lists.fd.io/mt/69397810/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to