From dde14805895120421b3671959ed4c2a86fde1f43 Mon Sep 17 00:00:00 2001 From: Ann Kamyshnikova Date: Wed, 20 Jul 2016 15:47:48 +0300 Subject: [PATCH] Add results for Neutron L3 HA testing Mitaka Change-Id: Ic919f28db68e4c6c7172c6946607cef115d7ad08 --- .../test_results/neutron_features/index.rst | 4 +- .../neutron_features/l3_ha/ping_floating.png | Bin 0 -> 66627 bytes ...t_results.rst => test_results_liberty.rst} | 4 +- .../l3_ha/test_results_mitaka.rst | 588 ++++++++++++++++++ 4 files changed, 593 insertions(+), 3 deletions(-) create mode 100644 doc/source/test_results/neutron_features/l3_ha/ping_floating.png rename doc/source/test_results/neutron_features/l3_ha/{test_results.rst => test_results_liberty.rst} (99%) create mode 100644 doc/source/test_results/neutron_features/l3_ha/test_results_mitaka.rst diff --git a/doc/source/test_results/neutron_features/index.rst b/doc/source/test_results/neutron_features/index.rst index 696f00d..b4bec7a 100644 --- a/doc/source/test_results/neutron_features/index.rst +++ b/doc/source/test_results/neutron_features/index.rst @@ -9,4 +9,6 @@ Neutron features scale testing .. toctree:: :maxdepth: 3 - l3_ha/test_results + l3_ha/test_results_liberty + l3_ha/test_results_mitaka + diff --git a/doc/source/test_results/neutron_features/l3_ha/ping_floating.png b/doc/source/test_results/neutron_features/l3_ha/ping_floating.png new file mode 100644 index 0000000000000000000000000000000000000000..2e199ea83bb8c6e37081b81df3c095cc1e83d181 GIT binary patch literal 66627 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 +**CPU** + 1x INTEL XEON Ivy Bridge 6C E5-2620 V2 2.1G 15M 7.2GT/s QPI 80w SOCKET 2011R 1600 ``_ +**RAM**: + 4x Samsung DDRIII 8GB DDR3-1866 1Rx4 ECC REG RoHS M393B1G70QH0-CMA +**NIC** + 1x AOC-STGN-i2S - 2-port 10 Gigabit Ethernet SFP+ + + + +Rally test results +================== + +L3 HA has a restriction of 255 routers per HA network per tenant. At this moment +we do not have the ability to create new HA network per tenant if the number of +VIPs exceed this limit. Based on this, for some tests, the number of tenants +was increased (NeutronNetworks.create_and_list_router). + +The most important results are provided by test_create_delete_routers test, +as it allows to catch possible race conditions during creation/deletion of HA +routers, HA networks and HA interfaces. There are already several known bugs +related to this which have been fixed in upstream. Some of them: + +* `bug/1528201 `_ +* `bug/1499647 `_ +* `bug/1529037 `_ +* `bug/1533441 `_ +* `bug/1533454 `_ +* `bug/1533457 `_ +* `bug/1548285 `_ + + +To find out more possible +issues test_create_delete_routers has been run multiple times with different +concurrency. Another important aspect is number of users per tenant for tests. +This increases load for tests. + + +.. list-table:: Results of test_create_delete_routers + :header-rows: 1 + + * + - Times + - Concurrency + - Users per tenant + - Number of errors + - Link for rally report + * + - 150 + - 50 + - 1 + - 0 + - `rally report `_ + * + - 250 + - 10 + - 3 + - 9 + - `rally report `_ + * + - 300 + - 10 + - 2 + - 1 + - `rally report `_ + * + - 300 + - 30 + - 5 + - 3 + - `rally report `_ + * + - 300 + - 40 + - 1 + - 4 + - `rally report `_ + * + - 300 + - 40 + - 5 + - 4 + - `rally report `_ + * + - 500 + - 50 + - 3 + - 55 + - `rally report `_ + * + - 300 + - 100 + - 1 + - 60 + - `rally report `_ + * + - 300 + - 30 + - 4 + - 0 + - `rally report `_ + + +In every suit with multiple scenarios ``boot_and_delete_server_with_secgroups`` +was executed to show overall performance and validity of environment. + + ++------------------------------------------+-------------------+-------+-------------+------------------+--------------------------------------------------------------------------------------------------------------+ +| Test | Number of tenants | Times | Concurrency | Number of errors | Link for rally report | ++------------------------------------------+-------------------+-------+-------------+------------------+--------------------------------------------------------------------------------------------------------------+ +|``create_and_delete_routers`` | 3 |10 |3 |1 |`rally report `_ | ++------------------------------------------+-------------------+-------+-------------+------------------+ | +|``create_and_list_routers`` | 4 |10 |3 |0 | | ++------------------------------------------+-------------------+-------+-------------+------------------+ | +|``create_and_update_routers`` |3 |10 |3 |0 | | ++------------------------------------------+-------------------+-------+-------------+------------------+ | +|``boot_and_delete_server_with_secgroups`` |1 |10 |3 |0 | | ++------------------------------------------+-------------------+-------+-------------+------------------+--------------------------------------------------------------------------------------------------------------+ +|``create_and_delete_routers`` |3 |300 |50 |4 | | ++------------------------------------------+-------------------+-------+-------------+------------------+ | +|``create_and_list_routers`` |4 |300 |50 |118 |`rally report `_ | ++------------------------------------------+-------------------+-------+-------------+------------------+ | +|``create_and_update_routers`` |3 |300 |50 |3 | | ++------------------------------------------+-------------------+-------+-------------+------------------+ | +|``boot_and_delete_server_with_secgroups`` |5 |450 |30 |63 | | ++------------------------------------------+-------------------+-------+-------------+------------------+--------------------------------------------------------------------------------------------------------------+ +|``create_and_delete_routers`` |3 |300 |50 |30 | | ++------------------------------------------+-------------------+-------+-------------+------------------+ | +|``create_and_list_routers`` |10 |300 |50 |0 |`rally report `_ | ++------------------------------------------+-------------------+-------+-------------+------------------+ | +|``create_and_update_routers`` |3 |300 |50 |20 | | ++------------------------------------------+-------------------+-------+-------------+------------------+ | +|``boot_and_delete_server_with_secgroups`` |5 |450 |30 |180 | | ++------------------------------------------+-------------------+-------+-------------+------------------+--------------------------------------------------------------------------------------------------------------+ + + +The errors discovered have been classified as the following bugs: + +.. list-table:: Bugs + :header-rows: 1 + + * + - Short description + - Trace + - Upstream bug + - Status + *https://bugs.launchpad.net/neutron/+bug/1528201 + - IpAddressGenerationFailure No more IP addresses available on network + - `trace `_ + - `bug/1562887 `_ + - Open (Affects Neutron without L3 HA enabled, probably Rally bug) + * + - SubnetInUse: Unable to complete operation on subnet + - `trace `_ + - `bug/1562878 `_ + - Open + * + - Not all HA networks deleted + - `not a trace `_ + - `bug/1562892 `_ + - This is result of `bug/1562878 `_ + * + - Race with deleting HA routers + - `trace on agent side `_ and on server side `trace `_ + - `bug/1605546 `_ + - In progress + * + - Rollback with creation of default security group + - `trace `_ + - `bug/1605201 `_ + - Open + * + - The server didn't respond in time. + - `trace `_ + - Load is to high that neutron server is not able to respond. + - Open + + +Frequency of appearance of the bugs above is shown in the following table: + +.. list-table:: Comparative analysis of failures + :header-rows: 1 + + * + - Test + - Number of all test of that kind that were executed + - Number of failed tests + - Number of tests that failed because of current problem + * + - ``create_delete_routers`` + - 2210 + - 248 (11,2 %) + - 121(5,5 %) - The server didn't respond in time. 11 (0,49 %) - SubnetInUse: Unable to complete operation on subnet + * + - ``create_and_update_routers`` + - 910 + - 23 (2,5 %) + - 20 (2,1 %) - The server didn't respond in time. + * + - ``create_and_list_routers`` + - 610 + - 118 (19,3 %) + - Incorrect test setup. Larger number of tenants was required. + * + - ``boot_and_delete_server_with_secgroups`` + - 910 + - 243 (26,7 %) + - 243 (26,7 %) - TimeoutException: Rally tired waiting for Server to become ('ACTIVE') current status BUILD + + + +Summary: +~~~~~~~~ + +1. In comparison with results for Liberty neutron-server +does not cope with higher load (a lot of "The server didn't respond in time" +errors) + +2. Among races with creation and deletion of HA router remains the race with +HA networks `bug/1562878 `_ +and race with deleting routers `bug/1605546 `_. + + + +Shaker test results +=================== + ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+ +| L3 HA | L3 HA during L3 agents restart | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| Lost | Errors | Link for report | Lost | Errors | Link for report | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| OpenStack L3 East-West | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| 0 | 0 | `report `__ | 6 | 0 | `report `__ | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| OpenStack L3 East-West Performance | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| 0 | 0 | `report `__ | 0 | 0 | `report `__ | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| OpenStack L3 North-South | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| 0 | 0 | `report `__ | 30 | 0 | `report `__ | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| OpenStack L3 North-South UDP | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| 0 | 1 | `report `__ | 4 | 0 | `report `__ | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| OpenStack L3 North-South Performance | +| | +| (concurrency 5) | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| 0 | 0 |`report `__ | 0 | 0 | `report `__ | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| OpenStack L3 North-South Dense | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| 0 | 0 | `report `__ | 0 | 0 | `report `__ | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| OpenStack L3 East-West Dense | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ +| 0 | 0 | `report `__ | 29 | 0 | `report `__ | ++----------------------------------------+--------+-----------------------------------------------------------------------------------------------------------------+--------+----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Shaker provides statistics about maximum, minimum and mean values of +different connection measurements. Maximum among all maximum values +and minimum among all minimum values was found for each test as well +as mean value was counted from all mean values. In the table below, +these values are presented. + ++-----------------+---------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------+ +| type | L3 HA | L3 HA during l3 agents restart | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| | min | mean | max | min | mean | max | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| OpenStack L3 East-West | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| ping\_icmp, | 0.29 | 9.1 | 21.08 | **0.04** | **9.57** | **972.05** | +| | | | | | | | +| ms | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| tcp\_download | 84.5 | 789.6 | 3614.99 | **0.07** | **886.38** | **5519.7** | +| | | | | | | | +| Mbits/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| tcp\_upload | 87.97 | 617.14 | 3364.86 | **85.69** | **604.72** | **4898.11** | +| | | | | | | | +| Mbits/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| Bandwidth | 151.13 | 933.28 | 3232.75 | **0.0** | **990.99** | **4340.5** | +| Mbit/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| OpenStack L3 East-West Performance | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| Bandwidth | 760.16 | 1316.44 | 2879.94 | **0.0** | **1220.97** | **4315.06** | +| Mbit/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| OpenStack L3 North-South | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| ping\_icmp, | 0.12 | 13.54 | 130.15 | **0.38** | **65.64** | **369.95** | +| | | | | | | | +| ms | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| tcp\_download | 0.11 | 204.71 | 771.85 | **11.07** | **156.67** | **731.95** | +| | | | | | | | +| Mbits/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| tcp\_upload | 1.46 | 131.58 | 719.26 | **41.01** | **240.1** | **864.65** | +| | | | | | | | +| Mbits/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| Bandwidth | 4.25 |198.02 | 680.56 | **0.0** | **184.97** | **900.81** | +| Mbit/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| OpenStack L3 North-South Performance | +| | +| (concurrency 5) | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| Bandwidth | 52.38 | 472.69 | 768.68 | **0.0** | **450.13** | **768.44** | +| Mbit/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| OpenStack L3 East-West Dense | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| ping\_icmp, | 0.06 | 6.87 | 53.34 | **0.37** | **7.51** | **50.08** | +| | | | | | | | +| ms | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| Bandwidth | 497.88 | 1832.61 | 3754.25 | **0.0** | **1580.26** | **3386.44** | +| Mbit/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| tcp\_download | 332.42 | 1536.71 | 3771.26 | **63.62** | **1436.54** | **3902.18** | +| | | | | | | | +| Mbits/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| tcp\_upload | 333.37 | 1091.59 | 2692.93 | **8.06** | **1047.41** | **3376.56** | +| | | | | | | | +| Mbits/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| OpenStack L3 North-South Dense | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| ping\_icmp, | 0.33 | 14.27 | 78.47 | **0.38** | **1.0** | **2.3** | +| | | | | | | | +| ms | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| Bandwidth | 106.25 | 375.94 | 721.31 | **0.0** | **267.31** | **758.63** | +| Mbit/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| tcp\_download | 66.48 | 294.2 | 668.21 | **493.42** | **535.22** | **552.0** | +| | | | | | | | +| Mbits/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ +| tcp\_upload | 61.12 | 245.19 | 658.95 | - | - | - | +| | | | | | | | +| Mbits/s | | | | | | | ++-----------------+----------------------------------------+----------------------------------+-----------------------------------------------------------+----------------+-----------------+----------------+ + + +Average value of difference between these values without and with +restart is presented in the next table: + ++--------+---------------+-----------------+---------------+-------------+ +| | ping\_icmp, | tcp\_download | tcp\_upload | Bandwidth | +| | | | | Mbit/s | +| | ms | Mbits/s | Mbits/s | | ++========+===============+=================+===============+=============+ +| min | -0.0925 | -21.1675 | 87.29 | 262 | ++--------+---------------+-----------------+---------------+-------------+ +| mean | -9.985 | -65.68 | -85.4875 | 72.39 | ++--------+---------------+-----------------+---------------+-------------+ +| max | -277.835 | -469.88 | -563.83 | 169.67 | ++--------+---------------+-----------------+---------------+-------------+ + + +Summary: +~~~~~~~~ + +1. The results show that mean values for metrics do not decrease dramatically +during stop of active L3 agent. + +Manual tests execution +====================== + +During manual testing, the following scenarios were tested: + +- Ping to external network from VM during reset of primary(non-primary) + controller + +- Ping from one VM to another VM in different network during ban L3 agent + +- Iperf UPD testing between VMs in different networks during ban L3 agent + +All tests were performed with large number of routers. + +Ping to external network from VM during reset of primary(non-primary) controller +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. image:: ping_external.png + :width: 650px + ++-------------+---------------------+----------------+---------------------------+ +| Iteration | Number of routers | Command | Number of loss packages | ++=============+=====================+================+===========================+ +| 1 | 10 | | 14 | ++-------------+---------------------+----------------+---------------------------+ +| 1 | 10 | | 2 | ++-------------+---------------------+----------------+---------------------------+ +| 2 | 50 | | 42 | ++-------------+---------------------+----------------+---------------------------+ +| 3 | 50 | | 41 | ++-------------+---------------------+----------------+---------------------------+ +| 4 | 100 | | 43 | ++-------------+---------------------+----------------+---------------------------+ +| 5 | 100 | | 42 | ++-------------+---------------------+----------------+---------------------------+ +| 6 | 100 | ping 8.8.8.8 | 47 | ++-------------+---------------------+----------------+---------------------------+ +| 7 | 150 | | 4 | ++-------------+---------------------+----------------+---------------------------+ +| 8 | 150 | | 15 | ++-------------+---------------------+----------------+---------------------------+ +| 9 | 150 | | 32 | ++-------------+---------------------+----------------+---------------------------+ +| 10 | 200 | | 48 | ++-------------+---------------------+----------------+---------------------------+ +| 11 | 200 | | 53 | ++-------------+---------------------+----------------+---------------------------+ +| 11 | 200 | | 57 | ++-------------+---------------------+----------------+---------------------------+ +| 11 | 225 | | 40 | ++-------------+---------------------+----------------+---------------------------+ + + + +After reboot of the controller on which l3 agent was active, another l3 agent +becomes active. When rebooted node recovers, that l3 agent becomes active as well - +this leads to extra loss of external connectivity in tenant network. + +After some time only one agent remains to be active - the one from rebooted +node. + +The root cause of this behavior is that routers are processed by l3 agent before +openvswitch agent sets up appropriate HA ports, so for some time recovered HA +router is isolated from HA routers on other hosts and becomes active. + + +This issue needs special attention and will be investigated as +`bug/1597461 `__. + +Work around for such issue: start l3 agent after openvswitch agent. Results +after applying such fix: + ++---------------------+----------------+---------------------------+ +| Number of routers | Command | Number of loss packages | ++=====================+================+===========================+ +| 50 | ping 8.8.8.8 | 3 | ++---------------------+----------------+---------------------------+ + +Ping from one VM to another VM in different network during ban L3 agent +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. image:: ping_floating.png + :width: 650px + ++-------------+---------------------+-------------------+---------------------------+ +| Iteration | Number of routers | Command | Number of loss packages | ++=============+=====================+===================+===========================+ +| 1 | 1 | | 2 | ++-------------+---------------------+-------------------+---------------------------+ +| 2 | 1 | | 3 | ++-------------+---------------------+-------------------+---------------------------+ +| 3 | 1 | | 3 | ++-------------+---------------------+-------------------+---------------------------+ +| 4 | 10 | | 1 | ++-------------+---------------------+-------------------+---------------------------+ +| 5 | 10 | | 5 | ++-------------+---------------------+-------------------+---------------------------+ +| 6 | 10 | | 3 | ++-------------+---------------------+-------------------+---------------------------+ +| 7 | 50 | | 4 | ++-------------+---------------------+-------------------+---------------------------+ +| 8 | 50 | | 3 | ++-------------+---------------------+-------------------+---------------------------+ +| 9 | 50 | | 4 | ++-------------+---------------------+-------------------+---------------------------+ +| 10 | 100 | | 1 | ++-------------+---------------------+-------------------+---------------------------+ +| 11 | 100 |ping 172.16.45.139 | 3 | ++-------------+---------------------+-------------------+---------------------------+ +| 12 | 150 | | 4 | ++-------------+---------------------+-------------------+---------------------------+ +| 13 | 150 | | 26 | ++-------------+---------------------+-------------------+---------------------------+ +| 14 | 150 | | 3 | ++-------------+---------------------+-------------------+---------------------------+ +| 15 | 200 | | 3 | ++-------------+---------------------+-------------------+---------------------------+ +| 16 | 200 | | 14 | ++-------------+---------------------+-------------------+---------------------------+ +| 17 | 200 | | 3 | ++-------------+---------------------+-------------------+---------------------------+ +| 18 | 225 | | 5 | ++-------------+---------------------+-------------------+---------------------------+ +| 19 | 225 | | 3 | ++-------------+---------------------+-------------------+---------------------------+ +| 20 | 250 | | 6 | ++-------------+---------------------+-------------------+---------------------------+ +| 21 | 250 | | 6 | ++-------------+---------------------+-------------------+---------------------------+ + +With 250 routers l3 agents started to fail with `unmanaged +state `__. + +Iperf UPD testing between VMs in different networks ban L3 agent +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. image:: iperf_addresses.png + :width: 650px + ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| Number of routers | Command | Loss (%) | ++=====================+=====================================================================+===============================================================+ +| 50 | iperf -c 10.2.0.4 -p 5001 -t 60 -i 10 --bandwidth 30M --len 64 -u | 5.8 | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| | iperf -c 10.2.0.4 -p 5001 -t 60 -i 10 --bandwidth 30M --len 64 -u | WARNING: did not receive ack of last datagram after 10 tries. | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| | iperf -c 10.2.0.4 -p 5001 -t 60 -i 10 --bandwidth 30M --len 64 -u | 12 | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| 100 | iperf -c 10.2.0.4 -p 5001 -t 60 -i 10 --bandwidth 30M --len 64 -u | 16 | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| | iperf -c 10.2.0.4 -p 5001 -t 60 -i 10 --bandwidth 30M --len 64 -u | 6.1 | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| 150 | iperf -c 10.2.0.4 -p 5001 -t 120 -i 10 --bandwidth 30M --len 64 -u | 4.3 | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| | iperf -c 10.2.0.4 -p 5001 -t 120 -i 10 --bandwidth 30M --len 64 -u | 4.8 | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| | iperf -c 10.2.0.4 -p 5001 -t 60 -i 10 --bandwidth 30M --len 64 -u | 31 | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| | iperf -c 10.2.0.4 -p 5001 -t 60 -i 10 --bandwidth 30M --len 64 -u | 6.9 | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| 200 | iperf -c 10.2.0.4 -p 5001 -t 90 -i 10 --bandwidth 30M --len 64 -u | 7.5 | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| | iperf -c 10.2.0.4 -p 5001 -t 90 -i 10 --bandwidth 30M --len 64 -u | WARNING: did not receive ack of last datagram after 10 tries. | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| 227 | iperf -c 10.2.0.4 -p 5001 -t 120 -i 10 --bandwidth 30M --len 64 -u | 8.9 | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ +| | iperf -c 10.2.0.4 -p 5001 -t 120 -i 10 --bandwidth 30M --len 64 -u | WARNING: did not receive ack of last datagram after 10 tries. | ++---------------------+---------------------------------------------------------------------+---------------------------------------------------------------+ + +With 227 routers l3 agents started to fail with `unmanaged +state `__. + +Summary: +~~~~~~~~ + +In comparison with results for MOS 8.0 (Liberty): + +1. The root cause of unstable L3 HA behaviour + `bug/1563298 `__ was found and filed + bug `bug/1597461 `__ + + +2. For stop/start of L3 agent results become more stable. + +3. With number of routers more than 227, agent’s recovery leads to + falling into unmanaged state.