summaryrefslogtreecommitdiffstats
path: root/src/plugins
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
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')
-rw-r--r--src/plugins/lacp/lacp_doc.md14
-rw-r--r--src/plugins/lb/lbhash.h22
2 files changed, 8 insertions, 28 deletions
diff --git a/src/plugins/lacp/lacp_doc.md b/src/plugins/lacp/lacp_doc.md
index 1f7fe4a4493..fb2bede278c 100644
--- a/src/plugins/lacp/lacp_doc.md
+++ b/src/plugins/lacp/lacp_doc.md
@@ -18,27 +18,27 @@ a high bandwidth transmission medium and create a fault-tolerant link.
create bond mode lacp [hw-addr <mac-address>] [load-balance { l2 | l23 | l34 }]
2. Enslave the physical interface to the bond
-enslave interface <interface> to <bond-interface-name> [passive] [long-timeout]"
+bond add <bond-interface-name> <slave-interface> [passive] [long-timeout]"
3. Delete the bond interface
delete bond {<interface> | sw_if_index <sw_idx>}
4. Detach the slave interface from the bond
-detach interface <interface>
+bond del <slave-interface>
### Configuration example
```
create bond mode lacp
set interface state BondEthernet0 up
-enslave interface TenGigabitEthernet7/0/0 to BondEthernet1
-enslave interface TenGigabitEthernet7/0/1 to BondEthernet1
-enslave interface TenGigabitEthernet5/0/0 to BondEthernet1
-enslave interface TenGigabitEthernet5/0/1 to BondEthernet1
+bond add BondEthernet0 TenGigabitEthernet7/0/0
+bond add BondEthernet0 TenGigabitEthernet7/0/1
+bond add BondEthernet0 TenGigabitEthernet5/0/0
+bond add BondEthernet0 TenGigabitEthernet5/0/1
```
```
-detach interface TenGigabitEthernet5/0/1
+bond del TenGigabitEthernet5/0/1
```
```
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)
{