From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 525CD100C for ; Tue, 7 Aug 2018 12:25:17 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Aug 2018 03:25:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,454,1526367600"; d="scan'208";a="79598585" Received: from dpdk-test60.sh.intel.com ([10.67.111.98]) by orsmga001.jf.intel.com with ESMTP; 07 Aug 2018 03:25:14 -0700 From: Xueqin Lin To: dts@dpdk.org Cc: "xueqin.lin" Date: Tue, 7 Aug 2018 00:23:49 -0400 Message-Id: <1533615829-108513-1-git-send-email-xueqin.lin@intel.com> X-Mailer: git-send-email 2.5.5 Subject: [dts] [PATCH] tests/dynamic_queue: add dynamic queue test suite 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, 07 Aug 2018 10:25:17 -0000 From: "xueqin.lin" Signed-off-by: Xueqin Lin --- tests/TestSuite_dynamic_queue.py | 180 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 tests/TestSuite_dynamic_queue.py diff --git a/tests/TestSuite_dynamic_queue.py b/tests/TestSuite_dynamic_queue.py new file mode 100644 index 0000000..880d421 --- /dev/null +++ b/tests/TestSuite_dynamic_queue.py @@ -0,0 +1,180 @@ +# + +import time +import re +import utils +from test_case import TestCase +from pmd_output import PmdOutput +from settings import get_nic_name +from packet import Packet, sniff_packets, load_sniff_packets +import random + + +class TestDynamicQueue(TestCase): + + def set_up_all(self): + self.dut_ports = self.dut.get_ports(self.nic) + self.verify(len(self.dut_ports) >= 1, "Insufficient ports") + out = self.dut.send_expect("cat config/common_base", "]# ", 10) + self.PF_Q_strip = 'CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF' + pattern = "%s=(\d*)" % self.PF_Q_strip + self.PF_QUEUE = self.element_strip(out, pattern) + self.used_dut_port = self.dut_ports[0] + tester_port = self.tester.get_local_port(self.used_dut_port) + self.tester_intf = self.tester.get_interface(tester_port) + self.dut_testpmd = PmdOutput(self.dut) + + def set_up(self): + self.dut_testpmd.start_testpmd( + "Default", "--port-topology=chained --txq=%s --rxq=%s" + % (self.PF_QUEUE, self.PF_QUEUE)) + + def element_strip(self, out, pattern): + """ + Strip and get queue number. + """ + s = re.compile(pattern, re.DOTALL) + res = s.search(out) + if res is None: + print utils.RED('Fail to search number.') + return None + else: + result = res.group(1) + return int(result) + + def send_packet(self): + """ + Generate packets and send them to dut + """ + mac = self.dut.get_mac_address(0) + for i in range(self.PF_QUEUE * 2): + pkt = Packet(pkt_type='IP_RAW') + pkt.config_layer('ether', {'dst': mac}) + pkt.config_layer( + 'ipv4', {'dst': '192.168.0.%d' % i, 'src': '191.168.0.1'}) + pkt.send_pkt(tx_port=self.tester_intf) + + def rxq_setup_test(self, chgflag=0): + """ + Dynamic to setup rxq and reconfigure ring size at runtime. + chgflag: reconfigure ring size flag + 1:reconfigure Rx ring size + 0:no change on Rx ring size + """ + queue = range(3) + for i in range(3): + queue[i] = random.randint(1, self.PF_QUEUE - 1) + self.dut_testpmd.execute_cmd('port 0 rxq %d stop' % queue[i]) + self.dut_testpmd.execute_cmd('set fwd rxonly') + self.dut_testpmd.execute_cmd('start') + self.send_packet() + self.dut.get_session_output(timeout=10) + out = self.dut_testpmd.execute_cmd('stop') + for i in range(3): + self.verify( + "Forward Stats for RX Port= 0/Queue=%2d" % queue[i] not in out, + "Fail to verify rxq stop!") + if chgflag == 1: + for i in range(3): + out = self.dut_testpmd.execute_cmd( + 'show rxq info 0 %d' % queue[i]) + qring_strip = 'Number of RXDs: ' + pattern = "%s([0-9]+)" % qring_strip + qringsize = self.element_strip(out, pattern) + chg_qringsize = qringsize % 1024 + 256 + self.dut_testpmd.execute_cmd( + 'port config 0 rxq %d ring_size %d' + % (queue[i], chg_qringsize)) + self.dut_testpmd.execute_cmd('port 0 rxq %d setup' % queue[i]) + out = self.dut_testpmd.execute_cmd( + 'show rxq info 0 %d' % queue[i]) + chk_qringsize = self.element_strip(out, pattern) + self.verify(chk_qringsize == chg_qringsize, + "Fail to change ring size at runtime!") + for i in range(3): + if chgflag == 0: + self.dut_testpmd.execute_cmd('port 0 rxq %d setup' % queue[i]) + self.dut_testpmd.execute_cmd('port 0 rxq %d start' % queue[i]) + self.dut_testpmd.execute_cmd('start') + self.send_packet() + self.dut.get_session_output(timeout=10) + out = self.dut_testpmd.execute_cmd('stop') + for i in range(3): + self.verify("Forward Stats for RX Port= 0/Queue=%2d" + % queue[i] in out, "Fail to setup rxq %d at runtime" + % queue[i]) + + def txq_setup_test(self, chgflag=0): + """ + Dynamic to setup txq and reconfigure ring size at runtime. + chgflag: reconfigure ring size flag + 1:reconfigure Tx ring size + 0:no change on Tx ring size + """ + for i in range(3): + queue = random.randint(1, self.PF_QUEUE - 1) + out = self.dut_testpmd.execute_cmd('show txq info 0 %d' % queue) + qring_strip = 'Number of TXDs: ' + pattern = "%s([0-9]+)" % qring_strip + qringsize = self.element_strip(out, pattern) + self.dut_testpmd.execute_cmd('port 0 txq %d stop' % queue) + self.dut_testpmd.execute_cmd('set fwd txonly') + self.dut_testpmd.execute_cmd('start') + time.sleep(10) + out = self.dut_testpmd.execute_cmd('stop') + tx_num = qringsize - 1 + self.verify("TX-packets: %d" % tx_num in out, + "Fail to stop txq at runtime") + if chgflag == 1: + chg_qringsize = qringsize % 1024 + 256 + self.dut_testpmd.execute_cmd( + 'port config 0 txq %d ring_size %d' + % (queue, chg_qringsize)) + self.dut_testpmd.execute_cmd('port 0 txq %d setup' % queue) + out = self.dut_testpmd.execute_cmd( + 'show txq info 0 %d' % queue) + chk_qringsize = self.element_strip(out, pattern) + self.verify(chk_qringsize == chg_qringsize, + "Fail to change ring size at runtime!") + if chgflag == 0: + self.dut_testpmd.execute_cmd('port 0 txq %d setup' % queue) + self.dut_testpmd.execute_cmd('port 0 txq %d start' % queue) + self.dut_testpmd.execute_cmd('start') + time.sleep(10) + out = self.dut_testpmd.execute_cmd('stop') + self.verify("TX-packets: %d" % tx_num not in out, + "Fail to setup txq at runtime") + if chgflag == 1: + chgtx_num = chg_qringsize - 1 + self.verify("TX-packets: %d" % chgtx_num not in out, + "Fail to change txq ring size at runtime") + + def test_rxq_setup(self): + """ + Dynamic to setup rxq test + """ + self.rxq_setup_test() + + def test_rxq_chgring_setup(self): + """ + Dynamic to setup rxq and change ring size test + """ + self.rxq_setup_test(chgflag=1) + + def test_txq_setup(self): + """ + Dynamic to setup txq test + """ + self.txq_setup_test() + + def test_txq_chgring_setup(self): + """ + Dynamic to setup txq and change ring size test + """ + self.txq_setup_test(chgflag=1) + + def tear_down(self): + self.dut_testpmd.quit() + + def tear_down_all(self): + pass -- 2.7.5