summaryrefslogtreecommitdiffstats
path: root/src/plugins/lb
diff options
context:
space:
mode:
authorSteven <sluong@cisco.com>2018-05-11 11:06:23 -0700
committerDamjan Marion <dmarion.lists@gmail.com>2018-05-25 11:46:05 +0000
commit0d88301a576191a0e330e539cf1dcb3837ee1bf6 (patch)
tree2bf42dd2935161d6cdb982371015e94a52d74e62 /src/plugins/lb
parent0053de63ec4bf8b9bce7817f1b61c9791baf6c26 (diff)
bond: performance harvesting
- hash is great. But it is a bit too slow for the DP. Use direct array indexing to quickly retrieve the slave interface. - the algorithm used by flow hash is great. But it is a bit too slow for the DP. Use l2_hash_hash() extracted from lb_hash.h which ECMP is using. It makes use of intrinsic crc32 instruction set. - shortcut modulo arithmetic when the operand is 2**x (where x up to 4) to avoid division instruction. - special case for link count == 1 in bond_tx_fn() - use clib_mem_unaligned to access data for the packet to avoid alignment error - Fix some typos for packet tracing. Change-Id: I8eae3ad497061c5473aa675ba894ee0211120d25 Signed-off-by: Steven <sluong@cisco.com>
Diffstat (limited to 'src/plugins/lb')
-rw-r--r--src/plugins/lb/lbhash.h22
1 files changed, 1 insertions, 21 deletions
diff --git a/src/plugins/lb/lbhash.h b/src/plugins/lb/lbhash.h
index 10d3beab13b..5d2ff24f044 100644
--- a/src/plugins/lb/lbhash.h
+++ b/src/plugins/lb/lbhash.h
@@ -30,6 +30,7 @@
#define LB_PLUGIN_LB_LBHASH_H_
#include <vnet/vnet.h>
+#include <vppinfra/lb_hash_hash.h>
#if defined (__SSE4_2__)
#include <immintrin.h>
@@ -101,27 +102,6 @@ void lb_hash_free(lb_hash_t *h)
vec_free(mem);
}
-#if defined(clib_crc32c_uses_intrinsics) && !defined (__i386__)
-static_always_inline
-u32 lb_hash_hash(u64 k0, u64 k1, u64 k2, u64 k3, u64 k4)
-{
- u64 val = 0;
- val = crc32_u64(val, k0);
- val = crc32_u64(val, k1);
- val = crc32_u64(val, k2);
- val = crc32_u64(val, k3);
- val = crc32_u64(val, k4);
- return (u32) val;
-}
-#else
-static_always_inline
-u32 lb_hash_hash(u64 k0, u64 k1, u64 k2, u64 k3, u64 k4)
-{
- u64 tmp = k0 ^ k1 ^ k2 ^ k3 ^ k4;
- return (u32)clib_xxhash (tmp);
-}
-#endif
-
static_always_inline
void lb_hash_prefetch_bucket(lb_hash_t *ht, u32 hash)
{