From 75fe508bc9e03291977c1a28ca0adc31c3149df9 Mon Sep 17 00:00:00 2001 From: xinfeng zhao Date: Mon, 19 Apr 2021 13:21:52 +0800 Subject: [PATCH] Add gtpu sw performance test cases Signed-off-by: xinfeng zhao Reviewed-by: Yulong Pei Change-Id: Ibe4420529192559a3cdbb84e0a67859750a9e0d5 --- .../report_iterative/3n-skx/vpp-mlr-00.md | 10 +- docs/tag_documentation.rst | 4 + resources/api/vpp/supported_crcs.yaml | 2 + resources/libraries/python/InterfaceUtil.py | 43 +++++++ resources/libraries/python/topology.py | 3 +- resources/libraries/robot/overlay/gtpu.robot | 62 +++++++++ .../10ge2p1x710-ethip4gtpusw-ip4base-ndrpdr.robot | 138 +++++++++++++++++++++ 7 files changed, 260 insertions(+), 2 deletions(-) create mode 100644 resources/libraries/robot/overlay/gtpu.robot create mode 100644 tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4gtpusw-ip4base-ndrpdr.robot 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 @@ -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. 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} -- 2.16.6