DPDK patches and discussions
 help / color / mirror / Atom feed
From: "lihuisong (C)" <lihuisong@huawei.com>
To: Stephen Hemminger <stephen@networkplumber.org>, <dev@dpdk.org>
Cc: <stable@dpdk.org>, Chas Williams <chas3@att.com>,
	"Min Hu (Connor)" <humin29@huawei.com>,
	Chengwen Feng <fengchengwen@huawei.com>,
	"Bruce Richardson" <bruce.richardson@intel.com>
Subject: Re: [PATCH] test/bonding: fix active backup rx test
Date: Fri, 13 Dec 2024 14:57:23 +0800	[thread overview]
Message-ID: <8e824f6a-b271-1b2d-9a27-aed5cd27cb8f@huawei.com> (raw)
In-Reply-To: <20241213015158.10174-1-stephen@networkplumber.org>

Hi Stephen,

This patch looks good to me.

But this test case still runs failure when I run "link_bonding_autotest" 
twice. like:
-->
...
EAL: Test assert configure_ethdev line 181 failed: rte_eth_dev_configure 
for port 7 failed
EAL: Test assert initialize_bonding_device_with_members line 1138 
failed: Failed to configure bonding port (7) in mode 3 with (4) members.
EAL: Test assert 
test_broadcast_verify_member_link_status_change_behaviour line 4060 
failed: Failed to initialise bonding device
  + TestCase [62] : 
test_broadcast_verify_member_link_status_change_behaviour failed
ETHDEV: Invalid port_id=7
EAL: Test assert configure_ethdev line 181 failed: rte_eth_dev_configure 
for port 7 failed
EAL: Test assert test_reconfigure_bonding_device line 4162 failed: 
failed to reconfigure bonding device
  + TestCase [63] : test_reconfigure_bonding_device failed
ETHDEV: Invalid port_id=7
  + TestCase [64] : test_close_bonding_device succeeded
ETHDEV: Invalid port_id=7
EAL: Test assert remove_members_and_stop_bonding_device line 659 failed: 
Failed to stop bonding port 7
  + ------------------------------------------------------- +
  + Test Suite Summary : Link Bonding Unit Test Suite
  + ------------------------------------------------------- +
  + Tests Total :       65
  + Tests Skipped :      0
  + Tests Executed :    65
  + Tests Unsupported:   0
  + Tests Passed :       5
  + Tests Failed :      60
  + ------------------------------------------------------- +
Test Failed


I guess the bonding use case needs to close all bonding devices.


/Huisong

