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 9D6CDA00E6 for ; Mon, 13 May 2019 08:32:57 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 525E32BC1; Mon, 13 May 2019 08:32:57 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id C365F2BBE for ; Mon, 13 May 2019 08:32:55 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 May 2019 23:32:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,464,1549958400"; d="scan'208";a="171084686" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga002.fm.intel.com with ESMTP; 12 May 2019 23:32:54 -0700 Received: from fmsmsx119.amr.corp.intel.com (10.18.124.207) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 12 May 2019 23:32:54 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX119.amr.corp.intel.com (10.18.124.207) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 12 May 2019 23:32:53 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.129]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.70]) with mapi id 14.03.0415.000; Mon, 13 May 2019 14:31:30 +0800 From: "Tu, Lijuan" To: "Ma, LihongX" , "dts@dpdk.org" CC: "Wang, Yinan" , "Ma, LihongX" Thread-Topic: [dts] [PATCH V2] Add testsuite vhost enqueue interrupt Thread-Index: AQHVBXdwGbMZvYlCV062B64GywQ95KZooAZg Date: Mon, 13 May 2019 06:31:30 +0000 Message-ID: <8CE3E05A3F976642AAB0F4675D0AD20E0BA7FB83@SHSMSX101.ccr.corp.intel.com> References: <1557277393-11394-1-git-send-email-lihongx.ma@intel.com> In-Reply-To: <1557277393-11394-1-git-send-email-lihongx.ma@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.0.600.7 dlp-reaction: no-action x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZGJjNDM0NTktYzYzYy00M2I1LWFiNGYtZTI0ZDEwYTkzYWJhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiN040TlVDXC84NFd5Vzl6eCtWUHpUaFRyaW1ka1BDQ1N5ZTB4eDJvWGEzcEtHVnJMWkpLT2U1Z3RFV1JtWHVcL0hIIn0= 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 testsuite vhost enqueue interrupt 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, thanks > -----Original Message----- > From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of lihong > Sent: Wednesday, May 8, 2019 9:03 AM > To: dts@dpdk.org > Cc: Wang, Yinan ; Ma, LihongX > > Subject: [dts] [PATCH V2] Add testsuite vhost enqueue interrupt >=20 > Signed-off-by: lihong > --- > tests/TestSuite_vhost_enqueue_interrupt.py | 202 > +++++++++++++++++++++++++++++ > 1 file changed, 202 insertions(+) > create mode 100644 tests/TestSuite_vhost_enqueue_interrupt.py >=20 > diff --git a/tests/TestSuite_vhost_enqueue_interrupt.py > b/tests/TestSuite_vhost_enqueue_interrupt.py > new file mode 100644 > index 0000000..29c3756 > --- /dev/null > +++ b/tests/TestSuite_vhost_enqueue_interrupt.py > @@ -0,0 +1,202 @@ > +# BSD LICENSE > +# > +# Copyright (c) <2019>, Intel Corporation. > +# 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. > +Vhost enqueue interrupt need test with l3fwd-power sample """ > + > +import utils > +import time > +from test_case import TestCase > + > + > +class TestVhostEnqueueInterrupt(TestCase): > + > + def set_up_all(self): > + """ > + Run at the start of each test suite. > + > + """ > + self.queues =3D 1 > + self.cores_num =3D len([n for n in self.dut.cores if int(n['sock= et']) =3D=3D 0]) > + self.vmac =3D "00:11:22:33:44:10" > + self.dut_ports =3D self.dut.get_ports() > + self.mem_channels =3D self.dut.get_memory_channels() > + self.prepare_l3fwd_power() > + > + def set_up(self): > + """ > + Run before each test case. > + """ > + # Clean the execution ENV > + self.verify_info =3D [] > + self.dut.send_expect("killall -s INT testpmd", "#") > + self.dut.send_expect("killall -s INT l3fwd-power", "#") > + self.dut.send_expect("rm -rf ./vhost-net*", "#") > + self.vhost =3D self.dut.new_session(suite=3D"vhost-l3fwd") > + self.virtio_user =3D self.dut.new_session(suite=3D"virtio-user") > + > + def prepare_l3fwd_power(self): > + self.dut.send_expect("cp ./examples/l3fwd-power/main.c .", "#") > + self.dut.send_expect( > + "sed -i '/DEV_RX_OFFLOAD_CHECKSUM/d' ./examples/l3fwd- > power/main.c", "#") > + out =3D self.dut.build_dpdk_apps('examples/l3fwd-power') > + self.verify("Error" not in out, "compilation l3fwd-power > + error") > + > + def get_core_list(self): > + """ > + get core list depend on the core number > + """ > + need_num =3D 2*self.queues+1 > + self.core_config =3D "1S/%dC/1T" % need_num > + self.verify(self.cores_num >=3D need_num, > + "There has not enought cores to test this case") > + core_list =3D self.dut.get_core_list(self.core_config) > + self.core_list_virtio =3D core_list[0: self.queues+1] > + self.core_list_l3fwd =3D core_list[self.queues+1: need_num] > + self.core_mask_virtio =3D utils.create_mask(self.core_list_virti= o) > + self.core_mask_l3fwd =3D utils.create_mask(self.core_list_l3fwd) > + > + def lanuch_virtio_user(self): > + """ > + launch virtio-user with server mode > + """ > + command_client =3D self.dut.target + "/app/testpmd -c %s -n %d "= + \ > + "--socket-mem 1024,1024 --legacy-mem --no-pci " = + \ > + "--file-prefix=3Dvirtio " + \ > + "--vdev=3Dnet_virtio_user0,mac=3D%s,path=3D./vho= st- > net,server=3D1,queues=3D%d " + \ > + "-- -i --rxq=3D%d --txq=3D%d --rss-ip" > + command_line_client =3D command_client % ( > + self.core_mask_virtio, self.mem_channels, > + self.vmac, self.queues, self.queues, self.queues= ) > + self.virtio_user.send_expect(command_line_client, "testpmd> ", 1= 20) > + self.virtio_user.send_expect("set fwd txonly", "testpmd> ", 20) > + > + def lanuch_l3fwd_power(self): > + """ > + launch l3fwd-power with a virtual vhost device > + """ > + self.logger.info("Launch l3fwd_sample sample:") > + # config the interrupt cores > + config_info =3D "" > + for i in range(self.queues): > + if config_info !=3D "": > + config_info +=3D ',' > + config_info +=3D '(0,%d,%s)' % (i, self.core_list_l3fwd[i]) > + info =3D {'core': self.core_list_l3fwd[i], 'port': 0, 'queue= ': i} > + self.verify_info.append(info) > + > + command_client =3D "./examples/l3fwd-power/build/app/l3fwd-power= " > + \ > + "-c %s -n %d --socket-mem 1024,1024 --legacy-me= m --no-pci " > + \ > + "--vdev 'net_vhost0,iface=3Dvhost-net,queues=3D= %d,client=3D1' " + > \ > + "-- -p 0x1 --parse-ptype 1 --config '%s' " > + command_line_client =3D command_client % ( > + self.core_mask_l3fwd, self.mem_channels, > + self.queues, config_info) > + self.vhost.send_expect(command_line_client, "POWER", 40) > + time.sleep(10) > + out =3D self.vhost.get_session_before() > + if ("Error" in out and "Error opening" not in out): > + self.logger.error("Launch l3fwd-power sample error") > + else: > + self.logger.info("Launch l3fwd-power sample finished") > + > + def check_vhost_core_status(self, status): > + """ > + check the cpu status > + """ > + out =3D self.vhost.get_session_before() > + for i in range(len(self.verify_info)): > + if status =3D=3D "waked up": > + info =3D "lcore %s is waked up from rx interrupt on port= %d > queue %d" > + info =3D info % (self.verify_info[i]["core"], self.verif= y_info[i]['port'], > + self.verify_info[i]['queue']) > + elif status =3D=3D "sleeps": > + info =3D "lcore %s sleeps until interrupt triggers" % > self.verify_info[i]["core"] > + self.logger.info(info) > + self.verify(info in out, "The CPU status not right for %s" > + % info) > + > + def send_and_verify(self): > + """ > + start to send packets and check the cpu status > + stop and restart to send packets and check the cpu status > + """ > + self.virtio_user.send_expect("start", "testpmd> ", 20) > + self.check_vhost_core_status("waked up") > + > + self.virtio_user.send_expect("stop", "testpmd> ", 20) > + self.check_vhost_core_status("sleeps") > + > + self.virtio_user.send_expect("start", "testpmd> ", 20) > + self.check_vhost_core_status("waked up") > + > + def close_testpmd_and_session(self): > + self.virtio_user.send_expect("quit", "#", 20) > + self.dut.close_session(self.vhost) > + self.dut.close_session(self.virtio_user) > + > + def test_virtio_user_interrupt(self): > + """ > + Check the virtio-user interrupt can work when use vhost-net as > backend > + """ > + self.queues =3D 1 > + self.get_core_list() > + self.lanuch_virtio_user() > + self.lanuch_l3fwd_power() > + self.send_and_verify() > + > + def test_virtio_user_interrupt_with_multi_queue(self): > + """ > + Check the virtio-user interrupt can work with multi queue > + """ > + self.queues =3D 4 > + self.get_core_list() > + self.lanuch_virtio_user() > + self.lanuch_l3fwd_power() > + self.send_and_verify() > + > + def tear_down(self): > + """ > + Run after each test case. > + """ > + self.close_testpmd_and_session() > + self.dut.send_expect("killall -s INT l3fwd-power", "#") > + self.dut.send_expect("killall -s INT testpmd", "#") > + > + def tear_down_all(self): > + """ > + Run after each test suite. > + """ > + # revert the code > + self.dut.send_expect("mv ./main.c ./examples/l3fwd-power/", "#") > + self.dut.build_dpdk_apps('examples/l3fwd-power') > + pass > -- > 2.7.4