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 D3EF4A04F5; Fri, 19 Jun 2020 09:27:25 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 86D03E07; Fri, 19 Jun 2020 09:27:25 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id E775F2AB for ; Fri, 19 Jun 2020 09:27:23 +0200 (CEST) IronPort-SDR: gQF3mgiBf2Zhf3kEerbvTGSqnsM4MkQPfqg5qECGz88Kbvu8QtEXHa6hiSSh7R6Rf1qpKMESZP 3zRQcxL2AsTQ== X-IronPort-AV: E=McAfee;i="6000,8403,9656"; a="227568657" X-IronPort-AV: E=Sophos;i="5.75,254,1589266800"; d="scan'208";a="227568657" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Jun 2020 00:27:22 -0700 IronPort-SDR: mdbyBG0lOLzVb91M7K8UV9txIxbKH3Og6ypBxf4xZd6Wqp6Cnx5Z5gwk5V5d4UdSobcTBD8LGk 8HqC3Xe4ic0g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,254,1589266800"; d="scan'208";a="450927761" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga005.jf.intel.com with ESMTP; 19 Jun 2020 00:27:22 -0700 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 19 Jun 2020 00:27:22 -0700 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by SHSMSX606.ccr.corp.intel.com (10.109.6.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 19 Jun 2020 15:27:19 +0800 Received: from shsmsx606.ccr.corp.intel.com ([10.109.6.216]) by SHSMSX606.ccr.corp.intel.com ([10.109.6.216]) with mapi id 15.01.1713.004; Fri, 19 Jun 2020 15:27:19 +0800 From: "Lu, Nannan" To: "Zeng, XiaoxiaoX" , "dts@dpdk.org" CC: "Zeng, XiaoxiaoX" Thread-Topic: [dts] [PATCH V2]tests/cvl_switch_filter:optimization_cvl_switch_filter Thread-Index: AQHWQuaD0DN9p38qNUi540UkR2CYVajfj7Zg Date: Fri, 19 Jun 2020 07:27:19 +0000 Message-ID: <6070efec45c94a3fb45e784006136235@intel.com> References: <20200615160804.5693-1-xiaoxiaox.zeng@intel.com> In-Reply-To: <20200615160804.5693-1-xiaoxiaox.zeng@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.36] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dts] [PATCH V2]tests/cvl_switch_filter:optimization_cvl_switch_filter 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" Acked-by Lu, Nannan > -----Original Message----- > From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Zeng Xiaoxiao > Sent: Tuesday, June 16, 2020 12:08 AM > To: dts@dpdk.org > Cc: Zeng, XiaoxiaoX > Subject: [dts] [PATCH V2]tests/cvl_switch_filter:optimization_cvl_switch_= filter >=20 > *.Avoid that with different dpdk code, packet default queue same as queue= that > rule set. > *.Realize dynamic set rule in testpmd. >=20 >=20 > Signed-off-by: Zeng Xiaoxiao > --- > tests/TestSuite_cvl_switch_filter.py | 81 +++++++++++++++++++++++++++- > 1 file changed, 80 insertions(+), 1 deletion(-) >=20 > diff --git a/tests/TestSuite_cvl_switch_filter.py > b/tests/TestSuite_cvl_switch_filter.py > index ffd9af4..dc54fe7 100644 > --- a/tests/TestSuite_cvl_switch_filter.py > +++ b/tests/TestSuite_cvl_switch_filter.py > @@ -34,6 +34,8 @@ import json > import time > import re > import copy > +import random > +from itertools import groupby >=20 > from test_case import TestCase > from pmd_output import PmdOutput > @@ -2571,6 +2573,45 @@ class SwitchFilterTest(TestCase): > result_flag, log_msg =3D dic["check_func"]["func"](out, > dic["check_func"]["param"], dic["expect_results"]) > return result_flag, log_msg >=20 > + def send_packet_get_queue(self, dic): > + """ > + general packets processing workflow. > + """ > + self.dut.send_expect("start", "testpmd> ") > + # send packets > + for per_packet in dic["scapy_str"]: > + pkt =3D Packet(pkt_str=3Dper_packet) > + pkt.send_pkt(self.tester, tx_port=3Dself.__tx_iface, count= =3D1) > + out =3D self.dut.send_expect("stop", "testpmd> ") > + p =3D re.compile(r"Forward Stats for RX Port=3D \d+/Queue=3D(\s?= \d+)") > + res =3D p.findall(out) > + default_queue =3D [int(i) for i in res] > + return default_queue > + > + def get_available_queue_num(self, default_queue, expect_queue, > pmd_queue=3D8): > + """ > + general packets processing workflow. > + """ > + queue_list =3D list(range(1, pmd_queue)) > + # check if expect_queue length is power of 2 > + q_len =3D len(expect_queue) > + self.verify(q_len & (q_len - 1) =3D=3D 0, "defualt_queue length = is not power of > 2!") > + for q in default_queue: > + if q in queue_list: > + queue_list.remove(q) > + # according to expect_queue length get available queue > + set_queue_list =3D [] > + if q_len =3D=3D 1: > + set_queue =3D random.choice(queue_list) > + set_queue_list.append(set_queue) > + else: > + fun =3D lambda x: x[1] - x[0] > + for k, g in groupby(enumerate(queue_list), fun): > + list_group =3D [j for i, j in g] > + if len(list_group) >=3D q_len: > + set_queue_list =3D list_group[:q_len] > + return set_queue_list > + > def save_results(self, pattern_name, flag, result_flag, log_msg, > overall_result): > """ > save results to dictionary: test_results. > @@ -2598,10 +2639,48 @@ class SwitchFilterTest(TestCase): > overall_result =3D True > test_results.clear() > for tv in test_vectors: > + # get packet default_queue number > + mismatched_dic =3D tv["mismatched"] > + default_queue =3D self.send_packet_get_queue(mismatched_dic) > + > + # check if default_queue same with expect_queue > + expect_queue =3D > tv["mismatched"]["check_func"]["param"]["expect_queues"] > + if expect_queue !=3D "null": > + if isinstance(expect_queue, int): > + eq_list =3D [] > + eq_list.append(expect_queue) > + elif isinstance(expect_queue, list): > + eq_list =3D expect_queue > + recover_flag =3D list(set(eq_list) & set(default_queue)) > + else: > + recover_flag =3D None > + > + # if default_queue has same one with expect_queue, recover r= ule > + if recover_flag: > + # exclude defult_queue number and get set_queue > + set_queue_list =3D self.get_available_queue_num(default_= queue, eq_list) > + # recover rule command and check queue > + if isinstance(expect_queue, int): > + rule_command =3D tv["rte_flow_pattern"].replace("/ e= nd actions > queue index %s" % str(expect_queue), > + "/ end= actions queue index %s" % > str(set_queue_list[0])) > + tv["matched"]["check_func"]["param"]["expect_queues"= ] =3D > set_queue_list[0] > + tv["mismatched"]["check_func"]["param"]["expect_queu= es"] =3D > set_queue_list[0] > + elif isinstance(expect_queue, list): > + q =3D [str(i) for i in expect_queue] > + expect_queue_str =3D " ".join(q) > + s =3D [str(i) for i in set_queue_list] > + set_queue_str =3D " ".join(s) > + rule_command =3D tv["rte_flow_pattern"].replace("/ e= nd actions rss > queues %s" % expect_queue_str, > + "/ end= actions rss queues %s" % > set_queue_str) > + tv["matched"]["check_func"]["param"]["expect_queues"= ] =3D > set_queue_list > + tv["mismatched"]["check_func"]["param"]["expect_queu= es"] =3D > set_queue_list > + else: > + rule_command =3D tv["rte_flow_pattern"] > + > pattern_name =3D tv["name"] > test_results[pattern_name] =3D OrderedDict() >=20 > - out =3D self.dut.send_expect(tv["rte_flow_pattern"], "testpm= d> ", 15) > #create a rule > + out =3D self.dut.send_expect(rule_command, "testpmd> ", 15) = #create a > rule > #get the rule number > rule_num =3D self.get_rule_number(out) >=20 > -- > 2.17.1