aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorxinfeng zhao <xinfengx.zhao@intel.com>2021-04-19 13:21:52 +0800
committerpmikus <pmikus@cisco.com>2021-06-10 06:40:01 +0000
commit75fe508bc9e03291977c1a28ca0adc31c3149df9 (patch)
treee67b7f451f1d4be7101185b6022ac5f08495ac38
parentdc85fa13993efce22191b41e3696301f1477fd7c (diff)
Add gtpu sw performance test cases
Signed-off-by: xinfeng zhao <xinfengx.zhao@intel.com> Reviewed-by: Yulong Pei <yulong.pei@intel.com> Change-Id: Ibe4420529192559a3cdbb84e0a67859750a9e0d5
-rw-r--r--docs/job_specs/report_iterative/3n-skx/vpp-mlr-00.md10
-rw-r--r--docs/tag_documentation.rst4
-rw-r--r--resources/api/vpp/supported_crcs.yaml2
-rw-r--r--resources/libraries/python/InterfaceUtil.py43
-rw-r--r--resources/libraries/python/topology.py3
-rw-r--r--resources/libraries/robot/overlay/gtpu.robot62
-rw-r--r--tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4gtpusw-ip4base-ndrpdr.robot138
7 files changed, 260 insertions, 2 deletions
diff --git a/docs/job_specs/report_iterative/3n-skx/vpp-mlr-00.md b/docs/job_specs/report_iterative/3n-skx/vpp-mlr-00.md
index 99b18f7c5c..4548fcca5c 100644
--- a/docs/job_specs/report_iterative/3n-skx/vpp-mlr-00.md
+++ b/docs/job_specs/report_iterative/3n-skx/vpp-mlr-00.md
@@ -1,5 +1,5 @@
# 3n-skx
-### tests 267
+### tests 273
### job hrs est. 24.6
### job hrs real ??.?
### test mins est. 5.54
@@ -191,6 +191,10 @@
1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4vxlan-l2xcbase
2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4vxlan-l2xcbase
4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4gtpusw-ip4base
#### dpdk-vfio-pci
##### ethip4vxlan-l2bdbasemaclrn
1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
@@ -200,6 +204,10 @@
1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4gtpusw-ip4base
## ./ip6
### intel-x710
#### avf
diff --git a/docs/tag_documentation.rst b/docs/tag_documentation.rst
index fa015759a1..d554d2cd9a 100644
--- a/docs/tag_documentation.rst
+++ b/docs/tag_documentation.rst
@@ -605,6 +605,10 @@ Encapsulation Tags
All test cases with GRE.
+.. topic:: GTPU
+
+ All test cases with GTPU.
+
.. topic:: IPSEC
All test cases with IPSEC.
diff --git a/resources/api/vpp/supported_crcs.yaml b/resources/api/vpp/supported_crcs.yaml
index 5aaca0ade4..02e252d58d 100644
--- a/resources/api/vpp/supported_crcs.yaml
+++ b/resources/api/vpp/supported_crcs.yaml
@@ -103,6 +103,8 @@
gpe_enable_disable: '0xc264d7bf' # dev
gpe_enable_disable_reply: '0xe8d4e804' # dev
# gre_tunnel_add_del / reply # unused L1 keyword: create_gre_tunnel_interface
+ gtpu_add_del_tunnel: '0xca983a2b' # perf
+ gtpu_add_del_tunnel_reply: '0x5383d31f' # perf
hw_interface_set_mtu: '0xe6746899' # dev
hw_interface_set_mtu_reply: '0xe8d4e804' # dev
input_acl_set_interface: '0xde7ad708' # dev
diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py
index 481c122e3f..94c78a1bef 100644
--- a/resources/libraries/python/InterfaceUtil.py
+++ b/resources/libraries/python/InterfaceUtil.py
@@ -1062,6 +1062,49 @@ class InterfaceUtil:
return ifc_name, sw_if_index
@staticmethod
+ def create_gtpu_tunnel_interface(node, teid, source_ip, destination_ip):
+ """Create GTPU interface and return sw if index of created interface.
+
+ :param node: Node where to create GTPU interface.
+ :param teid: GTPU Tunnel Endpoint Identifier.
+ :param source_ip: Source IP of a GTPU Tunnel End Point.
+ :param destination_ip: Destination IP of a GTPU Tunnel End Point.
+ :type node: dict
+ :type teid: int
+ :type source_ip: str
+ :type destination_ip: str
+ :returns: SW IF INDEX of created interface.
+ :rtype: int
+ :raises RuntimeError: if it is unable to create GTPU interface on the
+ node.
+ """
+ cmd = u"gtpu_add_del_tunnel"
+ args = dict(
+ is_add=True,
+ src_address=IPAddress.create_ip_address_object(
+ ip_address(source_ip)
+ ),
+ dst_address=IPAddress.create_ip_address_object(
+ ip_address(destination_ip)
+ ),
+ mcast_sw_if_index=Constants.BITWISE_NON_ZERO,
+ encap_vrf_id=0,
+ decap_next_index=2,
+ teid=teid
+ )
+ err_msg = f"Failed to create GTPU tunnel interface " \
+ f"on host {node[u'host']}"
+ with PapiSocketExecutor(node) as papi_exec:
+ sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
+
+ if_key = Topology.add_new_port(node, u"gtpu_tunnel")
+ Topology.update_interface_sw_if_index(node, if_key, sw_if_index)
+ ifc_name = InterfaceUtil.vpp_get_interface_name(node, sw_if_index)
+ Topology.update_interface_name(node, if_key, ifc_name)
+
+ return sw_if_index
+
+ @staticmethod
def vpp_create_loopback(node, mac=None):
"""Create loopback interface on VPP node.
diff --git a/resources/libraries/python/topology.py b/resources/libraries/python/topology.py
index e829700b22..e05f4ef732 100644
--- a/resources/libraries/python/topology.py
+++ b/resources/libraries/python/topology.py
@@ -174,7 +174,8 @@ class Topology:
port_types = (
u"subinterface", u"vlan_subif", u"memif", u"tap", u"vhost",
u"loopback", u"gre_tunnel", u"vxlan_tunnel", u"eth_bond",
- u"eth_avf", u"eth_rdma", u"geneve_tunnel", u"eth_af_xdp"
+ u"eth_avf", u"eth_rdma", u"geneve_tunnel", u"eth_af_xdp",
+ u"gtpu_tunnel"
)
for node_data in nodes.values():
diff --git a/resources/libraries/robot/overlay/gtpu.robot b/resources/libraries/robot/overlay/gtpu.robot
new file mode 100644
index 0000000000..3135be73fd
--- /dev/null
+++ b/resources/libraries/robot/overlay/gtpu.robot
@@ -0,0 +1,62 @@
+# Copyright (c) 2021 Intel 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.InterfaceUtil
+| Library | resources.libraries.python.IPUtil
+|
+| Documentation | GTPU keywords.
+
+*** Keywords ***
+| Initialize IP4 forwarding with GTPU tunnel in 3-node circular topology
+| | [Documentation]
+| | ... | Set UP state on VPP interfaces in path on nodes in 3-node circular
+| | ... | topology. Create GTPU tunnel on both DUT nodes, setup IPv4 adresses
+| | ... | with /30 prefix on DUT1-DUT2 link, and set routing on both DUT nodes
+| | ... | with prefix /24 and next hop of neighbour DUT interface.
+| |
+| | VPP Interface Set IP Address | ${dut1} | ${DUT1_${int}1}[0]
+| | ... | 10.10.10.1 | 24
+| | VPP Interface Set IP Address | ${dut1} | ${DUT1_${int}2}[0]
+| | ... | 1.1.1.2 | 30
+| | VPP Interface Set IP Address | ${dut2} | ${DUT2_${int}1}[0]
+| | ... | 1.1.1.1 | 30
+| | VPP Interface Set IP Address | ${dut2} | ${DUT2_${int}2}[0]
+| | ... | 20.20.20.1 | 24
+| |
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${DUT1_${int}1}[0] | 10.10.10.2 | ${TG_pf1_mac}[0]
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${DUT1_${int}2}[0] | 1.1.1.1 | ${DUT2_${int}1_mac}[0]
+| | VPP Add IP Neighbor
+| | ... | ${dut2} | ${DUT2_${int}1}[0] | 1.1.1.2 | ${DUT1_${int}2_mac}[0]
+| | VPP Add IP Neighbor
+| | ... | ${dut2} | ${DUT2_${int}2}[0] | 20.20.20.2 | ${TG_pf2_mac}[0]
+| |
+| | ${dut1_tunnel_if_index}= | Create GTPU Tunnel Interface | ${dut1}
+| | ... | source_ip=1.1.1.2 | destination_ip=1.1.1.1 | teid=${10}
+| | ${dut2_tunnel_if_index}= | Create GTPU Tunnel Interface | ${dut2}
+| | ... | source_ip=1.1.1.1 | destination_ip=1.1.1.2 | teid=${10}
+| |
+| | Set Interface State | ${dut1} | ${dut1_tunnel_if_index} | up
+| | Set Interface State | ${dut2} | ${dut2_tunnel_if_index} | up
+| |
+| | VPP Interface Set IP Address | ${dut1} | ${dut1_tunnel_if_index}
+| | ... | 10.10.1.2 | 24
+| | VPP Interface Set IP Address | ${dut2} | ${dut2_tunnel_if_index}
+| | ... | 10.10.1.1 | 24
+| |
+| | Vpp Route Add | ${dut1} | 20.20.20.0 | 24 | gateway=1.1.1.2
+| | ... | interface=${dut1_tunnel_if_index}
+| | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | gateway=1.1.1.1
+| | ... | interface=${dut2_tunnel_if_index}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4gtpusw-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4gtpusw-ip4base-ndrpdr.robot
new file mode 100644
index 0000000000..0c4d5b3f74
--- /dev/null
+++ b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4gtpusw-ip4base-ndrpdr.robot
@@ -0,0 +1,138 @@
+# Copyright (c) 2021 Intel 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 ***
+| Resource | resources/libraries/robot/shared/default.robot
+| Resource | resources/libraries/robot/overlay/gtpu.robot
+
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
+| ... | NIC_Intel-X710 | IP4FWD | IP4BASE | ENCAP | GTPU | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4gtpusw-ip4base
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput gtpu test cases*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-GTPU on DUT1-DUT2,\
+| ... | Eth-IPv4 on TG-DUTn for IPv4 routing over GTPU tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv4\
+| ... | routing and static routes. GTPU tunnel is configured between DUT1\
+| ... | and DUT2. DUT1 and DUT2 tested with ${nic_name}.
+| ... | *[Ver] TG verification:* TG finds and reports throughput NDR (Non Drop\
+| ... | Rate) with zero packet loss tolerance and throughput PDR (Partial Drop\
+| ... | Rate) with non-zero packet loss tolerance (LT) expressed in percentage\
+| ... | of packets transmitted. NDR and PDR are discovered for different\
+| ... | Ethernet L2 frame sizes using MLRsearch library.\
+| ... | Test packets are generated by TG on links to DUTs. TG traffic profile\
+| ... | contains two L3 flow-groups with all packets containing Ethernet\
+| ... | header, IPv4 header with IP protocol=61 and static payload. MAC\
+| ... | addresses are matching MAC addresses of the TG node interfaces.
+| ... | *[Ref] Applicable standard specifications:* RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | perfmon_plugin.so | gtpu_plugin.so
+| ${crypto_type}= | ${None}
+| ${nic_name}= | Intel-X710
+| ${nic_driver}= | vfio-pci
+| ${nic_rxq_size}= | 0
+| ${nic_txq_size}= | 0
+| ${nic_pfs}= | 2
+| ${nic_vfs}= | 0
+| ${osi_layer}= | L3
+| ${overhead}= | ${36}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4src253
+
+*** Keywords ***
+| Local Template
+| |
+| | [Documentation]
+| | ... | [Cfg] DUT runs Gtpu hw offload routing config.\
+| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
+| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
+| |
+| | ... | *Arguments:*
+| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
+| | ... | Type: integer, string
+| | ... | - phy_cores - Number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | Given Set Max Rate And Jumbo
+| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
+| | And Pre-initialize layer driver | ${nic_driver}
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize layer driver | ${nic_driver}
+| | And Initialize layer interface
+| | And Initialize IP4 forwarding with GTPU tunnel in 3-node circular topology
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-1c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | 64B | 1C
+| | frame_size=${64} | phy_cores=${1}
+
+| 64B-2c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-4c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-1c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-1c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | IMIX | 1C
+| | frame_size=IMIX_v4_1 | phy_cores=${1}
+
+| IMIX-2c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-4c-ethip4gtpusw-ip4base-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}