Add gtpu sw performance test cases 25/32025/10
authorxinfeng zhao <xinfengx.zhao@intel.com>
Mon, 19 Apr 2021 05:21:52 +0000 (13:21 +0800)
committerpmikus <pmikus@cisco.com>
Thu, 10 Jun 2021 06:40:01 +0000 (06:40 +0000)
Signed-off-by: xinfeng zhao <xinfengx.zhao@intel.com>
Reviewed-by: Yulong Pei <yulong.pei@intel.com>
Change-Id: Ibe4420529192559a3cdbb84e0a67859750a9e0d5

docs/job_specs/report_iterative/3n-skx/vpp-mlr-00.md
docs/tag_documentation.rst
resources/api/vpp/supported_crcs.yaml
resources/libraries/python/InterfaceUtil.py
resources/libraries/python/topology.py
resources/libraries/robot/overlay/gtpu.robot [new file with mode: 0644]
tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4gtpusw-ip4base-ndrpdr.robot [new file with mode: 0644]

index 99b18f7..4548fcc 100644 (file)
@@ -1,5 +1,5 @@
 # 3n-skx
-### tests 267
+### tests 273
 ### job hrs est. 24.6
 ### job hrs real ??.?
 ### test mins est. 5.54
 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
 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
index fa01575..d554d2c 100644 (file)
@@ -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.
index 5aaca0a..02e252d 100644 (file)
     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
index 481c122..94c78a1 100644 (file)
@@ -1061,6 +1061,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.
index e829700..e05f4ef 100644 (file)
@@ -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 (file)
index 0000000..3135be7
--- /dev/null
@@ -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 (file)
index 0000000..0c4d5b3
--- /dev/null
@@ -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}