On Wed, Apr 4, 2018 at 2:16 AM, Jesper Dangaard Brouer <bro...@redhat.com> wrote: > > On Sun, 1 Apr 2018 20:47:28 -0400 Md. Islam" <misl...@kent.edu> wrote: > >> [...] More specifically, header parsing and fib >> lookup only takes around 82 ns. This shows that this could be used to >> implement linerate packet forwarding in kernel. > > I cannot resist correcting you... > > You didn't specify the link speed, but assuming 10Gbit/s, then the > linerate is 14.88Mpps, which is 67.2 ns between arriving packets. Thus, > if the lookup cost is 82 ns, thus you cannot claim linerate performance > with these numbers. > > > Details: > > This is calculated based on the the minimum Ethernet frame size > 84-bytes, see https://en.wikipedia.org/wiki/Ethernet_frame for why this > is the minimum size. > > 10*10^9/(84*8) = 14,880,952 pps > 1/last*10^9 = 67.2 ns >
Yes, it's not actually line-rate forwarding, but it shows the intent towards that. Currently we are doing many things in fib_table_lookup() that can be simplified for a router. fib_get_table() and FIB_RES_DEV() would be simplified if we disable IP_ROUTE_MULTIPATH and IP_MULTIPLE_TABLES. We can increase throughput by doing less :-) Moreover if a network mostly carries larger packets (for instance, a network exclusively used for video streaming), then a 40Gb NIC produces packets in every 300ns. 40*10^9/(1500*8) = 3.4mpps 1/last*10^9 = 300 ns > -- > Best regards, > Jesper Dangaard Brouer > MSc.CS, Principal Kernel Engineer at Red Hat > LinkedIn: http://www.linkedin.com/in/brouer