]> git.proxmox.com Git - mirror_ovs.git/commit
lib/ovs-atomic: Native support for 32-bit 586 with GCC.
authorJarno Rajahalme <jrajahalme@nicira.com>
Tue, 5 Aug 2014 20:51:19 +0000 (13:51 -0700)
committerJarno Rajahalme <jrajahalme@nicira.com>
Tue, 5 Aug 2014 20:51:19 +0000 (13:51 -0700)
commit105a9298e9aadf99fdf1a8943f9397f2a7cf11d6
tree20fa38587bce0dd1ce22ea5796cce6ac88b44770
parentf31841d570e7fe662831f42c9c1ab8eaa3b3d3ba
lib/ovs-atomic: Native support for 32-bit 586 with GCC.

XenServer runs OVS in dom0, which is a 32-bit VM.  As the build
environment lacks support for atomics, locked pthread atomics were
used with considerable performance hit.

This patch adds native support for ovs-atomic with 32-bit Pentium and
higher CPUs, when compiled with an older GCC.  We use inline asm with
the cmpxchg8b instruction, which was a new instruction to Intel
Pentium processors.  We do not expect anyone to run OVS on 486 or older
processor.

cmap benchmark before the patch on 32-bit XenServer build (uses
ovs-atomic-pthread):

$ tests/ovstest test-cmap benchmark 2000000 8 0.1
Benchmarking with n=2000000, 8 threads, 0.10% mutations:
cmap insert:   8835 ms
cmap iterate:   379 ms
cmap search:   6242 ms
cmap destroy:  1145 ms

After:

$ tests/ovstest test-cmap benchmark 2000000 8 0.1
Benchmarking with n=2000000, 8 threads, 0.10% mutations:
cmap insert:    711 ms
cmap iterate:    68 ms
cmap search:    353 ms
cmap destroy:   209 ms

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
lib/automake.mk
lib/ovs-atomic-i586.h [new file with mode: 0644]
lib/ovs-atomic.h