From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 873B9A0096 for ; Mon, 8 Apr 2019 12:20:24 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7AC122C54; Mon, 8 Apr 2019 12:20:24 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 81E1F2C24 for ; Mon, 8 Apr 2019 12:20:23 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Apr 2019 03:20:10 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,325,1549958400"; d="scan'208";a="140961126" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga007.fm.intel.com with ESMTP; 08 Apr 2019 03:20:08 -0700 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 8 Apr 2019 03:20:06 -0700 Received: from shsmsx106.ccr.corp.intel.com (10.239.4.159) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 8 Apr 2019 03:20:04 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.206]) by SHSMSX106.ccr.corp.intel.com ([169.254.10.21]) with mapi id 14.03.0415.000; Mon, 8 Apr 2019 18:20:02 +0800 From: "Chen, BoX C" To: "Xiao, QimaiX" , "dts@dpdk.org" CC: "Xiao, QimaiX" Thread-Topic: [dts] [PATCH V2] add case tests/TestSuite_runtime_vf_queue_number_maxinum to dts Thread-Index: AQHU7ehW6eph7bwB/UyzvdyaidbTl6YyDWnQ Date: Mon, 8 Apr 2019 10:20:02 +0000 Message-ID: References: <1554713724-12567-1-git-send-email-qimaix.xiao@intel.com> In-Reply-To: <1554713724-12567-1-git-send-email-qimaix.xiao@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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 case tests/TestSuite_runtime_vf_queue_number_maxinum to dts 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" Tested-by: Chen, BoX C > -----Original Message----- > From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of xiao,qimai > Sent: April 8, 2019 16:55 > To: dts@dpdk.org > Cc: Xiao, QimaiX > Subject: [dts] [PATCH V2] add case > tests/TestSuite_runtime_vf_queue_number_maxinum to dts >=20 > Signed-off-by: xiao,qimai > --- > ...stSuite_runtime_vf_queue_number_maxinum.py | 280 ++++++++++++++++++ > 1 file changed, 280 insertions(+) > create mode 100644 tests/TestSuite_runtime_vf_queue_number_maxinum.py >=20 > diff --git a/tests/TestSuite_runtime_vf_queue_number_maxinum.py > b/tests/TestSuite_runtime_vf_queue_number_maxinum.py > new file mode 100644 > index 0000000..78d02d8 > --- /dev/null > +++ b/tests/TestSuite_runtime_vf_queue_number_maxinum.py > @@ -0,0 +1,280 @@ > +# BSD LICENSE > +# > +# Copyright(c) 2010-2019 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. > + > +Runtime_Vf_Queue_Number_Maxinum > + > +""" > + > +import re > +import time > +import random > + > +import utils > +from pmd_output import PmdOutput > +from test_case import TestCase > +from virt_common import VM > + > +class TestRuntime_Vf_Queue_Number_Maxinum(TestCase): > + supported_vf_driver =3D ['pci-stub', 'vfio-pci'] > + > + def set_up_all(self): > + """ > + Run at the start of each test suite. > + Run time Queue Number Prerequisites > + """ > + self.verify(self.nic in ["fortville_eagle", "fortville_spirit", > + "fortville_spirit_single", > + "fortpark_TLV"], "NIC Unsupported: " + str(self.nic)) > + > + # Based on h/w type, choose how many ports to use > + self.dut_ports =3D self.dut.get_ports(self.nic) > + self.dut_ports_num =3D len(self.dut_ports) > + # Verify that enough ports are available > + self.verify(self.dut_ports_num >=3D 1, "Insufficient ports") > + > + self.vm0 =3D None > + localPort =3D self.tester.get_local_port(self.dut_ports[0]) > + self.tester_intf =3D self.tester.get_interface(localPort) > + self.tester_mac =3D self.tester.get_mac(localPort) > + self.pf_interface =3D self.dut.ports_info[self.dut_ports[0]]['in= tf'] > + self.pf_mac =3D self.dut.get_mac_address(0) > + self.pf_pci0 =3D self.dut.ports_info[self.dut_ports[0]]['pci'] > + self.pf_pci1 =3D self.dut.ports_info[self.dut_ports[1]]['pci'] > + > + # set vf assign method and vf driver > + self.vf_driver =3D self.get_suite_cfg()['vf_driver'] > + if self.vf_driver is None: > + self.vf_driver =3D 'pci-stub' > + self.verify(self.vf_driver in self.supported_vf_driver, "Unsppor= ted vf driver") > + if self.vf_driver =3D=3D 'pci-stub': > + self.vf_assign_method =3D 'pci-assign' > + else: > + self.vf_assign_method =3D 'vfio-pci' > + self.dut.send_expect('modprobe vfio-pci', '#') > + self.used_dut_port =3D self.dut_ports[0] > + if self.dut_ports_num=3D=3D2: > + vfs_num =3D 64 > + else: > + vfs_num =3D 32 > + self.dut.generate_sriov_vfs_by_port(self.used_dut_port, vfs_num, > driver=3D'default') > + self.sriov_vfs_port =3D self.dut.ports_info[self.used_dut_port][= 'vfs_port'] > + self.vfs_ports =3D random.sample(self.sriov_vfs_port,2) > + try: > + for port in self.vfs_ports: > + port.bind_driver(self.vf_driver) > + time.sleep(1) > + except Exception as e: > + raise Exception(e) > + > + > + def set_up(self): > + > + """ > + Run before each test case. > + """ > + self.setup_1pf_2vf_1vm_env_flag =3D 0 > + > + def setup_1pf_2vf_1vm_env(self, driver=3D'default'): > + > + try: > + vf0_prop =3D {'opt_host': self.vfs_ports[0].pci} > + vf1_prop =3D {'opt_host': self.vfs_ports[1].pci} > + > + # start testpmd without the two VFs on the host > + self.host_testpmd =3D PmdOutput(self.dut) > + eal_param =3D '-w %(pf0)s,queue-num-per-vf=3D8 --file-prefix= =3Dtest1 -- > socket-mem 1024,1024' % {'pf0': self.pf_pci0} > + out =3D self.host_testpmd.start_testpmd("Default", eal_param= =3Deal_param) > + print(out) > + time.sleep(2) > + > + # set up VM0 ENV > + self.vm0 =3D VM(self.dut, 'vm0', 'runtime_vf_queue_number_ma= xinum') > + self.vm0.set_vm_device(driver=3Dself.vf_assign_method, **vf0= _prop) > + self.vm0.set_vm_device(driver=3Dself.vf_assign_method, **vf1= _prop) > + self.vm_dut_0 =3D self.vm0.start() > + if self.vm_dut_0 is None: > + raise Exception("Set up VM0 ENV failed!") > + > + self.setup_1pf_2vf_1vm_env_flag =3D 1 > + except Exception as e: > + self.destroy_1pf_2vf_1vm_env() > + raise Exception(e) > + > + def destroy_1pf_2vf_1vm_env(self): > + if getattr(self, 'vm0', None): > + #destroy testpmd in vm0 > + if getattr(self, 'vm0_testpmd', None): > + self.vm0_testpmd.execute_cmd('stop') > + self.vm0_testpmd.execute_cmd('quit', '# ') > + self.vm0_testpmd =3D None > + self.vm0_dut_ports =3D None > + #destroy vm0 > + self.vm0.stop() > + self.vm0 =3D None > + > + if getattr(self, 'host_testpmd', None): > + self.host_testpmd.execute_cmd('quit', '# ') > + self.host_testpmd =3D None > + > + if getattr(self, 'used_dut_port', None) !=3D None: > + self.dut.destroy_sriov_vfs_by_port(self.used_dut_port) > + port =3D self.dut.ports_info[self.used_dut_port]['port'] > + port.bind_driver() > + self.used_dut_port =3D None > + > + for port_id in self.dut_ports: > + port =3D self.dut.ports_info[port_id]['port'] > + port.bind_driver() > + > + self.setup_1pf_2vf_1vm_env_flag =3D 0 > + > + def send_packet2different_queue(self, dts, src, iface, count): > + > + self.tester.scapy_foreground() > + for i in range(count): > + pkt =3D 'sendp([Ether(dst=3D"%s", > src=3D"%s")/IP(src=3D"10.0.0.1",dst=3D"192.168.13.%d")/("test"*10)],iface= =3D"%s")' % ( > + dts, src, (i % 254) + 1, iface) > + self.tester.scapy_append(pkt) > + self.tester.scapy_execute() > + > + def test_set_VF_max_queue_number_with_max_VFs_on_one_PF_port(self): > + > + self.host_testpmd2 =3D PmdOutput(self.dut) > + eal_param =3D '-w %(pf0)s,queue-num-per-vf=3D16 --file-prefix=3D= test1 --socket- > mem 1024,1024' % {'pf0': self.pf_pci0} > + out =3D self.host_testpmd2.start_testpmd("Default", eal_param=3D= eal_param) > + print(out) > + if self.dut_ports_num=3D=3D4: > + verify_info =3D 'i40e_pf_parameter_init(): Failed to allocat= e 577 queues, > which exceeds the hardware maximum 384' > + else: > + verify_info =3D 'i40e_pf_parameter_init(): Failed to allocat= e 1089 queues, > which exceeds the hardware maximum 768' > + self.verify(verify_info in out,"start testpmd get wrong info: %s= "%out) > + self.host_testpmd2.execute_cmd("port stop all") > + time.sleep(3) > + self.host_testpmd2.execute_cmd('quit', '# ') > + time.sleep(3) > + self.host_testpmd2=3DNone > + > + self.setup_1pf_2vf_1vm_env(driver=3D'') > + self.vm0_dut_ports =3D self.vm_dut_0.get_ports('any') > + self.portMask =3D utils.create_mask([self.vm0_dut_ports[0]]) > + self.vm_pci0 =3D self.vm_dut_0.ports_info[0]['pci'] > + self.vm_pci1 =3D self.vm_dut_0.ports_info[1]['pci'] > + time.sleep(2) > + > + self.vm0_testpmd =3D PmdOutput(self.vm_dut_0) > + eal_param3 =3D '-w %(vf0)s --file-prefix=3Dtest4' % { > + 'vf0': self.vm_pci0} > + out =3D self.vm0_testpmd.start_testpmd("all", "--txq=3D8 --rxq= =3D8", > eal_param=3Deal_param3) > + print(out) > + self.vf0_mac =3D > self.vm0_testpmd.get_port_mac(self.vm0_dut_ports[0]).lower() > + self.vm0_testpmd.execute_cmd("set verbose 1") > + out =3D self.vm0_testpmd.execute_cmd("show port info all") > + print(out) > + self.verify("Current number of TX queues: 8" in out and "Current= number of > RX queues: 8" in out,"set tx or rx queue fail:%s"%out) > + out =3D self.vm0_testpmd.execute_cmd('start') > + print(out) > + self.verify("port 0: RX queue number: 8 Tx queue number: 8" in o= ut,"start > failed: %s"%out) > + pkts_num=3D256 > + self.send_packet2different_queue(self.vf0_mac, self.tester_mac, > self.tester_intf, pkts_num) > + out =3D self.vm0_testpmd.get_output() > + out2 =3D self.vm0_testpmd.execute_cmd('stop') > + misc =3D out.count("dst=3DFF:FF:FF:FF:FF:FF") > + print("get %d misc packages " % misc) > + rx_pkts=3Dout.count("src=3D%s - > dst=3D%s"%(self.tester_mac.upper(),self.vf0_mac.upper())) > + for i in range(8): > + if i<10: > + i=3D' '+str(i) > + self.verify('RX Port=3D 0/Queue=3D%s' % i in out2 and 'TX Po= rt=3D 0/Queue=3D%s' % > i in out2, "queue %s can not rx or tx pkts" % i) > + self.verify(pkts_num=3D=3Drx_pkts,'Received incorrect pkts numbe= r! send %d > pkts,received %d pkts'%(pkts_num, rx_pkts)) > + self.verify('RX-total: %d' % (rx_pkts+misc) in out2 and 'TX-tota= l: %d' % > (rx_pkts+misc) in out2, > + "statistic shows rx or tx pkts number: %d incor= rect" % > (rx_pkts+misc)) > + self.vm0_testpmd.execute_cmd('port stop all') > + time.sleep(5) > + self.vm0_testpmd.execute_cmd('quit', '# ') > + time.sleep(3) > + > + self.vm0_testpmd2 =3D PmdOutput(self.vm_dut_0) > + eal_param4 =3D '-w %(vf1)s --file-prefix=3Dtest5' % { > + 'vf1': self.vm_pci1} > + out2 =3D self.vm0_testpmd2.start_testpmd("all", "--txq=3D6 --rxq= =3D6", > eal_param=3Deal_param4) > + self.vf1_mac =3D > self.vm0_testpmd2.get_port_mac(self.vm0_dut_ports[0]).lower() > + print(out2) > + self.vm0_testpmd2.execute_cmd("set verbose 1") > + out =3D self.vm0_testpmd2.execute_cmd("show port info all") > + print(out) > + self.verify("Current number of TX queues: 6" in out and "Current= number of > RX queues: 6" in out,"set tx or rx queue fail:%s"%out) > + out =3D self.vm0_testpmd2.execute_cmd('start') > + print(out) > + self.verify("port 0: RX queue number: 6 Tx queue number: 6" in o= ut,"start > failed: %s"%out) > + out =3D self.vm0_testpmd2.execute_cmd('stop') > + self.vm0_testpmd2.execute_cmd('port stop all') > + self.vm0_testpmd2.execute_cmd('port config all rxq 8') > + self.vm0_testpmd2.execute_cmd('port config all txq 7') > + out=3Dself.vm0_testpmd2.execute_cmd('port start all') > + print(out) > + out =3D self.vm0_testpmd2.execute_cmd("show port info all") > + print(out) > + self.verify("Current number of TX queues: 7" in out and "Current= number of > RX queues: 8" in out,"set tx or rx queue fail:%s"%out) > + pkts_num =3D 256 > + out =3D self.vm0_testpmd2.execute_cmd('start') > + print(out) > + self.send_packet2different_queue(self.vf1_mac, self.tester_mac, > self.tester_intf, pkts_num) > + out =3D self.vm0_testpmd2.get_output() > + out2 =3D self.vm0_testpmd2.execute_cmd('stop') > + misc2 =3D out.count("dst=3DFF:FF:FF:FF:FF:FF") > + print("get %d misc packages " % misc) > + rx_pkts=3Dout.count("src=3D%s - > + dst=3D%s"%(self.tester_mac.upper(),self.vf1_mac.upper())) > + > + for i in range(7): > + if i<10: > + i=3D' '+str(i) > + self.verify('RX Port=3D 0/Queue=3D%s' % i in out2 and 'T= X > + Port=3D 0/Queue=3D%s' % i in out2, "queue %s can not rx or tx pkts" % i= ) > + > + self.verify('RX-total: %d' % (pkts_num+misc2) in out2,"statistic= shows rx or > tx pkts number: %d incorrect" % (pkts_num+misc2)) > + self.vm0_testpmd2.execute_cmd('port stop all') > + time.sleep(5) > + > + > + def tear_down(self): > + > + if self.setup_1pf_2vf_1vm_env_flag =3D=3D 1: > + self.destroy_1pf_2vf_1vm_env() > + > + def tear_down_all(self): > + > + if getattr(self, 'vm0', None): > + self.vm0.stop() > + > + self.dut.virt_exit() > + for port_id in self.dut_ports: > + self.dut.destroy_sriov_vfs_by_port(port_id) > -- > 2.19.1