From: Nikolay Aleksandrov <[email protected]> Date: Thu, 12 Jan 2017 15:53:33 +0100
> Recently we started using ipmr with thousands of entries and easily hit > soft lockups on smaller devices. The reason is that the hash function > uses the high order bits from the src and dst, but those don't change in > many common cases, also the hash table is only 64 elements so with > thousands it doesn't scale at all. > This patch migrates the hash table to rhashtable, and in particular the > rhl interface which allows for duplicate elements to be chained because > of the MFC_PROXY support (*,G; *,*,oif cases) which allows for multiple > duplicate entries to be added with different interfaces (IMO wrong, but > it's been in for a long time). > > And here are some results from tests I've run in a VM: > mr_table size (default, allocated for all namespaces): > Before After > 49304 bytes 2400 bytes > > Add 65000 routes (the diff is much larger on smaller devices): > Before After > 1m42s 58s > > Forwarding 256 byte packets with 65000 routes (test done in a VM): > Before After > 3 Mbps / ~1465 pps 122 Mbps / ~59000 pps > > As a bonus we no longer see the soft lockups on smaller devices which > showed up even with 2000 entries before. > > Signed-off-by: Nikolay Aleksandrov <[email protected]> Looks really nice, applied, thanks!
