From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <3chas3@gmail.com> Received: from mail-qt1-f193.google.com (mail-qt1-f193.google.com [209.85.160.193]) by dpdk.org (Postfix) with ESMTP id 81FFC2C28 for ; Sun, 7 Oct 2018 22:22:16 +0200 (CEST) Received: by mail-qt1-f193.google.com with SMTP id b4-v6so10965854qtc.7 for ; Sun, 07 Oct 2018 13:22:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=z3XwTdepqMdWbRBIWlSzHaLwXNFhMQndtDtdaunFJJ8=; b=g9ldsLQXJkbjT+6x6ezqvQXeJqb0WBavySZnCLSyhjuz/PjEmzE9XFslTYpkzC/eIF bYY4V8FPKKyHkmWGaLrLeCE8Ja32D2qXWBEAE4nNPJr+eVNBzdvfZWJdkTLg3FduNjE4 cXtadq9PppfeU/YeDJc9LCx1XdYhkT8x14EUsMxwwP+7jvcFsO18lCnzt2W9aLpfC3Np 3oSb1AxtavxjRD8i9M8uf6I9xOXVd52UQ27w2KuHksyoh4Fy5N9IgYCg/b8vWeOFD6Kn onwVNa7NxYZLyXnD3AE6KJ/WKUNElcW3uOw61oOnMxAAsWgg2XTgcg4arwu5kO5jTNqO YZcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=z3XwTdepqMdWbRBIWlSzHaLwXNFhMQndtDtdaunFJJ8=; b=DZWMB/Mq9z52vOJSo1Z4KAMrv5C15+O072FnDoGubs8tg+gqd/zSgM/oWap1ByGuvg 6NzsQGOZ3Kmb5Urfu+RbfjDtnca9QY+c8s207WOHRmG/TspPh51DdQrxoKy9p9ICAexg e1gRo+9FuPo8hb7/4gRKGwBpIqd8C3qTlWDjkd9deWq1wcilyzHcKMHDMx7PW3eYfm32 4Eba+TyB3IO1DBm8Q58UojEKmUn5FXGPMJ6wUWzA3wNusgyoKvzRmXSm1Xaj1Jqpr8zJ cZOO0hj84niziMX51NIKlS0Aa0RuMExs4bbPB9eoH8DB0/Vd2qIHJXFsPQv9lBp8MwbC zBCQ== X-Gm-Message-State: ABuFfoj9OlP8XWQN6JCnqfuJ/1n+QKoHWo/jIYP3C6FV+ay4/3+sBvOR BlE+rpjzoGPaH2Cis8ks2ft7eFTq X-Google-Smtp-Source: ACcGV63D1dGcvnOu+jhO7Fp3XCcUXZ3HPRhi+Oj6Be0TCX1GxgxOIoSJtOhV5pFqFOy/UqzqEsM4lA== X-Received: by 2002:a0c:e9ce:: with SMTP id q14-v6mr16693181qvo.144.1538943735795; Sun, 07 Oct 2018 13:22:15 -0700 (PDT) Received: from monolith.fios-router.home (pool-96-255-82-34.washdc.fios.verizon.net. [96.255.82.34]) by smtp.gmail.com with ESMTPSA id a72-v6sm6962406qkc.19.2018.10.07.13.22.15 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 07 Oct 2018 13:22:15 -0700 (PDT) From: Chas Williams <3chas3@gmail.com> To: stable@dpdk.org Cc: bluca@debian.org, Chas Williams Date: Sun, 7 Oct 2018 16:22:02 -0400 Message-Id: <20181007202202.7648-3-3chas3@gmail.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20181007202202.7648-1-3chas3@gmail.com> References: <20181007202202.7648-1-3chas3@gmail.com> Subject: [dpdk-stable] [PATCH 16.11 2/2] net/bonding: fix Rx slave fairness X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Oct 2018 20:22:16 -0000 From: Chas Williams [ upstream commit e1110e97764873de0af28e6fa11dcd9c170d4e53 ] Some PMDs, especially ones with vector receives, require a minimum number of receive buffers in order to receive any packets. If the first slave read leaves less than this number available, a read from the next slave may return 0 implying that the slave doesn't have any packets which results in skipping over that slave as the next active slave. To fix this, implement round robin for the slaves during receive that is only advanced to the next slave at the end of each receive burst. This is also done to provide some additional fairness in processing in other bonding RX burst routines as well. Fixes: 2efb58cbab6e ("bond: new link bonding library") Cc: stable@dpdk.org Signed-off-by: Chas Williams Acked-by: Luca Boccassi Acked-by: Matan Azrad --- drivers/net/bonding/rte_eth_bond_pmd.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 15e893240..87a247de3 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -83,28 +83,34 @@ bond_ethdev_rx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) { struct bond_dev_private *internals; - uint16_t num_rx_slave = 0; uint16_t num_rx_total = 0; - + uint16_t slave_count; + uint16_t active_slave; int i; /* Cast to structure, containing bonded device's port id and queue id */ struct bond_rx_queue *bd_rx_q = (struct bond_rx_queue *)queue; - internals = bd_rx_q->dev_private; + slave_count = internals->active_slave_count; + active_slave = internals->active_slave; + for (i = 0; i < slave_count && nb_pkts; i++) { + uint16_t num_rx_slave; - for (i = 0; i < internals->active_slave_count && nb_pkts; i++) { /* Offset of pointer to *bufs increases as packets are received * from other slaves */ - num_rx_slave = rte_eth_rx_burst(internals->active_slaves[i], - bd_rx_q->queue_id, bufs + num_rx_total, nb_pkts); - if (num_rx_slave) { - num_rx_total += num_rx_slave; - nb_pkts -= num_rx_slave; - } + num_rx_slave = + rte_eth_rx_burst(internals->active_slaves[active_slave], + bd_rx_q->queue_id, + bufs + num_rx_total, nb_pkts); + num_rx_total += num_rx_slave; + nb_pkts -= num_rx_slave; + if (++active_slave == slave_count) + active_slave = 0; } + if (++internals->active_slave == slave_count) + internals->active_slave = 0; return num_rx_total; } @@ -212,7 +218,9 @@ bond_ethdev_rx_burst_8023ad(void *queue, struct rte_mbuf **bufs, idx = 0; } - internals->active_slave = idx; + if (++internals->active_slave == slave_count) + internals->active_slave = 0; + return num_rx_total; } -- 2.14.4