From: "Liu, Yong" <yong.liu@intel.com>
To: "Ding, HengX" <hengx.ding@intel.com>, "dts@dpdk.org" <dts@dpdk.org>
Cc: "Ding, HengX" <hengx.ding@intel.com>
Subject: Re: [dts] [PATCH] l3fwd/testpmd performance: optimize command for testpmd and comment some cases no need to run.
Date: Fri, 22 Apr 2016 01:07:28 +0000 [thread overview]
Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E14F0643A@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <1461118603-10248-1-git-send-email-hengx.ding@intel.com>
Hi Heng, some comments below.
> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Ding Heng
> Sent: Wednesday, April 20, 2016 10:17 AM
> To: dts@dpdk.org
> Cc: Ding, HengX
> Subject: [dts] [PATCH] l3fwd/testpmd performance: optimize command for
> testpmd and comment some cases no need to run.
>
> l3fwd: comment 2 cases no need to run in nightly performance test. Fix
> issues
> for run rfc2544 case with different nic. Add 72 byte for performance test.
>
> testpmd: change report format for generate nightly performance test. Use
> core
> mask instead of all cores for performance test.
>
> framework/pmd_output: optimize command for performance, run testpmd in
> vector
> mode instead of Xmit mode. Optimize core configuration for testpmd because
> run
> testpmd with all cores will get a bad performance result.
>
> Signed-off-by: Ding Heng <hengx.ding@intel.com>
>
> diff --git a/framework/pmd_output.py b/framework/pmd_output.py
> index df8db12..05e4e04 100644
> --- a/framework/pmd_output.py
> +++ b/framework/pmd_output.py
> @@ -101,14 +101,18 @@ class PmdOutput():
>
> def start_testpmd(self, cores, param='', eal_param='', socket=0):
> # in dpdk2.0 need used --txqflags param to open hardware features
> + # use 0xf01 to enable vector mode and get better performance.
> if "--txqflags" not in param:
> - param += " --txqflags=0"
Please not changed this default value for other suites depend on this. You can appoint this value in performance suite.
> + param += " --txqflags=0xf01"
>
> if type(cores) == list:
> core_list = cores
> elif cores == "Default":
> core_list = self.dut.get_core_list(self.default_cores)
> else:
> + # testpmd could not run with single core, at least 2 cores
> are needed.
> + if cores == "1S/1C/1T":
> + cores = "1S/2C/1T"
That's strange logic, please change input core setting as required.
> core_list = self.dut.get_core_list(cores, socket=socket)
> self.coremask = dts.create_mask(core_list)
> command = "./%s/app/testpmd -c %s -n %d %s -- -i %s" \
> diff --git a/tests/TestSuite_l3fwd.py b/tests/TestSuite_l3fwd.py
> index 0376a76..816bd43 100644
> --- a/tests/TestSuite_l3fwd.py
> +++ b/tests/TestSuite_l3fwd.py
> @@ -50,7 +50,7 @@ class TestL3fwd(TestCase,IxiaPacketGenerator):
> test_cases_2_ports = [(1,"1S/1C/1T","%s -c %s -n %d -- -P -p %s --
> config '(P0,0,C{1.1.0}), (P1,0,C{1.1.0})'"),
> #"1S/1C/2T": "%s -c %s -n %d -- -p %s --config
> '(P0,0,C{1.1.0}), (P1,0,C{1.1.1})'",
> (1,"1S/2C/1T","%s -c %s -n %d -- -P -p %s --
> config '(P0,0,C{1.1.0}), (P1,0,C{1.2.0})'"),
> - #"1S/4C/1T": "%s -c %s -n %d -- -p %s --config
> '(P0,0,C{1.1.0}), (P1,0,C{1.2.0}),(P0,1,C{1.3.0}), (P1,1,C{1.4.0})'",
> + (1,"1S/4C/1T", "%s -c %s -n %d -- -p %s --
> config '(P0,0,C{1.1.0}), (P1,0,C{1.2.0}),(P0,1,C{1.3.0}),
> (P1,1,C{1.4.0})'"),
> #"2S/2C/1T": "%s -c %s -n %d -- -p %s --config
> '(P0,0,C{0.1.0}), (P1,0,C{0.2.0}),(P0,1,C{1.3.0}), (P1,1,C{1.4.0})'",
> ]
>
> @@ -94,7 +94,7 @@ class TestL3fwd(TestCase,IxiaPacketGenerator):
> "{IPv4(13,101,0,0), 24, P3}",
> ]
>
> - frame_sizes = [64, 128, 256, 512, 2048] # 65, 128
> + frame_sizes = [64, 72, 128, 256, 512, 1024, 2048] # 65, 128
> methods = ['lpm']#, 'exact']
>
> #
> @@ -309,7 +309,7 @@ class TestL3fwd(TestCase,IxiaPacketGenerator):
> """
> pass
>
> - def test_perf_l3fwd_4ports(self):
> + def no_test_perf_l3fwd_4ports(self):
> """
> L3fwd main 4 ports.
> """
> @@ -360,7 +360,7 @@ class TestL3fwd(TestCase,IxiaPacketGenerator):
>
> dts.results_table_print()
>
> - def test_perf_l3fwd_2ports(self):
> + def no_test_perf_l3fwd_2ports(self):
> """
> L3fwd main 2 ports.
> """
> @@ -395,6 +395,7 @@ class TestL3fwd(TestCase,IxiaPacketGenerator):
> repl1 = "C{" + str(self.port_socket)
>
> coreMask = {}
> + cmdlist = []
> rtCmdLines = {}
> cmdlist = TestL3fwd.test_cases_2_ports
> for cmdline_pat in cmdlist:
> @@ -469,14 +470,15 @@ class TestL3fwd(TestCase,IxiaPacketGenerator):
>
> def test_perf_rfc2544(self):
>
> + nic = self.get_nic_name(self.dut.ports_info[0]['type'])
Nic name can simply imported by "self.nic".
> ports = self.dut.get_ports()
> ports_num = len(ports)
> - header_row = ["Frame", "mode", "S/C/T", "LR_tx_pkts(1min)",
> "LR_rx_pkts(1min)", "LR_loss_pkts(1min)", "% zero_loss_rate",
> "zero_loss_throughput(Mpps)"]
> + header_row = ["Frame_size(byte)", "mode", "S/C/T",
> "zero_loss_throughput(Mpps)", " % zero_loss_rate"]# "LR_tx_pkts(1min)",
> "LR_rx_pkts(1min)", "LR_loss_pkts(1min)", "% zero_loss_rate",
> "zero_loss_throughput(Mpps)"]
> self.l3fwd_test_results['header'] = header_row
> dts.results_table_add_header(header_row)
> self.l3fwd_test_results['data'] = []
>
> - for frame_size in [64, 128, 256, 512, 1024]:
> + for frame_size in TestL3fwd.frame_sizes:
>
> # Prepare traffic flow
> payload_size = frame_size - \
> @@ -501,10 +503,17 @@ class TestL3fwd(TestCase,IxiaPacketGenerator):
>
> coreMask = {}
> rtCmdLines = {}
> + cmdlist = []
> if ports_num == 4:
> - cmdlist = TestL3fwd.test_cases_4_ports
> + for i in TestL3fwd.test_cases_4_ports:
> + cmdlist.append(i)
> else:
> - cmdlist = TestL3fwd.test_cases_2_ports
> + for i in TestL3fwd.test_cases_2_ports:
> + cmdlist.append(i)
> + if 'eagle' in nic:
> + del cmdlist[2]
> + else:
> + del cmdlist[1]
> for cmdline_pat in cmdlist:
> corelist = []
> rtCmdLines[cmdline_pat[1]] = cmdline_pat[2]
> @@ -561,14 +570,15 @@ class TestL3fwd(TestCase,IxiaPacketGenerator):
> zero_loss_rate, tx_pkts, rx_pkts =
> self.tester.run_rfc2544(tgenInput, delay=60)
> loss_pkts = tx_pkts - rx_pkts
> self.dut.send_expect("^C", "#")
> - linerate = self.wirespeed(self.nic, frame_size, 2)
> + linerate = self.wirespeed(self.nic, frame_size,
> ports_num)
> zero_loss_throughput = (linerate * zero_loss_rate)
> / 100
>
> tx_pkts = human_read_number(tx_pkts)
> rx_pkts = human_read_number(rx_pkts)
> loss_pkts = human_read_number(loss_pkts)
>
> - data_row = [frame_size, mode, cores, tx_pkts,
> rx_pkts, loss_pkts, zero_loss_rate, zero_loss_throughput]
> + #data_row = [frame_size, mode, cores, tx_pkts,
> rx_pkts, loss_pkts, zero_loss_rate, zero_loss_throughput]
> + data_row = [frame_size, mode, cores,
> zero_loss_throughput, zero_loss_rate]
> dts.results_table_add_row(data_row)
> self.l3fwd_test_results['data'].append(data_row)
> else:
> diff --git a/tests/TestSuite_pmd.py b/tests/TestSuite_pmd.py
> index aeab99a..6938a7d 100644
> --- a/tests/TestSuite_pmd.py
> +++ b/tests/TestSuite_pmd.py
> @@ -58,14 +58,15 @@ class TestPmd(TestCase,IxiaPacketGenerator):
> self.rxfreet_values = [0, 8, 16, 32, 64, 128]
>
> self.test_cycles = [{'cores': '1S/1C/1T', 'Mpps': {}, 'pct': {}},
> - {'cores': '1S/2C/1T', 'Mpps': {}, 'pct': {}},
> - {'cores': '1S/2C/2T', 'Mpps': {}, 'pct': {}},
> - {'cores': '1S/4C/1T', 'Mpps': {}, 'pct': {}},
> - {'cores': '1S/8C/1T', 'Mpps': {}, 'pct': {}}
> + #{'cores': '1S/2C/1T', 'Mpps': {}, 'pct': {}},
> + #{'cores': '1S/2C/2T', 'Mpps': {}, 'pct': {}},
> + #{'cores': '1S/4C/1T', 'Mpps': {}, 'pct': {}},
> + #{'cores': '1S/8C/1T', 'Mpps': {}, 'pct': {}}
Just removed those useless configurations.
> ]
>
> self.table_header = ['Frame Size']
> for test_cycle in self.test_cycles:
> + self.table_header.append("app")
> self.table_header.append("%s Mpps" % test_cycle['cores'])
> self.table_header.append("% linerate")
>
> @@ -126,7 +127,7 @@ class TestPmd(TestCase,IxiaPacketGenerator):
> core_mask = dts.create_mask(core_list)
> port_mask = dts.create_mask(self.dut.get_ports())
>
> - self.pmdout.start_testpmd("all", "--coremask=%s --rxq=%d --
> txq=%d --portmask=%s --rss-ip" % (core_mask, queues, queues, port_mask))
> + self.pmdout.start_testpmd(core_config, " --rxq=%d --txq=%d --
> portmask=%s --rss-ip --txrst=32 --txfreet=32 --txd=128" % (queues, queues,
> port_mask), socket=self.ports_socket)
> command_line = self.pmdout.get_pmd_cmd()
>
> info = "Executing PMD (mac fwd) using %s\n" %
> test_cycle['cores']
> @@ -171,6 +172,7 @@ class TestPmd(TestCase,IxiaPacketGenerator):
> table_row = [frame_size]
>
> for test_cycle in self.test_cycles:
> + table_row.append("testpmd")
> table_row.append(test_cycle['Mpps'][frame_size])
> table_row.append(test_cycle['pct'][frame_size])
>
> @@ -209,7 +211,8 @@ class TestPmd(TestCase,IxiaPacketGenerator):
> core_mask = dts.create_mask(core_list)
> port_mask = dts.create_mask([self.dut_ports[0],
> self.dut_ports[1]])
>
> - self.pmdout.start_testpmd("all", "--coremask=%s --rxq=%d --
> txq=%d --portmask=%s" % (core_mask, queues, queues, port_mask))
> + #self.pmdout.start_testpmd("all", "--coremask=%s --rxq=%d --
> txq=%d --portmask=%s" % (core_mask, queues, queues, port_mask))
> + self.pmdout.start_testpmd(core_config, " --rxq=%d --txq=%d --
> portmask=%s --rss-ip --txrst=32 --txfreet=32 --txd=128" % (queues, queues,
> port_mask), socket=self.ports_socket)
> command_line = self.pmdout.get_pmd_cmd()
>
> info = "Executing PMD using %s\n" % test_cycle['cores']
> @@ -249,6 +252,7 @@ class TestPmd(TestCase,IxiaPacketGenerator):
> for frame_size in self.frame_sizes:
> table_row = [frame_size]
> for test_cycle in self.test_cycles:
> + table_row.append("testpmd")
> table_row.append(test_cycle['Mpps'][frame_size])
> table_row.append(test_cycle['pct'][frame_size])
>
> --
> 1.9.3
next prev parent reply other threads:[~2016-04-22 1:07 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-20 2:16 Ding Heng
2016-04-22 1:07 ` Liu, Yong [this message]
2016-04-22 1:30 ` Xu, Qian Q
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=86228AFD5BCD8E4EBFD2B90117B5E81E14F0643A@SHSMSX103.ccr.corp.intel.com \
--to=yong.liu@intel.com \
--cc=dts@dpdk.org \
--cc=hengx.ding@intel.com \
/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).