From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 644FB42D07; Tue, 20 Jun 2023 12:07:56 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E7E4A40EDF; Tue, 20 Jun 2023 12:07:55 +0200 (CEST) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 8F09A400D6 for ; Tue, 20 Jun 2023 12:07:53 +0200 (CEST) Received: from kwepemi500020.china.huawei.com (unknown [172.30.72.54]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Qlj3f6K3bzTlSg; Tue, 20 Jun 2023 18:07:10 +0800 (CST) Received: from [10.67.103.42] (10.67.103.42) by kwepemi500020.china.huawei.com (7.221.188.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 20 Jun 2023 18:07:50 +0800 Message-ID: <9a0a53e2-2566-f13a-96ce-3ec5b839bf81@huawei.com> Date: Tue, 20 Jun 2023 18:07:50 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Subject: Re: [PATCH v4] app/testpmd: fix primary process not polling all queues To: Ferruh Yigit , Aman Singh , Yuying Zhang , Anatoly Burakov , Matan Azrad , Dmitry Kozlyuk CC: , , References: <20230529022649.51425-1-haijie1@huawei.com> <20230609090340.3942-1-haijie1@huawei.com> From: Jie Hai In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.67.103.42] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemi500020.china.huawei.com (7.221.188.8) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org 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@dpdk.org >> >> Signed-off-by: Jie Hai >> > > 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 > > .