]> git.proxmox.com Git - mirror_ovs.git/commit
lib/cmap: cmap_find_batch().
authorJarno Rajahalme <jrajahalme@nicira.com>
Wed, 24 Sep 2014 17:39:20 +0000 (10:39 -0700)
committerJarno Rajahalme <jrajahalme@nicira.com>
Mon, 6 Oct 2014 22:33:47 +0000 (15:33 -0700)
commit52a524eb20462dd20d2e4e38d0fe97c07de040a7
treed91b302bac124458d4e65275011e19d2b32fab83
parent55847abee8fdb45f06ef94764d766ee81abb9ac4
lib/cmap: cmap_find_batch().

Batching the cmap find improves the memory behavior with large cmaps
and can make searches twice as fast:

$ tests/ovstest test-cmap benchmark 2000000 8 0.1 16
Benchmarking with n=2000000, 8 threads, 0.10% mutations, batch size 16:
cmap insert:    533 ms
cmap iterate:    57 ms
batch search:   146 ms
cmap destroy:   233 ms

cmap insert:    552 ms
cmap iterate:    56 ms
cmap search:    299 ms
cmap destroy:   229 ms

hmap insert:    222 ms
hmap iterate:   198 ms
hmap search:   2061 ms
hmap destroy:   209 ms

Batch size 1 has small performance penalty, but all other batch sizes
are faster than non-batched cmap_find().  The batch size 16 was
experimentally found better than 8 or 32, so now
classifier_lookup_miniflow_batch() performs the cmap find operations
in batches of 16.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
lib/bitmap.h
lib/classifier.c
lib/classifier.h
lib/cmap.c
lib/cmap.h
lib/dpif-netdev.c
tests/test-cmap.c