From: lihong <lihongx.ma@intel.com>
To: dts@dpdk.org
Cc: lihong <lihongx.ma@intel.com>
Subject: [dts] [PATCH V1] tests/vm2vm_virtio_pmd: update testcase according to plan
Date: Tue, 16 Jul 2019 07:21:06 +0800 [thread overview]
Message-ID: <1563232866-19164-1-git-send-email-lihongx.ma@intel.com> (raw)
Signed-off-by: lihong <lihongx.ma@intel.com>
---
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
next reply other threads:[~2019-07-16 6:43 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-15 23:21 lihong [this message]
2019-08-07 3:43 ` Tu, Lijuan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1563232866-19164-1-git-send-email-lihongx.ma@intel.com \
--to=lihongx.ma@intel.com \
--cc=dts@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).