在 2024/12/13 9:51, Stephen Hemminger 写道:
> The test had incorrect assumptions about how active backup
> should work. When in active backup mode, the secondary (not primary)
> ports should be ignored. The test was always broken since initially
> written but earlier bug was masking the part of the test which
> tested non-primary ports.
>
> Bugzilla ID: 1589
> Fixes: 112ce3917674 ("test/bonding: fix loop on members")
> Cc: stable@dpdk.org
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>   app/test/test_link_bonding.c | 68 +++++++++++++++++-------------------
>   1 file changed, 33 insertions(+), 35 deletions(-)
>
> diff --git a/app/test/test_link_bonding.c b/app/test/test_link_bonding.c
> index b752a5ecbf..512e79365f 100644
> --- a/app/test/test_link_bonding.c
> +++ b/app/test/test_link_bonding.c
> @@ -2246,49 +2246,47 @@ test_activebackup_rx_burst(void)
>   		virtual_ethdev_add_mbufs_to_rx_queue(test_params->member_port_ids[i],
>   				&gen_pkt_burst[0], burst_size);
>   
> +		/* Expect burst if this was the active port, zero otherwise */
> +		unsigned int rx_expect = (test_params->member_port_ids[i] == primary_port) ? burst_size : 0;
> +
>   		/* Call rx burst on bonding device */
> -		TEST_ASSERT_EQUAL(rte_eth_rx_burst(test_params->bonding_port_id, 0,
> -				&rx_pkt_burst[0], MAX_PKT_BURST), burst_size,
> -				"rte_eth_rx_burst failed");
> +		unsigned int rx_count = rte_eth_rx_burst(test_params->bonding_port_id, 0,
> +							 &rx_pkt_burst[0], MAX_PKT_BURST);
> +		TEST_ASSERT_EQUAL(rx_count, rx_expect,
> +				  "rte_eth_rx_burst (%u) not as expected (%u)",
> +				  rx_count, rx_expect);
>   
> -		if (test_params->member_port_ids[i] == primary_port) {
> -			/* Verify bonding device rx count */
> -			rte_eth_stats_get(test_params->bonding_port_id, &port_stats);
> -			TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size,
> -					"Bonding Port (%d) ipackets value (%u) not as expected (%d)",
> +		/* Verify bonding device rx count */
> +		rte_eth_stats_get(test_params->bonding_port_id, &port_stats);
> +		TEST_ASSERT_EQUAL(port_stats.ipackets, rx_expect,
> +				  "Bonding Port (%d) ipackets value (%u) not as expected (%u)",
>   					test_params->bonding_port_id,
> -					(unsigned int)port_stats.ipackets, burst_size);
> +				  (unsigned int)port_stats.ipackets, rx_expect);
>   
> -			/* Verify bonding member devices rx count */
> -			for (j = 0; j < test_params->bonding_member_count; j++) {
> -				rte_eth_stats_get(test_params->member_port_ids[j], &port_stats);
> -				if (i == j) {
> -					TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size,
> -							"Member Port (%d) ipackets value (%u) not as "
> -							"expected (%d)",
> -							test_params->member_port_ids[i],
> -							(unsigned int)port_stats.ipackets,
> -							burst_size);
> -				} else {
> -					TEST_ASSERT_EQUAL(port_stats.ipackets, 0,
> -							"Member Port (%d) ipackets value (%u) not as "
> -							"expected (%d)\n",
> -							test_params->member_port_ids[i],
> -							(unsigned int)port_stats.ipackets, 0);
> -				}
> -			}
> -		} else {
> -			for (j = 0; j < test_params->bonding_member_count; j++) {
> -				rte_eth_stats_get(test_params->member_port_ids[j], &port_stats);
> +		for (j = 0; j < test_params->bonding_member_count; j++) {
> +			rte_eth_stats_get(test_params->member_port_ids[j], &port_stats);
> +			if (i == j) {
> +				TEST_ASSERT_EQUAL(port_stats.ipackets, rx_expect,
> +					  "Member Port (%d) ipackets (%u) not as expected (%d)",
> +					  test_params->member_port_ids[i],
> +					  (unsigned int)port_stats.ipackets, rx_expect);
> +
> +				/* reset member device stats */
> +				rte_eth_stats_reset(test_params->member_port_ids[j]);
> +			} else {
>   				TEST_ASSERT_EQUAL(port_stats.ipackets, 0,
> -						"Member Port (%d) ipackets value (%u) not as expected "
> -						"(%d)", test_params->member_port_ids[i],
> -						(unsigned int)port_stats.ipackets, 0);
> +					  "Member Port (%d) ipackets (%u) not as expected (%d)",
> +					  test_params->member_port_ids[i],
> +					  (unsigned int)port_stats.ipackets, 0);
>   			}
>   		}
>   
> -		/* free mbufs */
> -		rte_pktmbuf_free_bulk(rx_pkt_burst, burst_size);
> +		/* extract packets queued to inactive member */
> +		if (rx_count == 0)
> +			rx_count = rte_eth_rx_burst(test_params->member_port_ids[i], 0,
> +						    rx_pkt_burst, MAX_PKT_BURST);
> +		if (rx_count > 0)
> +			rte_pktmbuf_free_bulk(rx_pkt_burst, rx_count);
>   
>   		/* reset bonding device stats */
>   		rte_eth_stats_reset(test_params->bonding_port_id);

  reply	other threads:[~2024-12-13  7:21 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-13  1:51 Stephen Hemminger
2024-12-13  6:57 ` lihuisong (C) [this message]
2024-12-13 16:56   ` Stephen Hemminger
2024-12-16  1:50     ` lihuisong (C)
2024-12-13 17:17 ` [PATCH v2] " Stephen Hemminger
2024-12-16  1:53   ` lihuisong (C)

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=8e824f6a-b271-1b2d-9a27-aed5cd27cb8f@huawei.com \
    --to=lihuisong@huawei.com \
    --cc=bruce.richardson@intel.com \
    --cc=chas3@att.com \
    --cc=dev@dpdk.org \
    --cc=fengchengwen@huawei.com \
    --cc=humin29@huawei.com \
    --cc=stable@dpdk.org \
    --cc=stephen@networkplumber.org \
    /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).