From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id EF3348E63 for ; Tue, 26 Jan 2016 02:49:35 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP; 25 Jan 2016 17:49:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,347,1449561600"; d="scan'208";a="901084018" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga002.fm.intel.com with ESMTP; 25 Jan 2016 17:49:35 -0800 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 25 Jan 2016 17:49:34 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.218]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.209]) with mapi id 14.03.0248.002; Tue, 26 Jan 2016 09:49:29 +0800 From: "Liu, Yong" To: "Fu, JingguoX" , "Xu, Qian Q" , "dts@dpdk.org" Thread-Topic: [DTS][PATCH V2 2/3] virtio: update vhost user cases Thread-Index: AQHRVPF/SmLhN4BrbE21iORjWbOWR58MhEAAgAAC8ICAAIZIwA== Date: Tue, 26 Jan 2016 01:49:28 +0000 Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E13B1485B@SHSMSX103.ccr.corp.intel.com> References: <1453452356-12785-1-git-send-email-jingguox.fu@intel.com> <1453452356-12785-2-git-send-email-jingguox.fu@intel.com> <82F45D86ADE5454A95A89742C8D1410E031BE906@shsmsx102.ccr.corp.intel.com> <6BD6202160B55B409D423293115822622BA9A2F9@shsmsx102.ccr.corp.intel.com> In-Reply-To: <6BD6202160B55B409D423293115822622BA9A2F9@shsmsx102.ccr.corp.intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiY2UwMjY2ODQtYjkxOC00OTMwLWIwNDItY2VjNjFmNWMyMzNhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjQuMTAuMTkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiQ0FQSUpJN0pGOTNMMDIxWUMzbWpmcjR5YTNBempDdEROcVJlSHRrb05GOD0ifQ== x-ctpclassification: CTP_IC 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] [DTS][PATCH V2 2/3] virtio: update vhost user cases 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: , X-List-Received-Date: Tue, 26 Jan 2016 01:49:36 -0000 Jingguo, Your V2 patch has been merged in. If you need modifications, please send an= other patch based on latest master branch. Thanks. > -----Original Message----- > From: Fu, JingguoX > Sent: Tuesday, January 26, 2016 9:48 AM > To: Xu, Qian Q; dts@dpdk.org > Cc: Liu, Yong > Subject: RE: [DTS][PATCH V2 2/3] virtio: update vhost user cases >=20 > Hi, qian >=20 > In PATCH V2 3/3, has the detailed change code, originally , I put it in a > new patch, but yong asked to settle it in the third file. >=20 > Thanks,' > Jingguo Fu >=20 > -----Original Message----- > From: Xu, Qian Q > Sent: Tuesday, January 26, 2016 9:38 AM > To: Fu, JingguoX; dts@dpdk.org > Cc: Liu, Yong > Subject: RE: [DTS][PATCH V2 2/3] virtio: update vhost user cases >=20 > Jingguo, > In below file, the code is not updated: Injection Rate(Mpps), > Throughput(Mpps), and for v2, you should add the v2 changes in the patch > such as below > V2 changes: > Update the table column's name from xxx to xxx for better understanding. >=20 >=20 > self.header_row =3D ["FrameSize(B)", "RecvPackets(Mpps)", > + "SendPackets(Mpps)", "LineRate(%)"] >=20 > Thanks > Qian >=20 > -----Original Message----- > From: Fu, JingguoX > Sent: Friday, January 22, 2016 4:46 PM > To: dts@dpdk.org > Cc: Liu, Yong; Xu, Qian Q; Fu, JingguoX > Subject: [DTS][PATCH V2 2/3] virtio: update vhost user cases >=20 > 1: optimize case > 2: add get rx rate for generator > 3: better way to check vhost.out file >=20 > Signed-off-by: Jingguo Fu > --- > tests/TestSuite_vhost_user_one_copy_one_vm.py | 202 ++++++++++++--------= - > ----- > 1 file changed, 94 insertions(+), 108 deletions(-) >=20 > diff --git a/tests/TestSuite_vhost_user_one_copy_one_vm.py > b/tests/TestSuite_vhost_user_one_copy_one_vm.py > index 32e47ad..971d9c2 100644 > --- a/tests/TestSuite_vhost_user_one_copy_one_vm.py > +++ b/tests/TestSuite_vhost_user_one_copy_one_vm.py > @@ -47,13 +47,18 @@ from etgen import IxiaPacketGenerator from qemu_kvm > import QEMUKvm >=20 >=20 > -class TestVhostSample(TestCase, IxiaPacketGenerator): > +class TestVhostUserOneCopyOneVm(TestCase, IxiaPacketGenerator): >=20 > def set_up_all(self): > # To Extend IXIA packet generator method, call the tester's > method. > - self.tester.extend_external_packet_generator(TestVhostSample, > self) > + > + self.tester.extend_external_packet_generator(TestVhostUserOneCopyOneVm > + , self) >=20 > # Build target with modified config file > + self.dut.send_expect( > + "sed -i -e > 's/CONFIG_RTE_LIBRTE_VHOST_USER=3D.*$/CONFIG_RTE_LIBRTE" > + "_VHOST_USER=3Dy/' ./config/common_linuxapp", > + "# ", > + 30) > self.dut.build_install_dpdk(self.target) >=20 > # Get and verify the ports > @@ -78,10 +83,16 @@ class TestVhostSample(TestCase, IxiaPacketGenerator): > " -c %s -n %d --socket-mem 1024,1024 -- -p 0x1 -- > mergeable %d" + \ > " --zero-copy %d --vm2vm %d 2 > ./vhost.out &" > # build the vhost sample in vhost-user mode. > - self.dut.send_expect( > - "sed -i -e 's/define MAX_QUEUES 512/define MAX_QUEUES 128/'" > - " ./examples/vhost/main.c", > - "#") > + if self.nic in ['niantic']: > + self.dut.send_expect( > + "sed -i -e 's/#define MAX_QUEUES.*$/#define MAX_QUEUES > 128/' " > + "./examples/vhost/main.c", > + "#", 10) > + else: > + self.dut.send_expect( > + "sed -i -e 's/#define MAX_QUEUES.*$/#define MAX_QUEUES > 512/' " > + "./examples/vhost/main.c", > + "#", 10) > out =3D self.dut.send_expect("make -C examples/vhost", "#") > self.verify("Error" not in out, "compilation error") > self.verify("No such file" not in out, "Not found file error") @= @ > -97,7 +108,7 @@ class TestVhostSample(TestCase, IxiaPacketGenerator): > self.dst2 =3D "192.168.4.1" > self.vm_dut =3D None >=20 > - self.header_row =3D ["Test", "Mode", "Frame", "Mpps", "% linerat= e"] > + self.header_row =3D ["FrameSize(B)", "RecvPackets(Mpps)", > + "SendPackets(Mpps)", "LineRate(%)"] > self.memory_channel =3D 4 >=20 > def set_up(self): > @@ -108,30 +119,19 @@ class TestVhostSample(TestCase, IxiaPacketGenerator= ): >=20 > if "jumbo" in self.running_case: > self.jumbo =3D 1 > - self.frame_sizes =3D [ > - 68, > - 128, > - 256, > - 512, > - 1024, > - 1280, > - 1518, > - 2048, > - 5000, > - 9000] > + self.frame_sizes =3D [64, 128, 256, 512, 1024, 1280, 1518, > + 2048, 5000, 9000] > self.vm_testpmd =3D "./x86_64-native-linuxapp-gcc/app/testpm= d - > c 0x3 -n 3" \ > - + \ > - " -- -i --txqflags=3D0xf00 --disable-hw-vlan-filter --ma= x- > pkt-len 9600" > + + " -- -i --txqflags=3D0xf00 " \ > + + "--disable-hw-vlan-filter --max-pkt-len 9600" > else: > self.jumbo =3D 0 > - self.frame_sizes =3D [68, 128, 256, 512, 1024, 1280, 1518] > + self.frame_sizes =3D [64, 128, 256, 512, 1024, 1280, 1518] > self.vm_testpmd =3D "./x86_64-native-linuxapp-gcc/app/testpm= d - > c 0x3 -n 3" \ > + " -- -i --txqflags=3D0xf00 --disable-hw-vlan-filter" > self.dut.send_expect("rm -rf ./vhost.out", "#") >=20 > self.launch_vhost_sample() >=20 > - print "Start VM with 2virtio\n" > # start VM with 2virtio > self.start_onevm() >=20 > @@ -146,15 +146,14 @@ class TestVhostSample(TestCase, IxiaPacketGenerator= ): > time.sleep(30) > try: > print "Launch vhost sample\n" > - out =3D self.dut.send_expect( > - "cat ./vhost.out", > - "VHOST_CONFIG: bind to vhost-net", > - 20) > + self.dut.session.copy_file_from("/root/dpdk/vhost.out") > + fp =3D open('./vhost.out', 'r') > + out =3D fp.read() > + fp.close() > if "Error" in out: > raise Exception("Launch vhost sample failed") > except Exception as e: > print dts.RED("Failed to launch vhost sample: %s" % str(e)) > - self.dut.send_expect("rm -rf ./vhost-net", "#", 20) >=20 > def start_onevm(self): > # > @@ -172,7 +171,7 @@ class TestVhostSample(TestCase, IxiaPacketGenerator): > self.vm.set_vm_device(**vm_params) >=20 > try: > - self.vm_dut =3D self.vm.start(auto_portmap=3DFalse) > + self.vm_dut =3D self.vm.start() > if self.vm_dut is None: > raise Exception("Set up VM ENV failed") > except Exception as e: > @@ -267,23 +266,76 @@ class TestVhostSample(TestCase, IxiaPacketGenerator= ): > self.vm_dut.send_expect("ip route show", "#") > print self.vm_dut.send_expect("arp -a", "#") >=20 > + def get_transmission_results(self, rx_port_list, tx_port_list, > delay=3D5): > + time.sleep(delay) > + recvbpsRate =3D 0 > + recvRate =3D 0 > + txbpsRate =3D 0 > + txRate =3D 0 > + for port in tx_port_list: > + self.stat_get_rate_stat_all_stats(port) > + out =3D self.send_expect('stat cget -framesSent', '%', 10) > + txRate +=3D int(out.strip()) > + self.logger.info("Port %s: TX %f Mpps" % (port, (txRate * 1.= 0 > / 1000000))) > + out =3D self.send_expect('stat cget -bitsSent', '%', 10) > + txbpsRate +=3D int(out.strip()) > + self.logger.info("Port %s: TX %f Mbps" % (port, (txbpsRate * > 1.0 / 1000000))) > + for port in rx_port_list: > + self.stat_get_rate_stat_all_stats(port) > + out =3D self.send_expect('stat cget -framesReceived', '%', 1= 0) > + recvRate +=3D int(out.strip()) > + out =3D self.send_expect('stat cget -oversize', '%', 10) > + recvRate +=3D int(out.strip()) > + self.logger.info("Port %s: RX %f Mpps" % (port, (recvRate * > 1.0 / 1000000))) > + out =3D self.send_expect('stat cget -bitsReceived', '%', 10) > + recvbpsRate +=3D int(out.strip()) > + self.logger.info("Port %s: RX %f Mbps" % (port, > + (recvbpsRate * 1.0 / 1000000))) > + > + return (txRate,recvRate) > + > + def send_verify(self, case, frame_sizes, vlan_id1=3D0): > + dts.results_table_add_header(self.header_row) > + for frame_size in frame_sizes: > + info =3D "Running test %s, and %d frame size.\n" % (case, > frame_size) > + self.logger.info(info) > + payload =3D frame_size - HEADER_SIZE['eth'] - HEADER_SIZE['i= p'] > + flow =3D > '[Ether(dst=3D"%s")/Dot1Q(vlan=3D%s)/IP(src=3D"%s",dst=3D"%s")/("X"*%d)]'= % ( > + self.virtio1_mac, vlan_id1, self.src1, self.dst1, payloa= d) > + self.tester.scapy_append('wrpcap("flow.pcap", %s)' % flow) > + self.tester.scapy_execute() > + > + tgenInput =3D [] > + port =3D self.tester.get_local_port(self.pf) > + tgenInput.append((port, port, "flow.pcap")) > + > + recvpkt, sendpkt =3D self.tester.traffic_generator_throughpu= t( > + tgenInput, delay=3D15) > + recvpkt /=3D 1000000.0 > + sendpkt /=3D 1000000.0 > + pct =3D sendpkt * 100 / recvpkt > + data_row =3D [frame_size, str(recvpkt), str(sendpkt), str(pc= t)] > + dts.results_table_add_row(data_row) > + dts.results_table_print() > + > def test_perf_user_one_vm_legacy_fwd(self): > # > # Test the performance of one vm with 2virtio devices in legacy > fwd > # > # Restore the virtio interfaces to use legacy driver > self.vm_dut.restore_interfaces() > - > self.set_legacy_disablefw() > # Set the legacy fwd rules then get the VLAN id from vhost sampl= e > # output > self.set_onevm_legacy_fwd() > - > time.sleep(5) > - out_clean =3D self.dut.get_session_output(timeout=3D2) > - out =3D self.dut.send_expect("cat ./vhost.out", "# ", 20) > + > + self.dut.get_session_output(timeout=3D2) > + self.dut.session.copy_file_from("/root/dpdk/vhost.out") > + fp =3D open('./vhost.out', 'r') > + out =3D fp.read() > + fp.close() > # Get the VLAN ID for virtio > - print out, "\ncheck the vlan info: \n" > + print "Check the vlan info: \n" > l1 =3D re.findall( > 'MAC_ADDRESS.*?%s.*?and.*?VLAN_TAG.*?(\d+).*?registered' % > (str(self.virtio1_mac)), out) @@ -297,41 +349,7 @@ class > TestVhostSample(TestCase, IxiaPacketGenerator): > vlan_id2 =3D l2[0] > print "vlan_id2 is ", vlan_id2 >=20 > - dts.results_table_add_header(self.header_row) > - > - # Create pcap file and ixia traffic > - for frame_size in self.frame_sizes: > - info =3D "Running test %s, and %d frame size.\n" % ( > - self.running_case, frame_size) > - self.logger.info(info) > - > - payload_size =3D frame_size - HEADER_SIZE['eth'] - > HEADER_SIZE['ip'] > - flow1 =3D > '[Ether(dst=3D"%s")/Dot1Q(vlan=3D%s)/IP(src=3D"%s",dst=3D"%s")/("X"*%d)]'= % ( > - self.virtio1_mac, vlan_id1, self.src1, self.dst1, > payload_size) > - flow2 =3D > '[Ether(dst=3D"%s")/Dot1Q(vlan=3D%s)/IP(src=3D"%s",dst=3D"%s")/("X"*%d)]'= % ( > - self.virtio2_mac, vlan_id2, self.src2, self.dst2, > payload_size) > - > - self.tester.scapy_append('wrpcap("flow1.pcap", %s)' % flow1) > - self.tester.scapy_append('wrpcap("flow2.pcap",%s)' % flow2) > - self.tester.scapy_execute() > - > - # Capture the performance > - tgenInput =3D [] > - port =3D self.tester.get_local_port(self.pf) > - tgenInput.append((port, port, "flow2.pcap")) > - > - _, pps =3D self.tester.traffic_generator_throughput( > - tgenInput, delay=3D15) > - pps /=3D 1000000.0 > - linerate =3D self.wirespeed(self.nic, frame_size, 1) > - pct =3D pps * 100 / linerate > - scenario =3D self.running_case > - mode =3D "vhost user" > - data_row =3D [scenario, mode, frame_size, str(pps), str(pct)= ] > - dts.results_table_add_row(data_row) > - > - dts.results_table_print() > - > + self.send_verify(self.running_case, self.frame_sizes, vlan_id1) > # Stop the Vhost sample > self.dut.send_expect("killall -s INT vhost-switch", "#", 20) >=20 > @@ -339,16 +357,18 @@ class TestVhostSample(TestCase, IxiaPacketGenerator= ): > # > # Test the performance of one vm with 2virtio devices in legacy > fwd > # > - > # start testpmd on VM > self.vm_testpmd_start() > time.sleep(5) > # Clean the output to ensure the commands cat ./vhost.out can be > sent > # and got answered correctly. > - out_clean =3D self.dut.get_session_output(timeout=3D2) > - out =3D self.dut.send_expect("cat ./vhost.out", "# ", 20) > + self.dut.get_session_output(timeout=3D2) > + self.dut.session.copy_file_from("/root/dpdk/vhost.out") > + fp =3D open('./vhost.out', 'r') > + out =3D fp.read() > + fp.close() > # Get the VLAN ID for virtio > - print out, "\ncheck the vlan info: \n" > + print "Check the vlan info: \n" > l1 =3D re.findall( > 'MAC_ADDRESS.*?%s.*?and.*?VLAN_TAG.*?(\d+).*?registered' % > (str(self.virtio1_mac)), out) @@ -361,43 +381,9 @@ class > TestVhostSample(TestCase, IxiaPacketGenerator): > if len(l2) > 0: > vlan_id2 =3D l2[0] > print vlan_id2 > - > - dts.results_table_add_header(self.header_row) > - > - # Create pcap file and ixia traffic > - for frame_size in self.frame_sizes: > - info =3D "Running test %s, and %d frame size.\n" % ( > - self.running_case, frame_size) > - self.logger.info(info) > - > - payload_size =3D frame_size - HEADER_SIZE['eth'] - > HEADER_SIZE['ip'] > - flow1 =3D > '[Ether(dst=3D"%s")/Dot1Q(vlan=3D%s)/IP(src=3D"%s",dst=3D"%s")/("X"*%d)]'= % ( > - self.virtio1_mac, vlan_id1, self.src1, self.dst1, > payload_size) > - flow2 =3D > '[Ether(dst=3D"%s")/Dot1Q(vlan=3D%s)/IP(src=3D"%s",dst=3D"%s")/("X"*%d)]'= % ( > - self.virtio2_mac, vlan_id2, self.src2, self.dst2, > payload_size) > - self.tester.scapy_append('wrpcap("flow1.pcap", %s)' % flow1) > - self.tester.scapy_append('wrpcap("flow2.pcap",%s)' % flow2) > - self.tester.scapy_execute() > - > - # Capture the performance > - tgenInput =3D [] > - port =3D self.tester.get_local_port(self.pf) > - tgenInput.append((port, port, "flow1.pcap")) > - tgenInput.append((port, port, "flow2.pcap")) > - > - _, pps =3D self.tester.traffic_generator_throughput( > - tgenInput, delay=3D15) > - pps /=3D 1000000.0 > - linerate =3D self.wirespeed(self.nic, frame_size, 1) > - pct =3D pps * 100 / linerate > - scenario =3D self.running_case > - mode =3D "vhost user" > - data_row =3D [scenario, mode, frame_size, str(pps), str(pct)= ] > - dts.results_table_add_row(data_row) > - > - dts.results_table_print() > + self.send_verify(self.running_case, self.frame_sizes, vlan_id1) > # Stop testpmd > - print self.vm_dut.send_expect("stop", "testpmd>") > + self.vm_dut.send_expect("stop", "testpmd>") > time.sleep(1) > self.vm_dut.send_expect("quit", "# ") >=20 > -- > 2.1.0