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 8171DA0471 for ; Tue, 16 Jul 2019 08:43:37 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 377142BF5; Tue, 16 Jul 2019 08:43:37 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id 189D71B53 for ; Tue, 16 Jul 2019 08:43:34 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Jul 2019 23:43:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,496,1557212400"; d="scan'208";a="161329815" Received: from ubuntu.sh.intel.com ([10.67.119.68]) by orsmga008.jf.intel.com with ESMTP; 15 Jul 2019 23:43:32 -0700 From: lihong To: dts@dpdk.org Cc: lihong Date: Tue, 16 Jul 2019 07:21:06 +0800 Message-Id: <1563232866-19164-1-git-send-email-lihongx.ma@intel.com> X-Mailer: git-send-email 2.7.4 Subject: [dts] [PATCH V1] tests/vm2vm_virtio_pmd: update testcase according to plan 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" Signed-off-by: lihong --- tests/TestSuite_vm2vm_virtio_pmd.py | 153 ++++++++++++++++++++++++++++++------ 1 file changed, 128 insertions(+), 25 deletions(-) diff --git a/tests/TestSuite_vm2vm_virtio_pmd.py b/tests/TestSuite_vm2vm_virtio_pmd.py index 9a62ac8..ca97d4d 100644 --- a/tests/TestSuite_vm2vm_virtio_pmd.py +++ b/tests/TestSuite_vm2vm_virtio_pmd.py @@ -33,12 +33,16 @@ DPDK Test suite. Test cases for Vhost-user/Virtio-pmd VM2VM +Test cases for vhost/virtio-pmd(0.95/1.0) VM2VM test with 3 rx/tx paths, +includes mergeable, normal, vector_rx. +About mergeable path check the large packet payload. """ import re import time import utils from virt_common import VM from test_case import TestCase +from packet import load_pcapfile class TestVM2VMVirtioPMD(TestCase): @@ -53,13 +57,14 @@ class TestVM2VMVirtioPMD(TestCase): self.coremask = utils.create_mask(self.cores) self.memory_channel = self.dut.get_memory_channels() self.vm_num = 2 + self.dump_pcap = "/root/pdump-rx.pcap" def set_up(self): """ run before each test case. """ self.table_header = ["FrameSize(B)", "Mode", - "Throughput(Mpps)", "Path"] + "Throughput(Mpps)", "Queue Number", "Path"] self.result_table_create(self.table_header) self.dut.send_expect("killall -s INT testpmd", "#") self.dut.send_expect("killall -s INT qemu-system-x86_64", "#") @@ -68,6 +73,20 @@ class TestVM2VMVirtioPMD(TestCase): self.vm_dut = [] self.vm = [] + def enable_pcap_lib_in_dpdk(self, client_dut): + """ + enable pcap lib in dpdk code and recompile + """ + client_dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_PCAP=n$/CONFIG_RTE_LIBRTE_PMD_PCAP=y/' config/common_base", "#") + client_dut.build_install_dpdk(self.target) + + def disable_pcap_lib_in_dpdk(self, client_dut): + """ + reset pcap lib in dpdk and recompile + """ + client_dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_PCAP=y$/CONFIG_RTE_LIBRTE_PMD_PCAP=n/' config/common_base", "#") + client_dut.build_install_dpdk(self.target) + def start_vhost_testpmd(self): """ launch the testpmd on vhost side @@ -84,22 +103,32 @@ class TestVM2VMVirtioPMD(TestCase): self.vhost.send_expect("set fwd mac", "testpmd> ", 30) self.vhost.send_expect("start", "testpmd> ", 30) - def start_vm_testpmd(self, vm_client, path_mode): + def start_vm_testpmd(self, vm_client, path_mode, extern_param=""): """ launch the testpmd in vm """ if path_mode == "mergeable": - command = self.dut.target + "/app/testpmd " + \ - "-c 0x3 -n 4 -- -i --tx-offloads=0x00 " + \ - "--enable-hw-vlan-strip --txd=1024 --rxd=1024" + command = self.dut.target + "/app/testpmd -c 0x3 -n 4 " + \ + "--file-prefix=virtio -- -i --tx-offloads=0x00 " + \ + "--enable-hw-vlan-strip --txd=1024 --rxd=1024 %s" elif path_mode == "normal": - command = self.dut.target + "/app/testpmd " + \ - "-c 0x3 -n 4 -- -i --tx-offloads=0x00 " + \ - "--enable-hw-vlan-strip --txd=1024 --rxd=1024" + command = self.dut.target + "/app/testpmd -c 0x3 -n 4 " + \ + "--file-prefix=virtio -- -i --tx-offloads=0x00 " + \ + "--enable-hw-vlan-strip --txd=1024 --rxd=1024 %s" elif path_mode == "vector_rx": - command = self.dut.target + "/app/testpmd " + \ - "-c 0x3 -n 4 -- -i --txd=1024 --rxd=1024" - vm_client.send_expect(command, "testpmd> ", 20) + command = self.dut.target + "/app/testpmd -c 0x3 -n 4 " + \ + "--file-prefix=virtio -- -i --txd=1024 --rxd=1024 %s" + vm_client.send_expect(command % extern_param, "testpmd> ", 20) + + def launch_pdump_in_vm(self, vm_client): + """ + bootup pdump in VM + """ + self.vm_dump = vm_client.new_session(suite="pdump") + command_line = self.target + "/app/dpdk-pdump " + \ + "-v --file-prefix=virtio -- " + \ + "--pdump 'port=0,queue=*,rx-dev=%s,mbuf-size=8000'" + self.vm_dump.send_expect(command_line % self.dump_pcap, 'Port') def start_vms(self, mode=0, mergeable=True): """ @@ -153,6 +182,7 @@ class TestVM2VMVirtioPMD(TestCase): results_row = [frame_size] results_row.append(case_info) results_row.append(Mpps) + results_row.append(1) results_row.append(path) self.result_table_add(results_row) @@ -170,34 +200,51 @@ class TestVM2VMVirtioPMD(TestCase): self.update_table_info(mode, 64, Mpps, path) self.result_table_print() + def check_packet_payload_valid(self, vm_dut): + """ + check the payload is valid + """ + # stop pdump + self.vm_dump.send_expect('^c', '# ', 60) + # quit testpmd + vm_dut.send_expect('quit', '#', 60) + time.sleep(2) + vm_dut.session.copy_file_from(src="%s" % self.dump_pcap, dst="%s" % self.dump_pcap) + pkts = load_pcapfile(self.dump_pcap) + self.verify(len(pkts) == 10, "The vm0 do not capture all the packets") + data = str(pkts[0].pktgen.pkt['Raw']) + for i in range(1, 10): + value = str(pkts[i].pktgen.pkt['Raw']) + self.verify(data == value, "the payload in receive packets has been changed") + def stop_all_apps(self): for i in range(len(self.vm)): self.vm_dut[i].send_expect("quit", "#", 20) self.vm[i].stop() self.vhost.send_expect("quit", "#", 30) - def test_vhost_vm2vm_virito_pmd_with_mergeable_path(self): + def test_vhost_vm2vm_virtio_pmd_with_normal_path(self): """ - vhost-user + virtio-pmd with mergeable path + vhost-user + virtio-pmd with normal path """ - path_mode = "mergeable" + path_mode = "normal" self.start_vhost_testpmd() - self.start_vms(mode=0, mergeable=True) + self.start_vms(mode=0, mergeable=False) self.start_vm_testpmd(self.vm_dut[0], path_mode) self.start_vm_testpmd(self.vm_dut[1], path_mode) - self.send_and_verify(mode="virtio 0.95", path=path_mode) + self.send_and_verify(mode="virtio 0.95 normal path", path=path_mode) self.stop_all_apps() - def test_vhost_vm2vm_virtio_pmd_with_normal_path(self): + def test_vhost_vm2vm_virito_10_pmd_with_normal_path(self): """ - vhost-user + virtio-pmd with normal path + vhost-user + virtio1.0-pmd with normal path """ path_mode = "normal" self.start_vhost_testpmd() - self.start_vms(mode=0, mergeable=False) + self.start_vms(mode=1, mergeable=False) self.start_vm_testpmd(self.vm_dut[0], path_mode) self.start_vm_testpmd(self.vm_dut[1], path_mode) - self.send_and_verify(mode="virtio 0.95", path=path_mode) + self.send_and_verify(mode="virtio 1.0 normal path", path=path_mode) self.stop_all_apps() def test_vhost_vm2vm_virtio_pmd_with_vector_rx_path(self): @@ -209,19 +256,75 @@ class TestVM2VMVirtioPMD(TestCase): self.start_vms(mode=0, mergeable=False) self.start_vm_testpmd(self.vm_dut[0], path_mode) self.start_vm_testpmd(self.vm_dut[1], path_mode) - self.send_and_verify(mode="virtio 0.95", path=path_mode) + self.send_and_verify(mode="virtio 0.95 vector_rx", path=path_mode) + self.stop_all_apps() + + def test_vhost_vm2vm_virtioi10_pmd_with_vector_rx_path(self): + """ + vhost-user + virtio1.0-pmd with vector_rx path + """ + path_mode = "vector_rx" + self.start_vhost_testpmd() + self.start_vms(mode=1, mergeable=False) + self.start_vm_testpmd(self.vm_dut[0], path_mode) + self.start_vm_testpmd(self.vm_dut[1], path_mode) + self.send_and_verify(mode="virtio 1.0 vector_rx", path=path_mode) + self.stop_all_apps() + + def test_vhost_vm2vm_virito_pmd_with_mergeable_path(self): + """ + vhost-user + virtio-pmd with mergeable path test with payload check + """ + path_mode = "mergeable" + extern_param = '--max-pkt-len=9600' + self.start_vhost_testpmd() + self.start_vms(mode=0, mergeable=True) + # enable pcap in VM0 + self.enable_pcap_lib_in_dpdk(self.vm_dut[0]) + # git the vm enough huge to run pdump + self.vm_dut[0].set_huge_pages(2048) + # start testpmd and pdump in VM0 + self.start_vm_testpmd(self.vm_dut[0], path_mode, extern_param) + self.vm_dut[0].send_expect('set fwd rxonly', 'testpmd> ', 30) + self.vm_dut[0].send_expect('start', 'testpmd> ', 30) + self.launch_pdump_in_vm(self.vm_dut[0]) + # start testpmd in VM1 and start to send packet + self.start_vm_testpmd(self.vm_dut[1], path_mode, extern_param) + self.vm_dut[1].send_expect('set txpkts 2000,2000,2000,2000', 'testpmd> ', 30) + self.vm_dut[1].send_expect('set burst 1', 'testpmd> ', 30) + self.vm_dut[1].send_expect('start tx_first 10', 'testpmd> ', 30) + # check the packet in vm0 + self.check_packet_payload_valid(self.vm_dut[0]) + # reset the evn in vm + self.disable_pcap_lib_in_dpdk(self.vm_dut[0]) self.stop_all_apps() def test_vhost_vm2vm_virito_10_pmd_with_mergeable_path(self): """ - vhost-user + virtio1.0-pmd with mergeable path + vhost-user + virtio1.0-pmd with mergeable path test with payload check """ path_mode = "mergeable" + extern_param = '--max-pkt-len=9600' self.start_vhost_testpmd() self.start_vms(mode=1, mergeable=True) - self.start_vm_testpmd(self.vm_dut[0], path_mode) - self.start_vm_testpmd(self.vm_dut[1], path_mode) - self.send_and_verify(mode="virtio 1.0", path=path_mode) + # enable pcap in VM0 + self.enable_pcap_lib_in_dpdk(self.vm_dut[0]) + # git the vm enough huge to run pdump + self.vm_dut[0].set_huge_pages(2048) + # start testpmd and pdump in VM0 + self.start_vm_testpmd(self.vm_dut[0], path_mode, extern_param) + self.vm_dut[0].send_expect('set fwd rxonly', 'testpmd> ', 30) + self.vm_dut[0].send_expect('start', 'testpmd> ', 30) + self.launch_pdump_in_vm(self.vm_dut[0]) + # start testpmd in VM1 and start to send packet + self.start_vm_testpmd(self.vm_dut[1], path_mode, extern_param) + self.vm_dut[1].send_expect('set txpkts 2000,2000,2000,2000', 'testpmd> ', 30) + self.vm_dut[1].send_expect('set burst 1', 'testpmd> ', 30) + self.vm_dut[1].send_expect('start tx_first 10', 'testpmd> ', 30) + # check the packet in vm0 + self.check_packet_payload_valid(self.vm_dut[0]) + # reset the evn in vm + self.disable_pcap_lib_in_dpdk(self.vm_dut[0]) self.stop_all_apps() def tear_down(self): -- 2.7.4