aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/robot/performance
diff options
context:
space:
mode:
authorPeter Mikus <pmikus@cisco.com>2018-07-06 06:39:51 +0000
committerPeter Mikus <pmikus@cisco.com>2018-07-09 08:18:03 +0000
commitcc85afad85339d2cc8f035ce63ff21220d8e6b96 (patch)
tree8c51cf79b31af4544467d6e5f06c91d077648d08 /resources/libraries/robot/performance
parent92995a7a564c17040483488cbc0da07e28386bdb (diff)
CSIT-1142 2-node topology - keywords
- Clean up of 2-node setup KWs Change-Id: I59fc901fb57544eceb6a041b56b515cda8babf85 Signed-off-by: Peter Mikus <pmikus@cisco.com>
Diffstat (limited to 'resources/libraries/robot/performance')
-rw-r--r--resources/libraries/robot/performance/performance_configuration.robot123
-rw-r--r--resources/libraries/robot/performance/performance_setup.robot14
2 files changed, 72 insertions, 65 deletions
diff --git a/resources/libraries/robot/performance/performance_configuration.robot b/resources/libraries/robot/performance/performance_configuration.robot
index 21826a2160..ba6396f8fe 100644
--- a/resources/libraries/robot/performance/performance_configuration.robot
+++ b/resources/libraries/robot/performance/performance_configuration.robot
@@ -96,6 +96,26 @@
| | Vpp Route Add | ${dut1} | ${laddr_ip4} | 8 | ${tg_if1_ip4} | ${dut1_if1}
| | Vpp Route Add | ${dut2} | ${raddr_ip4} | 8 | ${tg_if2_ip4} | ${dut2_if2}
+| Initialize IPv4 forwarding in 2-node circular topology
+| | [Documentation]
+| | ... | Set UP state on VPP interfaces in path on nodes in 2-node circular
+| | ... | topology. Get the interface MAC addresses and setup ARP on all VPP
+| | ... | interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG links and
+| | ... | /30 prefix on DUT1 link. Set routing on DUT node with prefix /24 and
+| | ... | next hop of neighbour DUT interface IPv4 address.
+| | ...
+| | Set Interface State | ${dut1} | ${dut1_if1} | up
+| | Set Interface State | ${dut1} | ${dut1_if2} | up
+| | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
+| | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
+| | Add arp on dut | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg1_if1_mac}
+| | Add arp on dut | ${dut1} | ${dut1_if2} | 20.20.20.2 | ${tg1_if2_mac}
+| | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1}
+| | ... | 10.10.10.1 | 24
+| | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2}
+| | ... | 20.20.20.1 | 24
+| | All Vpp Interfaces Ready Wait | ${nodes}
+
| Initialize IPv4 forwarding in 3-node circular topology
| | [Documentation]
| | ... | Set UP state on VPP interfaces in path on nodes in 3-node circular
@@ -128,26 +148,6 @@
| | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | 1.1.1.1 | ${dut2_if1}
| | All Vpp Interfaces Ready Wait | ${nodes}
-| Initialize IPv4 forwarding in 2-node circular topology
-| | [Documentation]
-| | ... | Set UP state on VPP interfaces in path on nodes in 2-node circular
-| | ... | topology. Get the interface MAC addresses and setup ARP on all VPP
-| | ... | interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG links and
-| | ... | /30 prefix on DUT1 link. Set routing on DUT node with prefix /24 and
-| | ... | next hop of neighbour DUT interface IPv4 address.
-| | ...
-| | Set Interface State | ${dut1} | ${dut1_if1} | up
-| | Set Interface State | ${dut1} | ${dut1_if2} | up
-| | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
-| | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
-| | Add arp on dut | ${dut1} | ${dut1_if1} | 10.10.10.3 | ${tg1_if1_mac}
-| | Add arp on dut | ${dut1} | ${dut1_if2} | 20.20.20.3 | ${tg1_if2_mac}
-| | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1}
-| | ... | 10.10.10.2 | 24
-| | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2}
-| | ... | 20.20.20.2 | 24
-| | All Vpp Interfaces Ready Wait | ${nodes}
-
| Initialize IPv4 forwarding with scaling in 3-node circular topology
| | [Documentation]
| | ... | Custom setup of IPv4 topology with scalability of ip routes on all
@@ -781,6 +781,14 @@
| | ... | ELSE | Fail | Unsupported behaviour: ${behavior}
| | All Vpp Interfaces Ready Wait | ${nodes}
+| Initialize L2 xconnect in 2-node circular topology
+| | [Documentation]
+| | ... | Setup L2 xconnect topology by cross connecting two interfaces on
+| | ... | each DUT. Interfaces are brought up.
+| | ...
+| | Configure L2XC | ${dut1} | ${dut1_if1} | ${dut1_if2}
+| | All Vpp Interfaces Ready Wait | ${nodes}
+
| Initialize L2 xconnect in 3-node circular topology
| | [Documentation]
| | ... | Setup L2 xconnect topology by cross connecting two interfaces on
@@ -1013,6 +1021,25 @@
| | Configure L2XC | ${dut2} | ${subif_index_2} | ${vhost_if1}
| | Configure L2XC | ${dut2} | ${dut2_if2} | ${vhost_if2}
+| Initialize L2 bridge domain in 2-node circular topology
+| | [Documentation]
+| | ... | Setup L2 DB topology by adding two interfaces on DUT into BD
+| | ... | that is created automatically with index 1. Learning is enabled.
+| | ... | Interfaces are brought up.
+| | ...
+| | ... | *Arguments:*
+| | ... | - bd_id - Bridge domain ID. Type: integer
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Initialize L2 bridge domain in 2-node circular topology \| 1 \|
+| | ...
+| | [Arguments] | ${bd_id}=${1}
+| | ...
+| | Add interface to bridge domain | ${dut1} | ${dut1_if1} | ${bd_id}
+| | Add interface to bridge domain | ${dut1} | ${dut1_if2} | ${bd_id}
+| | All Vpp Interfaces Ready Wait | ${nodes}
+
| Initialize L2 bridge domain in 3-node circular topology
| | [Documentation]
| | ... | Setup L2 DB topology by adding two interfaces on each DUT into BD
@@ -1766,50 +1793,30 @@
| | Add interface to bridge domain | ${dut2} | ${vhost_if2} | ${bd_id2}
| | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${bd_id2}
-| Add PCI devices to DUTs in 3-node single link topology
+| Add PCI devices to all DUTs
| | [Documentation]
| | ... | Add PCI devices to VPP configuration file.
| | ...
-| | ${dut1_if1_pci}= | Get Interface PCI Addr | ${dut1} | ${dut1_if1}
-| | ${dut1_if2_pci}= | Get Interface PCI Addr | ${dut1} | ${dut1_if2}
-| | ${dut2_if1_pci}= | Get Interface PCI Addr | ${dut2} | ${dut2_if1}
-| | ${dut2_if2_pci}= | Get Interface PCI Addr | ${dut2} | ${dut2_if2}
-| | Run keyword | DUT1.Add DPDK Dev | ${dut1_if1_pci} | ${dut1_if2_pci}
-| | Run keyword | DUT2.Add DPDK Dev | ${dut2_if1_pci} | ${dut2_if2_pci}
-| | Set Test Variable | ${dut1_if1_pci}
-| | Set Test Variable | ${dut1_if2_pci}
-| | Set Test Variable | ${dut2_if1_pci}
-| | Set Test Variable | ${dut2_if2_pci}
-
-| Add single PCI device to DUTs in 3-node single link topology
-| | [Documentation]
-| | ... | Add single (first) PCI device on DUT1 to VPP configuration file.
-| | ... | Add single (last) PCI device on DUT2 to VPP configuration file.
-| | ...
-| | ${dut1_if1_pci}= | Get Interface PCI Addr | ${dut1} | ${dut1_if1}
-| | ${dut2_if2_pci}= | Get Interface PCI Addr | ${dut2} | ${dut2_if2}
-| | Run keyword | DUT1.Add DPDK Dev | ${dut1_if1_pci}
-| | Run keyword | DUT2.Add DPDK Dev | ${dut2_if2_pci}
-| | Set Test Variable | ${dut1_if1_pci}
-| | Set Test Variable | ${dut2_if2_pci}
-
-| Add PCI devices to DUTs in 2-node single link topology
-| | [Documentation]
-| | ... | Add PCI devices to VPP configuration file.
-| | ...
-| | ${dut1_if1_pci}= | Get Interface PCI Addr | ${dut1} | ${dut1_if1}
-| | ${dut1_if2_pci}= | Get Interface PCI Addr | ${dut1} | ${dut1_if2}
-| | Run keyword | DUT1.Add DPDK Dev | ${dut1_if1_pci} | ${dut1_if2_pci}
-| | Set Test Variable | ${dut1_if1_pci}
-| | Set Test Variable | ${dut1_if2_pci}
+| | ${duts}= | Get Matches | ${nodes} | DUT*
+| | :FOR | ${dut} | IN | @{duts}
+| | | ${if1_pci}= | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if1}
+| | | ${if2_pci}= | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if2}
+| | | Run keyword | ${dut}.Add DPDK Dev | ${if1_pci} | ${if2_pci}
+| | | Set Test Variable | ${${dut}_if1_pci} | ${if1_pci}
+| | | Set Test Variable | ${${dut}_if2_pci} | ${if2_pci}
-| Add single PCI device to DUTs in 2-node single link topology
+| Add single PCI device to all DUTs
| | [Documentation]
-| | ... | Add single (first) PCI device on DUT1 to VPP configuration file.
+| | ... | Add single (first) PCI device on DUT1 and single (last) PCI device on
+| | ... | DUT2 to VPP configuration file.
| | ...
-| | ${dut1_if1_pci}= | Get Interface PCI Addr | ${dut1} | ${dut1_if1}
-| | Run keyword | DUT1.Add DPDK Dev | ${dut1_if1_pci}
-| | Set Test Variable | ${dut1_if1_pci}
+| | ${duts}= | Get Matches | ${nodes} | DUT*
+| | :FOR | ${dut} | IN | @{duts}
+| | | ${if1_pci}= | Run Keyword If | '${dut}' == 'DUT1' | Get Interface PCI Addr
+| | | ... | ${nodes['${dut}']} | ${${dut}_if1} | ELSE | Get Interface PCI Addr
+| | | ... | ${nodes['${dut}']} | ${${dut}_if2}
+| | | Run keyword | ${dut}.Add DPDK Dev | ${if1_pci}
+| | | Set Test Variable | ${${dut}_if1_pci} | ${if1_pci}
| Add VLAN Strip Offload switch off between DUTs in 3-node single link topology
| | [Documentation]
diff --git a/resources/libraries/robot/performance/performance_setup.robot b/resources/libraries/robot/performance/performance_setup.robot
index adcdb2173d..3f7eba0393 100644
--- a/resources/libraries/robot/performance/performance_setup.robot
+++ b/resources/libraries/robot/performance/performance_setup.robot
@@ -484,13 +484,13 @@
# Suite teardowns
-| Tear down 3-node performance topology
+| Tear down 2-node performance topology
| | [Documentation]
| | ... | Suite teardown phase with traffic generator teardown.
| | ...
| | Teardown traffic generator | ${tg}
-| Tear down 3-node performance topology with container
+| Tear down 2-node performance topology with container
| | [Documentation]
| | ... | Suite teardown phase with traffic generator teardown and container
| | ... | destroy.
@@ -499,13 +499,13 @@
| | :FOR | ${group} | IN | @{container_groups}
| | | Destroy all '${group}' containers
-| Tear down 2-node performance topology
+| Tear down 3-node performance topology
| | [Documentation]
| | ... | Suite teardown phase with traffic generator teardown.
| | ...
| | Teardown traffic generator | ${tg}
-| Tear down 2-node performance topology with container
+| Tear down 3-node performance topology with container
| | [Documentation]
| | ... | Suite teardown phase with traffic generator teardown and container
| | ... | destroy.
@@ -720,22 +720,22 @@
| | Run keyword unless | ${dut2_node}==${None}
| | ... | Tear down guest VM with dpdk-testpmd | ${dut2} | ${dut2_vm_refs}
-| Tear down DPDK 3-node performance topology
+| Tear down DPDK 2-node performance topology
| | [Documentation]
| | ... | Suite teardown phase with traffic generator teardown.
| | ... | Cleanup DPDK test environment.
| | ...
| | Teardown traffic generator | ${tg}
| | Cleanup DPDK Environment | ${dut1} | ${dut1_if1} | ${dut1_if2}
-| | Cleanup DPDK Environment | ${dut2} | ${dut2_if1} | ${dut2_if2}
-| Tear down DPDK 2-node performance topology
+| Tear down DPDK 3-node performance topology
| | [Documentation]
| | ... | Suite teardown phase with traffic generator teardown.
| | ... | Cleanup DPDK test environment.
| | ...
| | Teardown traffic generator | ${tg}
| | Cleanup DPDK Environment | ${dut1} | ${dut1_if1} | ${dut1_if2}
+| | Cleanup DPDK Environment | ${dut2} | ${dut2_if1} | ${dut2_if2}
| Tear down performance discovery test with NAT
| | [Documentation] | Common test teardown for ndrdisc and pdrdisc performance \
s_overflow (ei)) overflow++; /* Set value (No matter if success) */ flowhash_value (tm->hash, ei)->as_u64[0] = i + 1; /* Save value until time > 1 */ flowhash_timeout (tm->hash, ei) = 1; } delta = clib_time_now (&tm->clib_time) - before; total = tm->nitems; fformat (stdout, "%lld additions in %.6f seconds\n", total, delta); if (delta > 0) fformat (stdout, "%.f additions per second\n", ((f64) total) / delta); fformat (stdout, "%u elements in table\n", flowhash_elts_8_8 (tm->hash, 1)); fformat (stdout, "Flowhash counters:\n"); fformat (stdout, " collision-lookup: %lu\n", tm->hash->collision_lookup_counter); fformat (stdout, " not-enough-buckets: %lu\n", tm->hash->not_enough_buckets_counter); fformat (stdout, " overflows: %lu\n", overflow); /* Lookups (very similar to additions) */ overflow = 0; before = clib_time_now (&tm->clib_time); fformat (stdout, "Looking up %u items %u times...\n", tm->nitems, tm->iterations); for (j = 0; j < tm->iterations; j++) { i = 0; if (tm->prefetch) for (; i < tm->nitems - tm->prefetch; i++) { u32 ei; u32 hash = flowhash_hash_8_8 (&tm->keys[i + tm->prefetch]); flowhash_prefetch (tm->hash, hash); hash = flowhash_hash_8_8 (&tm->keys[i]); flowhash_get_8_8 (tm->hash, &tm->keys[i], hash, 1, &ei); if (flowhash_is_overflow (ei)) overflow++; else if (flowhash_timeout (tm->hash, ei) != 1) clib_warning ("Key not found: %lld\n", tm->keys[i].as_u64[0]); else if (flowhash_value (tm->hash, ei)->as_u64[0] != i + 1) clib_warning ("Value mismatch for key %lld\n", tm->keys[i].as_u64[0]); } for (; i < tm->nitems; i++) { u32 ei; u32 hash = flowhash_hash_8_8 (&tm->keys[i]); flowhash_get_8_8 (tm->hash, &tm->keys[i], hash, 1, &ei); if (flowhash_is_overflow (ei)) overflow++; else if (flowhash_timeout (tm->hash, ei) != 1) clib_warning ("Key not found: %lld\n", tm->keys[i].as_u64[0]); else if (flowhash_value (tm->hash, ei)->as_u64[0] != i + 1) clib_warning ("Value mismatch for key %lld\n", tm->keys[i].as_u64[0]); } } delta = clib_time_now (&tm->clib_time) - before; total = tm->nitems * tm->iterations; fformat (stdout, "%lld lookups in %.6f seconds\n", total, delta); if (delta > 0) fformat (stdout, "%.f lookups per second\n", ((f64) total) / delta); /* Delete */ for (i = 0; i < tm->nitems; i++) { u32 hash = flowhash_hash_8_8 (&tm->keys[i]); u32 ei; flowhash_get_8_8 (tm->hash, &tm->keys[i], hash, 1, &ei); flowhash_timeout (tm->hash, ei) = 0; } fformat (stdout, "%u elements in table\n", flowhash_elts_8_8 (tm->hash, 1)); vec_free (tm->keys); flowhash_free_8_8 (tm->hash); return NULL; } clib_error_t * test_flowhash_main (test_main_t * tm) { unformat_input_t *i = tm->input; clib_error_t *error; while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) { if (unformat (i, "seed %u", &tm->seed)) ; else if (unformat (i, "fixed-entries %d", &tm->fixed_entries)) ; else if (unformat (i, "collision-buckets %d", &tm->collision_buckets)) ; else if (unformat (i, "non-random-keys")) tm->non_random_keys = 1; else if (unformat (i, "nitems %d", &tm->nitems)) ; else if (unformat (i, "prefetch %d", &tm->prefetch)) ; else if (unformat (i, "iterations %d", &tm->iterations)) ; else return clib_error_return (0, "unknown input '%U'", format_unformat_error, i); } error = test_flowhash (tm); return error; } #ifdef CLIB_UNIX int main (int argc, char *argv[]) { unformat_input_t i; clib_error_t *error; test_main_t *tm = &test_main; clib_mem_init (0, 3ULL << 30); tm->fixed_entries = 8 << 20; tm->collision_buckets = 1 << 20; tm->seed = 0xdeadf00l; tm->iterations = 1; tm->input = &i; tm->nitems = 1000; tm->non_random_keys = 0; tm->key_hash = hash_create (0, sizeof (uword)); tm->prefetch = 0; clib_time_init (&tm->clib_time); unformat_init_command_line (&i, argv); error = test_flowhash_main (tm); unformat_free (&i); if (error) { clib_error_report (error); return 1; } return 0; return 0; } #endif /* CLIB_UNIX */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */