datapath: An expanded table should be larger than its predecessor
authorSimon Horman <horms@verge.net.au>
Tue, 12 Jul 2011 06:52:44 +0000 (15:52 +0900)
committerJesse Gross <jesse@nicira.com>
Tue, 12 Jul 2011 16:15:16 +0000 (09:15 -0700)
This resolves what appears to be a think-o in tbl_expand()

* Old Logic: Always create tables with TBL_MIN_BUCKETS buckets
* New Logic: Create tables twice as big as their predecessor

When sending 10,000 flows through ovs-vswitchd:
* Old Logic: CPU bound in tbl_lookup(), significant packet loss
* New Logic: ~10% of one core used, negligible packet loss

Tested with an Intel E5520 @ 2.27GHz,
flows from an ethernet device to to a dummy interface with
no address configured.

Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Jesse Gross <jesse@nicira.com>
datapath/table.c

index 725845de568ebb5c629f1785aac793fed8dd3a18..76086ee466151f94a075fa4cb1ddfa30cd9d34ed 100644 (file)
@@ -339,7 +339,7 @@ struct tbl *tbl_expand(struct tbl *table)
        }
 
        err = -ENOMEM;
-       new_table = tbl_create(TBL_MIN_BUCKETS);
+       new_table = tbl_create(n_buckets);
        if (!new_table)
                goto error;