From: "lihuisong (C)" <lihuisong@huawei.com>
To: "He, ShiyangX" <shiyangx.he@intel.com>, "dev@dpdk.org" <dev@dpdk.org>
Cc: "Zhou, YidingX" <yidingx.zhou@intel.com>,
"stable@dpdk.org" <stable@dpdk.org>,
"Singh, Aman Deep" <aman.deep.singh@intel.com>,
"Zhang, Yuying" <yuying.zhang@intel.com>,
"Burakov, Anatoly" <anatoly.burakov@intel.com>,
"Li, Xiaoyun" <xiaoyun.li@intel.com>,
Alvin Zhang <alvinx.zhang@intel.com>
Subject: Re: [PATCH] app/testpmd: fix secondary process not forwarding
Date: Tue, 21 Feb 2023 14:37:44 +0800 [thread overview]
Message-ID: <81ef949b-54ca-055a-5f94-ddfda879bcd5@huawei.com> (raw)
In-Reply-To: <DM6PR11MB3946E70B359679170E59D6D4F7A59@DM6PR11MB3946.namprd11.prod.outlook.com>
在 2023/2/21 10:52, He, ShiyangX 写道:
>
>> -----Original Message-----
>> From: lihuisong (C) <lihuisong@huawei.com>
>> Sent: Monday, February 20, 2023 8:46 PM
>> To: He, ShiyangX <shiyangx.he@intel.com>; dev@dpdk.org
>> Cc: Zhou, YidingX <yidingx.zhou@intel.com>; stable@dpdk.org; Singh, Aman
>> Deep <aman.deep.singh@intel.com>; Zhang, Yuying
>> <yuying.zhang@intel.com>; Burakov, Anatoly <anatoly.burakov@intel.com>;
>> Li, Xiaoyun <xiaoyun.li@intel.com>; Alvin Zhang <alvinx.zhang@intel.com>
>> Subject: Re: [PATCH] app/testpmd: fix secondary process not forwarding
>>
>>
>> 在 2022/12/30 15:55, Shiyang He 写道:
>>> Under multi-process scenario, the secondary process gets queue state
>>> from the wrong location (the global variable 'ports'). Therefore, the
>>> secondary process can not forward since "stream_init" is not called.
>>>
>>> This commit fixes the issue by calling 'rte_eth_rx/tx_queue_info_get'
>>> to get queue state from shared memory.
>>>
>>> Fixes: a78040c990cb ("app/testpmd: update forward engine beginning")
>> should use this commit:
>> Fixes: 3c4426db54fc ("app/testpmd: do not poll stopped queues")
> Thanks for your comments, I will ask maintainer to help fix this problem.
>
>>> Cc: stable@dpdk.org
>>>
>>> Signed-off-by: Shiyang He <shiyangx.he@intel.com>
>>> ---
>>> app/test-pmd/testpmd.c | 29 +++++++++++++++++++++++++++--
>>> 1 file changed, 27 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index
>>> 134d79a555..2c73daf9eb 100644
>>> --- a/app/test-pmd/testpmd.c
>>> +++ b/app/test-pmd/testpmd.c
>>> @@ -2378,9 +2378,34 @@ start_packet_forwarding(int with_tx_first)
>>> if (!pkt_fwd_shared_rxq_check())
>>> return;
>>>
>>> - if (stream_init != NULL)
>>> - for (i = 0; i < cur_fwd_config.nb_fwd_streams; i++)
>>> + if (stream_init != NULL) {
>>> + for (i = 0; i < cur_fwd_config.nb_fwd_streams; i++) {
>>> + if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
>> directly use "rte_eal_process_type() == RTE_PROC_SECONDARY"?
> The following action should be executed for all non-primary processes.
"all non-primary processes" is which processes? it's only 'secondary'
here, not 'auto', right?
>
>>> + struct fwd_stream *fs = fwd_streams[i];
>>> + struct rte_eth_rxq_info rx_qinfo;
>>> + struct rte_eth_txq_info tx_qinfo;
>>> + int32_t rc;
>>> + rc = rte_eth_rx_queue_info_get(fs->rx_port,
>>> + fs->rx_queue, &rx_qinfo);
>>> + if (!rc)
>>> + ports[fs->rx_port].rxq[fs-
>>> rx_queue].state =
>>> + rx_qinfo.queue_state;
>>> + else
>>> + TESTPMD_LOG(WARNING,
>>> + "Failed to get rx queue
>> info\n");
>>> +
>>> + rc = rte_eth_tx_queue_info_get(fs->tx_port,
>>> + fs->tx_queue, &tx_qinfo);
>>> + if (!rc)
>>> + ports[fs->tx_port].txq[fs-
>>> tx_queue].state =
>>> + tx_qinfo.queue_state;
>>> + else
>>> + TESTPMD_LOG(WARNING,
>>> + "Failed to get tx queue
>> info\n");
>> not all PMDs implement rte_eth_rx/tx_queue_info_get() to query the state,
>> right?
>> Can you set this state to 'START' if the return value is '-ENOTSUP'?
> If pmd doesn't implement "rte_eth_rx/tx_queue_info_get()" to query queue state, should use the default value instead of modifying the state, because it may be modified elsewhere.
The rx/tx_queue_start/stop() can change Rx/Tx queue state if PMD
supports this API.
In primary, if PMD doesn't support this API, this queue state do not be
changed and still be the original value(RTE_ETH_QUEUE_STATE_STARTED)
start_port() sets.
However, in secondary, Rx/Tx queue state have not been initialized, your
patch also do not it.
Namely, their default values are wrong.
Our plan needs to ensure that the PMDs that do not support
rx/tx_queue_start/stop() or rx/tx_queue_info_get() can forward in secondary.
I think we either add the initialization of queue state in start_port()
or somewhere else, or make sure it's ok here.
>>> + }
>>> stream_init(fwd_streams[i]);
>>> + }
>>> + }
>>>
>>> port_fwd_begin = cur_fwd_config.fwd_eng->port_fwd_begin;
>>> if (port_fwd_begin != NULL) {
next prev parent reply other threads:[~2023-02-21 6:37 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-30 7:55 Shiyang He
2022-12-30 17:23 ` Stephen Hemminger
2023-01-04 2:02 ` He, ShiyangX
2023-01-13 9:07 ` He, ShiyangX
2023-02-08 3:22 ` Zhang, Yuying
2023-02-08 6:38 ` He, ShiyangX
2023-02-20 5:39 ` Zhang, Yuying
2023-02-20 12:45 ` lihuisong (C)
2023-02-21 2:52 ` He, ShiyangX
2023-02-21 6:37 ` lihuisong (C) [this message]
2023-02-21 6:51 ` He, ShiyangX
2023-02-21 15:44 ` [PATCH v2] " Shiyang He
2023-02-22 6:20 ` lihuisong (C)
2023-02-23 14:41 ` [PATCH v3] " Shiyang He
2023-02-23 8:08 ` lihuisong (C)
2023-03-06 15:16 ` Ferruh Yigit
2023-03-06 15:05 ` Ferruh Yigit
2023-03-07 3:25 ` He, ShiyangX
2023-03-07 11:41 ` Ferruh Yigit
2023-03-08 2:05 ` He, ShiyangX
2023-03-08 2:54 ` lihuisong (C)
2023-03-08 9:54 ` Ferruh Yigit
2023-03-08 16:19 ` [PATCH v4] " Shiyang He
2023-03-08 10:20 ` Ferruh Yigit
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=81ef949b-54ca-055a-5f94-ddfda879bcd5@huawei.com \
--to=lihuisong@huawei.com \
--cc=alvinx.zhang@intel.com \
--cc=aman.deep.singh@intel.com \
--cc=anatoly.burakov@intel.com \
--cc=dev@dpdk.org \
--cc=shiyangx.he@intel.com \
--cc=stable@dpdk.org \
--cc=xiaoyun.li@intel.com \
--cc=yidingx.zhou@intel.com \
--cc=yuying.zhang@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).