• Nikolay Aleksandrov's avatar
    ipmr: improve hash scalability · 8fb472c0
    Nikolay Aleksandrov authored
    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: default avatarNikolay Aleksandrov <nikolay@cumulusnetworks.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    8fb472c0
ipmr.c 67.7 KB