[PATCH v4] app/testpmd: fix primary process not polling all queues
Jie Hai
haijie1 at huawei.com
Tue Jun 20 12:07:50 CEST 2023
On 2023/6/9 19:10, Ferruh Yigit wrote:
> On 6/9/2023 10:03 AM, Jie Hai wrote:
>> Here's how the problem arises.
>> step1: Start the app.
>> dpdk-testpmd -a 0000:35:00.0 -l 0-3 -- -i --rxq=10 --txq=10
>>
>> step2: Perform the following steps and send traffic. As expected,
>> queue 7 does not send or receive packets, and other queues do.
>> port 0 rxq 7 stop
>> port 0 txq 7 stop
>> set fwd mac
>> start
>>
>> step3: Perform the following steps and send traffic. All queues
>> are expected to send and receive packets normally, but that's not
>> the case for queue 7.
>> stop
>> port stop all
>> port start all
>> start
>> show port xstats all
>>
>> In fact, only the value of rx_q7_packets for queue 7 is not zero,
>> which means queue 7 is enabled for the driver but is not involved
>> in packet receiving and forwarding by software. If we check queue
>> state by command 'show rxq info 0 7' and 'show txq info 0 7',
>> we see queue 7 is started as other queues are.
>> Rx queue state: started
>> Tx queue state: started
>> The queue 7 is started but cannot forward. That's the problem.
>>
>> We know that each stream has a read-only "disabled" field that
>> control if this stream should be used to forward. This field
>> depends on testpmd local queue state, please see
>> commit 3c4426db54fc ("app/testpmd: do not poll stopped queues").
>> DPDK framework maintains ethdev queue state that drivers reported,
>> which indicates the real state of queues.
>>
>> There are commands that update these two kind queue state such as
>> 'port X rxq|txq start|stop'. But these operations take effect only
>> in one stop-start round. In the following stop-start round, the
>> preceding operations do not take effect anymore. However, only
>> the ethdev queue state is updated, causing the testpmd and ethdev
>> state information to diverge and causing unexpected side effects
>> as above problem.
>>
>> There was a similar problem for the secondary process, please see
>> commit 5028f207a4fa ("app/testpmd: fix secondary process packet
>> forwarding").
>>
>> This patch applies its workaround with some difference to the
>> primary process. Not all PMDs implement rte_eth_rx_queue_info_get and
>> rte_eth_tx_queue_info_get, however they may support deferred_start
>> with primary process. To not break their behavior, retain the original
>> testpmd local queue state for those PMDs.
>>
>> Fixes: 3c4426db54fc ("app/testpmd: do not poll stopped queues")
>> Cc: stable at dpdk.org
>>
>> Signed-off-by: Jie Hai <haijie1 at huawei.com>
>>
>
> Patch looks good to me, but since it has potential side effects,
>
> Can some from test team verify following before continue:
> a) Secondary testpmd
> b) Deferred Queue
>
> Thanks,
> Ferruh
>
>
Hi Ferruh,
I tested them with hns3 driver. The results are the same before and
after the patch is applied. The results are as follows:
case1: Secondary testpmd
Action: Secondary testpmd stop a queue and primary testpmd start the queue.
Result: The queue can forward for both process.
case2:
Action: Set a queue with deferred_start on for a primary process.
Result: The queue cannot forward until deferred_start is off.
Thanks,
Jie Hai
>
> .
More information about the dev
mailing list