aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Wallace <dwallacelf@gmail.com>2020-01-08 21:14:25 +0000
committerDave Wallace <dwallacelf@gmail.com>2020-01-29 13:59:03 +0000
commit074ae9732d06f962a65d91147b55abf86b42b6d9 (patch)
treee66c8119d4c9af581b2200c5ef166e12efb24ab2
parent3bc72c6e268474a6bed725e5371d66f0e369ab16 (diff)
perf: QUIC transport hoststack test suite
Change-Id: I73f4be7ea315c7a5dcce46e1bd3034bcb0a97ee2 Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
-rw-r--r--resources/libraries/python/HoststackUtil.py20
-rw-r--r--resources/libraries/python/autogen/Regenerator.py14
-rw-r--r--resources/libraries/robot/hoststack/hoststack.robot23
-rw-r--r--tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4udpquic-vppecho-bps.robot74
4 files changed, 117 insertions, 14 deletions
diff --git a/resources/libraries/python/HoststackUtil.py b/resources/libraries/python/HoststackUtil.py
index f95a6a6636..dde5cf60d0 100644
--- a/resources/libraries/python/HoststackUtil.py
+++ b/resources/libraries/python/HoststackUtil.py
@@ -44,6 +44,8 @@ class HoststackUtil():
f"socket-name {vpp_echo_attributes[u'vpp_api_socket']} " \
f"{vpp_echo_attributes[u'json_output']} " \
f"uri {proto}://{addr}/{port} " \
+ f"nthreads {vpp_echo_attributes[u'nthreads']} " \
+ f"mq-size {vpp_echo_attributes[u'mq_size']} " \
f"nclients {vpp_echo_attributes[u'nclients']} " \
f"quic-streams {vpp_echo_attributes[u'quic_streams']} " \
f"time {vpp_echo_attributes[u'time']} " \
@@ -299,10 +301,20 @@ class HoststackUtil():
raise RuntimeError(test_results)
if program_stdout:
bad_test_results = False
- if program == u"vpp_echo" and u"JSON stats" not in program_stdout:
- test_results += u"Invalid test data output!\n"
- bad_test_results = True
- test_results += program_stdout
+ if program[u"name"] == u"vpp_echo":
+ if u"JSON stats" in program_stdout:
+ test_results += program_stdout
+ # TODO: Decode vpp_echo output when JSON format is correct.
+ # json_start = program_stdout.find(u"{")
+ # vpp_echo_results = json.loads(program_stdout[json_start:])
+ if u'"has_failed": "0"' not in program_stdout:
+ bad_test_results = True
+ else:
+ test_results += u"Invalid test data output!\n" + \
+ program_stdout
+ bad_test_results = True
+ else:
+ test_results += program_stdout
if bad_test_results:
raise RuntimeError(test_results)
else:
diff --git a/resources/libraries/python/autogen/Regenerator.py b/resources/libraries/python/autogen/Regenerator.py
index 5b112f5a73..f065887da0 100644
--- a/resources/libraries/python/autogen/Regenerator.py
+++ b/resources/libraries/python/autogen/Regenerator.py
@@ -476,13 +476,13 @@ class Regenerator:
u"streams": 10, u"bytes_str": u"1G"},
]
hoststack_quic_kwargs_list = [
- {u"frame_size": 0, u"phy_cores": 1, u"clients": 1,
- u"streams": 1, u"bytes_str": u"100M"},
- {u"frame_size": 0, u"phy_cores": 1, u"clients": 1,
- u"streams": 10, u"bytes_str": u"100M"},
- {u"frame_size": 0, u"phy_cores": 1, u"clients": 10,
- u"streams": 1, u"bytes_str": u"100M"},
- {u"frame_size": 0, u"phy_cores": 1, u"clients": 10,
+ {u"phy_cores": 1, u"frame_size": 0, u"clients": 1,
+ u"streams": 1, u"bytes_str": u"10G"},
+ {u"phy_cores": 1, u"frame_size": 0, u"clients": 1,
+ u"streams": 10, u"bytes_str": u"1G"},
+ {u"phy_cores": 1, u"frame_size": 0, u"clients": 10,
+ u"streams": 1, u"bytes_str": u"1G"},
+ {u"phy_cores": 1, u"frame_size": 0, u"clients": 10,
u"streams": 10, u"bytes_str": u"100M"},
]
diff --git a/resources/libraries/robot/hoststack/hoststack.robot b/resources/libraries/robot/hoststack/hoststack.robot
index ed1e7b7cb6..e765169e32 100644
--- a/resources/libraries/robot/hoststack/hoststack.robot
+++ b/resources/libraries/robot/hoststack/hoststack.robot
@@ -35,8 +35,8 @@
| ... | api_seg_api_size=1G
| ... | tcp_cc_algo=cubic
| ... | sess_evt_q_seg_size=64M
-| ... | sess_evt_q_length=2048
-| ... | sess_prealloc_sess=128
+| ... | sess_evt_q_length=16384
+| ... | sess_prealloc_sess=1024
| ... | sess_v4_tbl_buckets=20000
| ... | sess_v4_tbl_mem=64M
| ... | sess_v4_hopen_buckets=20000
@@ -53,6 +53,8 @@
| ... | uri_protocol=quic
| ... | uri_ip4_addr=${EMPTY}
| ... | uri_port=1234
+| ... | nthreads=1
+| ... | mq_size=${vpp_hoststack_attr}[sess_evt_q_length]
| ... | nclients=1
| ... | quic_streams=1
| ... | time=sconnect:lastbyte
@@ -71,6 +73,8 @@
| ... | uri_protocol=quic
| ... | uri_ip4_addr=${EMPTY}
| ... | uri_port=1234
+| ... | nthreads=1
+| ... | mq_size=${vpp_hoststack_attr}[sess_evt_q_length]
| ... | nclients=1
| ... | quic_streams=1
| ... | time=sconnect:lastbyte
@@ -197,6 +201,8 @@
| | ... | *Arguments:*
| | ... | - ${cfg_vpp_feature} - VPP Feature requiring config Type: string
| | ... | - ${namespace} - Namespace Type: string
+| | ... | - ${nthreads} - Number of threads Type: string
+| | ... | - ${mq_size} - Number of threads Type: string
| | ... | - ${nclients} - Number of clients Type: string
| | ... | - ${quic_streams} - Number of quic streams Type: string
| | ... | - ${fifo_size} - Session Fifo Size Type: integer
@@ -214,6 +220,8 @@
| | [Arguments]
| | ... | ${cfg_vpp_feature}=${vpp_echo_server_attr}[cfg_vpp_feature]
| | ... | ${namespace}=${vpp_echo_server_attr}[namespace]
+| | ... | ${nthreads}=${vpp_echo_server_attr}[nthreads]
+| | ... | ${mq_size}=${vpp_echo_server_attr}[mq_size]
| | ... | ${nclients}=${vpp_echo_server_attr}[nclients]
| | ... | ${quic_streams}=${vpp_echo_server_attr}[quic_streams]
| | ... | ${time}=${vpp_echo_server_attr}[time]
@@ -226,6 +234,8 @@
| | Set To Dictionary | ${vpp_echo_server_attr} | cfg_vpp_feature
| | ... | ${cfg_vpp_feature}
| | Set To Dictionary | ${vpp_echo_server_attr} | namespace | ${namespace}
+| | Set To Dictionary | ${vpp_echo_server_attr} | nthreads | ${nthreads}
+| | Set To Dictionary | ${vpp_echo_server_attr} | mq_size | ${mq_size}
| | Set To Dictionary | ${vpp_echo_server_attr} | nclients | ${nclients}
| | Set To Dictionary | ${vpp_echo_server_attr} | quic_streams | ${quic_streams}
| | Set To Dictionary | ${vpp_echo_server_attr} | time | ${time}
@@ -245,7 +255,10 @@
| | ... | *Arguments:*
| | ... | - ${cfg_vpp_feature} - VPP Feature requiring config Type: string
| | ... | - ${namespace} - Namespace Type: string
+| | ... | - ${nthreads} - Number of threads Type: string
+| | ... | - ${mq_size} - Number of threads Type: string
| | ... | - ${nclients} - Number of clients Type: string
+| | ... | - ${quic_streams} - Number of quic streams Type: string
| | ... | - ${fifo_size} - Session Fifo Size Type: integer
| | ... | - ${time} - Timing events (start:end) Type: string
| | ... | - ${rx_bytes} - Number of Bytes to receive Type: string
@@ -261,8 +274,10 @@
| | [Arguments]
| | ... | ${cfg_vpp_feature}=${vpp_echo_client_attr}[cfg_vpp_feature]
| | ... | ${namespace}=${vpp_echo_client_attr}[namespace]
+| | ... | ${nthreads}=${vpp_echo_client_attr}[nthreads]
+| | ... | ${mq_size}=${vpp_echo_client_attr}[mq_size]
| | ... | ${nclients}=${vpp_echo_client_attr}[nclients]
-| | ... | ${quic_streams}=${vpp_echo_server_attr}[quic_streams]
+| | ... | ${quic_streams}=${vpp_echo_client_attr}[quic_streams]
| | ... | ${time}=${vpp_echo_client_attr}[time]
| | ... | ${fifo_size}=${vpp_echo_client_attr}[fifo_size]
| | ... | ${rx_bytes}=${vpp_echo_client_attr}[rx_bytes]
@@ -273,6 +288,8 @@
| | Set To Dictionary | ${vpp_echo_client_attr} | cfg_vpp_feature
| | ... | ${cfg_vpp_feature}
| | Set To Dictionary | ${vpp_echo_client_attr} | namespace | ${namespace}
+| | Set To Dictionary | ${vpp_echo_client_attr} | nthreads | ${nthreads}
+| | Set To Dictionary | ${vpp_echo_client_attr} | mq_size | ${mq_size}
| | Set To Dictionary | ${vpp_echo_client_attr} | nclients | ${nclients}
| | Set To Dictionary | ${vpp_echo_client_attr} | quic_streams | ${quic_streams}
| | Set To Dictionary | ${vpp_echo_client_attr} | time | ${time}
diff --git a/tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4udpquic-vppecho-bps.robot b/tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4udpquic-vppecho-bps.robot
new file mode 100644
index 0000000000..a93afa974a
--- /dev/null
+++ b/tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4udpquic-vppecho-bps.robot
@@ -0,0 +1,74 @@
+# Copyright (c) 2020 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+*** Settings ***
+| Library | resources.libraries.python.HoststackUtil
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/hoststack/hoststack.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV
+| ... | NIC_Intel-X710 | DRV_VFIO_PCI | UDP | QUIC | VPPECHO
+| ... | HOSTSTACK | eth-ip4udpquic-vppecho
+|
+| Suite Setup | Setup suite single link no tg
+| Suite Teardown | Tear down suite
+| Test Setup | Setup test
+| Test Teardown | Tear down test
+|
+| Test Template | Local template
+|
+| Documentation | *QUIC Unidirectional Echo Client -> Echo Server throughput.
+|
+| ... | *[Top] Network Topologies:* DUT-DUT 2-node topology
+| ... | with single link between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP-QUIC
+| ... | *[Cfg] DUT configuration:*
+| ... | *[Ref] Applicable standard specifications:*
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | quic_plugin.so
+| ${nic_name}= | Intel-X710
+| ${nic_driver}= | vfio-pci
+| ${overhead}= | ${0}
+| ${frame_size}= | ${9000}
+| ${crypto_type}= | ${None}
+
+*** Keywords ***
+| Local template
+| | [Arguments] | ${phy_cores} | ${clients} | ${streams} | ${bytes}
+| |
+| | Set VPP Hoststack Attributes | phy_cores=${phy_cores}
+| | Set VPP Echo Server Attributes | cfg_vpp_feature=quic | nclients=${clients}
+| | ... | quic_streams=${streams} | rx_bytes=${bytes}
+| | Set VPP Echo Client Attributes | cfg_vpp_feature=quic | nclients=${clients}
+| | ... | quic_streams=${streams} | tx_bytes=${bytes}
+| | ${no_results}= | Get Test Results From Hoststack VPP Echo Test
+| | Run Keyword If | ${no_results}==True | FAIL
+| | ... | No Test Results From External Hoststack Apps
+
+*** Test Cases ***
+| tc01-9000B-1c-eth-ip4udpquic-vppecho-bps
+| | [Tags] | 1C | 1CLIENT | 1STREAM
+| | phy_cores=${1} | clients=${1} | streams=${1} | bytes=10G
+
+| tc02-9000B-1c-eth-ip4udpquic-vppecho-bps
+| | [Tags] | 1C | 1CLIENT | 10STREAM
+| | phy_cores=${1} | clients=${1} | streams=${10} | bytes=1G
+
+| tc03-9000B-1c-eth-ip4udpquic-vppecho-bps
+| | [Tags] | 1C | 10CLIENT | 1STREAM
+| | phy_cores=${1} | clients=${10} | streams=${1} | bytes=1G
+
+| tc04-9000B-1c-eth-ip4udpquic-vppecho-bps
+| | [Tags] | 1C | 10CLIENT | 10STREAM
+| | phy_cores=${1} | clients=${10} | streams=${10} | bytes=100M