From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E5B8DA04F0; Mon, 13 Jan 2020 04:14:02 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D0C871D602; Mon, 13 Jan 2020 04:14:02 +0100 (CET) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id BC10E1E34 for ; Mon, 13 Jan 2020 04:14:00 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Jan 2020 19:13:59 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,427,1571727600"; d="scan'208";a="224816808" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga006.jf.intel.com with ESMTP; 12 Jan 2020 19:13:59 -0800 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sun, 12 Jan 2020 19:13:59 -0800 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Sun, 12 Jan 2020 19:13:58 -0800 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Sun, 12 Jan 2020 19:13:58 -0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.30]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.55]) with mapi id 14.03.0439.000; Mon, 13 Jan 2020 11:13:56 +0800 From: "Tu, Lijuan" To: "Yao, BingX Y" , "dts@dpdk.org" CC: "Yao, BingX Y" Thread-Topic: [dts] [PATCH V2] add suite qos meter Thread-Index: AQHVybnf9ZTSwmdYh0aurMMsJcps0afn64PQ Date: Mon, 13 Jan 2020 03:13:57 +0000 Message-ID: <8CE3E05A3F976642AAB0F4675D0AD20E0BBA8565@SHSMSX101.ccr.corp.intel.com> References: <1578883129-98603-1-git-send-email-bingx.y.yao@intel.com> In-Reply-To: <1578883129-98603-1-git-send-email-bingx.y.yao@intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dts] [PATCH V2] add suite qos meter X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" applied > -----Original Message----- > From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of yaobing > Sent: Monday, January 13, 2020 10:39 AM > To: dts@dpdk.org > Cc: Yao, BingX Y > Subject: [dts] [PATCH V2] add suite qos meter >=20 > V1: add suite >=20 > V2: change method group package >=20 > Signed-off-by: yaobing > --- > tests/TestSuite_qos_meter.py | 170 > +++++++++++++++++++++++++++++++++++ > 1 file changed, 170 insertions(+) > create mode 100644 tests/TestSuite_qos_meter.py >=20 > diff --git a/tests/TestSuite_qos_meter.py b/tests/TestSuite_qos_meter.py > new file mode 100644 index 0000000..062de81 > --- /dev/null > +++ b/tests/TestSuite_qos_meter.py > @@ -0,0 +1,170 @@ > +# BSD LICENSE > +# > +# Copyright(c) <2019-2020> Intel Corporation. All rights reserved. > +# All rights reserved. > +# > +# Redistribution and use in source and binary forms, with or without # > +modification, are permitted provided that the following conditions # > +are met: > +# > +# * Redistributions of source code must retain the above copyright > +# notice, this list of conditions and the following disclaimer. > +# * Redistributions in binary form must reproduce the above copyright > +# notice, this list of conditions and the following disclaimer in > +# the documentation and/or other materials provided with the > +# distribution. > +# * Neither the name of Intel Corporation nor the names of its > +# contributors may be used to endorse or promote products derived > +# from this software without specific prior written permission. > +# > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS # > +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > # > +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS > FOR # > +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE > COPYRIGHT # > +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, > INCIDENTAL, # > +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > NOT # > +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > USE, # > +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY # > +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > # > +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF > THE USE # > +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH > DAMAGE. > + > +""" > +DPDK Test suite. > +Test QOS API in DPDK. > +The DUT must have two 10G Ethernet ports connected to two ports of IXIA. > +""" > +import os > +from test_case import TestCase > +from settings import HEADER_SIZE > +from pktgen import TRANSMIT_CONT > +from pmd_output import PmdOutput > +from packet import Packet > + > + > +class TestQosMeter(TestCase): > + > + def set_up_all(self): > + """ > + ip_fragmentation Prerequisites > + """ > + # Based on h/w type, choose how many ports to use > + ports =3D self.dut.get_ports() > + self.dut_ports =3D self.dut.get_ports(self.nic) > + self.tx_port =3D self.tester.get_local_port(self.dut_ports[0]) > + self.rx_port =3D self.tester.get_local_port(self.dut_ports[1]) > + self.pmdout =3D PmdOutput(self.dut) > + > + # Verify that enough ports are available > + self.verify(len(ports) >=3D 2, "Insufficient ports for testing") > + > + #get data from > https://doc.dpdk.org/guides/sample_app_ug/qos_metering.html > + self.blind_pps =3D 14880000 > + self.aware_pps =3D 13880000 > + > + def set_up(self): > + """ > + Run before each test case. > + """ > + pass > + > + def build_app_and_send_package(self): > + """ > + Build app and send pkt > + return bps and pps > + """ > + self.dut.send_expect('rm -rf ./examples/qos_meter/build', "#") > + out =3D self.dut.build_dpdk_apps("./examples/qos_meter") > + self.verify("Error" not in out, "Compilation error") > + self.verify("No such" not in out, "Compilation error") > + eal_params =3D self.dut.create_eal_parameters(cores=3D'1S/1C/1T'= , > fixed_prefix=3DTrue, prefix=3D'qos_meter') > + cmd =3D './examples/qos_meter/build/qos_meter ' + eal_params + '= -- -p > 0x3' > + self.dut.send_expect(cmd, "TX =3D 1") > + payload_size =3D 64 - HEADER_SIZE['eth'] - HEADER_SIZE['ip'] > + dts_mac =3D self.dut.get_mac_address(self.dut_ports[self.rx_port= ]) > + pkt =3D Packet(pkt_type=3D'IP_RAW') > + pkt.save_pcapfile(self.tester, "%s/tester.pcap" % self.tester.tm= p_file) > + stream_option =3D { > + 'pcap': "%s/tester.pcap" % self.tester.tmp_file, > + 'stream_config': { > + 'rate': 100, > + 'transmit_mode': TRANSMIT_CONT, > + } > + } > + self.tester.pktgen.clear_streams() > + stream_ids =3D [] > + stream_id =3D self.tester.pktgen.add_stream(self.tx_port, self.r= x_port, > "%s/tester.pcap" % self.tester.tmp_file) > + self.tester.pktgen.config_stream(stream_id,stream_option) > + stream_ids.append(stream_id) > + stream_id =3D self.tester.pktgen.add_stream(self.rx_port, self.t= x_port, > "%s/tester.pcap" % self.tester.tmp_file) > + self.tester.pktgen.config_stream(stream_id, stream_option) > + stream_ids.append(stream_id) > + traffic_opt =3D { > + 'method': 'throughput', > + 'rate': 100, > + 'duration': 20 > + } > + bps, pps =3D self.tester.pktgen.measure(stream_ids, traffic_opt) > + return bps, pps > + > + def verify_throughput(self, throughput, pps): > + difference_value =3D throughput - pps > + #performance data is allowed to float by 10% > + self.verify(- pps*0.1 < difference_value < pps*0.1, "throughput > + validation failure") > + > + def test_perf_srTCM_blind_RED(self): > + """ > + srTCM blind RED > + """ > + self.dut.send_expect(r"sed -i -e '/#define APP_PKT_COLOR_POS/s/[= 0- > 9]/5/g' ./examples/qos_meter/main.c", "#") > + self.dut.send_expect(r"sed -i -e '/^#define APP_MODE > /s/APP_MODE_*/APP_MODE_SRTCM_COLOR_BLIND/2' ./examples/qos_met > er/main.c", "#") > + bps, pps =3D self.build_app_and_send_package() > + self.verify_throughput(pps, self.aware_pps) > + > + def test_perf_srTCM_blind_GREEN(self): > + """ > + srTCM blind GREEN > + """ > + self.dut.send_expect(r"sed -i -e '/#define APP_PKT_COLOR_POS/s/[= 0- > 9]/3/g' ./examples/qos_meter/main.c", "#") > + self.dut.send_expect(r"sed -i -e '/^#define APP_MODE > /s/APP_MODE_*/APP_MODE_SRTCM_COLOR_BLIND/2' ./examples/qos_met > er/main.c", "#") > + bps, pps=3D self.build_app_and_send_package() > + self.verify_throughput(pps, self.blind_pps) > + > + def test_perf_srTCM_aware_RED(self): > + """ > + srTCM aware RED > + """ > + self.dut.send_expect(r"sed -i -e '/#define APP_PKT_COLOR_POS/s/[= 0- > 9]/5/g' ./examples/qos_meter/main.c", "#") > + self.dut.send_expect(r"sed -i -e '/^#define APP_MODE > /s/APP_MODE_*/APP_MODE_SRTCM_COLOR_AWARE/2' ./examples/qos_m > eter/main.c", "#") > + bps, pps=3D self.build_app_and_send_package() > + self.verify_throughput(pps, self.blind_pps) > + > + def test_perf_trTCM_blind(self): > + """ > + trTCM blind > + """ > + self.dut.send_expect(r"sed -i -e '/#define APP_PKT_COLOR_POS/s/[= 0- > 9]/5/g' ./examples/qos_meter/main.c", "#") > + self.dut.send_expect(r"sed -i -e '/^#define APP_MODE > /s/APP_MODE_*/APP_MODE_TRTCM_COLOR_BLIND/2' ./examples/qos_met > er/main.c", "#") > + bps, pps =3D self.build_app_and_send_package() > + self.verify_throughput(pps, self.aware_pps) > + > + def test_perf_trTCM_aware(self): > + """ > + trTCM aware > + """ > + self.dut.send_expect(r"sed -i -e '/#define APP_PKT_COLOR_POS/s/[= 0- > 9]/5/g' ./examples/qos_meter/main.c", "#") > + self.dut.send_expect(r"sed -i -e '/^#define APP_MODE > /s/APP_MODE_*/APP_MODE_TRTCM_COLOR_AWARE/2' ./examples/qos_m > eter/main.c", "#") > + bps, pps =3D self.build_app_and_send_package() > + self.verify_throughput(pps, self.blind_pps) > + > + def tear_down(self): > + """ > + Run after each test case. > + """ > + self.dut.kill_all() > + > + def tear_down_all(self): > + """ > + Run after each test suite. > + """ > + self.dut.kill_all() > -- > 2.17.2