Skip to content
  • Stefano Brivio's avatar
    eb16933a
    nft_set_pipapo: Prepare for single ranged field usage · eb16933a
    Stefano Brivio authored
    
    
    A few adjustments in nft_pipapo_init() are needed to allow usage of
    this set back-end for a single, ranged field.
    
    Provide a convenient NFT_PIPAPO_MIN_FIELDS definition that currently
    makes sure that the rbtree back-end is selected instead, for sets
    with a single field.
    
    This finally allows a fair comparison with rbtree sets, by defining
    NFT_PIPAPO_MIN_FIELDS as 0 and skipping rbtree back-end initialisation:
    
     ---------------.--------------------------.-------------------------.
     AMD Epyc 7402  |      baselines, Mpps     |   Mpps, % over rbtree   |
      1 thread      |__________________________|_________________________|
      3.35GHz       |        |        |        |            |            |
      768KiB L1D$   | netdev |  hash  | rbtree |            |   pipapo   |
     ---------------|  hook  |   no   | single |   pipapo   |single field|
     type   entries |  drop  | ranges | field  |single field|    AVX2    |
     ---------------|--------|--------|--------|------------|------------|
     net,port       |        |        |        |            |            |
              1000  |   19.0 |   10.4 |    3.8 | 6.0   +58% | 9.6  +153% |
     ---------------|--------|--------|--------|------------|------------|
     port,net       |        |        |        |            |            |
               100  |   18.8 |   10.3 |    5.8 | 9.1   +57% |11.6  +100% |
     ---------------|--------|--------|--------|------------|------------|
     net6,port      |        |        |        |            |            |
              1000  |   16.4 |    7.6 |    1.8 | 2.8   +55% | 6.5  +261% |
     ---------------|--------|--------|--------|------------|------------|
     port,proto     |        |        |        |     [1]    |    [1]     |
             30000  |   19.6 |   11.6 |    3.9 | 0.9   -77% | 2.7   -31% |
     ---------------|--------|--------|--------|------------|------------|
     port,proto     |        |        |        |            |            |
             10000  |   19.6 |   11.6 |    4.4 | 2.1   -52% | 5.6   +27% |
     ---------------|--------|--------|--------|------------|------------|
     port,proto     |        |        |        |            |            |
     4 threads 10000|   77.9 |   45.1 |   17.4 | 8.3   -52% |22.4   +29% |
     ---------------|--------|--------|--------|------------|------------|
     net6,port,mac  |        |        |        |            |            |
                10  |   16.5 |    5.4 |    4.3 | 4.5    +5% | 8.2   +91% |
     ---------------|--------|--------|--------|------------|------------|
     net6,port,mac, |        |        |        |            |            |
     proto    1000  |   16.5 |    5.7 |    1.9 | 2.8   +47% | 6.6  +247% |
     ---------------|--------|--------|--------|------------|------------|
     net,mac        |        |        |        |            |            |
              1000  |   19.0 |    8.4 |    3.9 | 6.0   +54% | 9.9  +154% |
     ---------------'--------'--------'--------'------------'------------'
     [1] Causes switch of lookup table buckets for 'port' to 4-bit groups
    
    Signed-off-by: default avatarStefano Brivio <sbrivio@redhat.com>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    eb16933a
    nft_set_pipapo: Prepare for single ranged field usage
    Stefano Brivio authored
    
    
    A few adjustments in nft_pipapo_init() are needed to allow usage of
    this set back-end for a single, ranged field.
    
    Provide a convenient NFT_PIPAPO_MIN_FIELDS definition that currently
    makes sure that the rbtree back-end is selected instead, for sets
    with a single field.
    
    This finally allows a fair comparison with rbtree sets, by defining
    NFT_PIPAPO_MIN_FIELDS as 0 and skipping rbtree back-end initialisation:
    
     ---------------.--------------------------.-------------------------.
     AMD Epyc 7402  |      baselines, Mpps     |   Mpps, % over rbtree   |
      1 thread      |__________________________|_________________________|
      3.35GHz       |        |        |        |            |            |
      768KiB L1D$   | netdev |  hash  | rbtree |            |   pipapo   |
     ---------------|  hook  |   no   | single |   pipapo   |single field|
     type   entries |  drop  | ranges | field  |single field|    AVX2    |
     ---------------|--------|--------|--------|------------|------------|
     net,port       |        |        |        |            |            |
              1000  |   19.0 |   10.4 |    3.8 | 6.0   +58% | 9.6  +153% |
     ---------------|--------|--------|--------|------------|------------|
     port,net       |        |        |        |            |            |
               100  |   18.8 |   10.3 |    5.8 | 9.1   +57% |11.6  +100% |
     ---------------|--------|--------|--------|------------|------------|
     net6,port      |        |        |        |            |            |
              1000  |   16.4 |    7.6 |    1.8 | 2.8   +55% | 6.5  +261% |
     ---------------|--------|--------|--------|------------|------------|
     port,proto     |        |        |        |     [1]    |    [1]     |
             30000  |   19.6 |   11.6 |    3.9 | 0.9   -77% | 2.7   -31% |
     ---------------|--------|--------|--------|------------|------------|
     port,proto     |        |        |        |            |            |
             10000  |   19.6 |   11.6 |    4.4 | 2.1   -52% | 5.6   +27% |
     ---------------|--------|--------|--------|------------|------------|
     port,proto     |        |        |        |            |            |
     4 threads 10000|   77.9 |   45.1 |   17.4 | 8.3   -52% |22.4   +29% |
     ---------------|--------|--------|--------|------------|------------|
     net6,port,mac  |        |        |        |            |            |
                10  |   16.5 |    5.4 |    4.3 | 4.5    +5% | 8.2   +91% |
     ---------------|--------|--------|--------|------------|------------|
     net6,port,mac, |        |        |        |            |            |
     proto    1000  |   16.5 |    5.7 |    1.9 | 2.8   +47% | 6.6  +247% |
     ---------------|--------|--------|--------|------------|------------|
     net,mac        |        |        |        |            |            |
              1000  |   19.0 |    8.4 |    3.9 | 6.0   +54% | 9.9  +154% |
     ---------------'--------'--------'--------'------------'------------'
     [1] Causes switch of lookup table buckets for 'port' to 4-bit groups
    
    Signed-off-by: default avatarStefano Brivio <sbrivio@redhat.com>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
Loading