From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from nbfkord-smmo01.seg.att.com (nbfkord-smmo01.seg.att.com [209.65.160.76]) by dpdk.org (Postfix) with ESMTP id 29F193989 for ; Thu, 15 Dec 2016 13:52:22 +0100 (CET) Received: from unknown [12.187.104.26] (EHLO nbfkord-smmo01.seg.att.com) by nbfkord-smmo01.seg.att.com(mxl_mta-7.2.4-7) with ESMTP id 60292585.2b9fc623c940.721189.00-2482.1504377.nbfkord-smmo01.seg.att.com (envelope-from ); Thu, 15 Dec 2016 12:52:22 +0000 (UTC) X-MXL-Hash: 585292063a21fbf7-61a2cd2ecd83aa518a9ec3c4f6ddb43aa79bf5cf Received: from unknown [12.187.104.26] by nbfkord-smmo01.seg.att.com(mxl_mta-7.2.4-7) with SMTP id 30292585.0.721151.00-2378.1504331.nbfkord-smmo01.seg.att.com (envelope-from ); Thu, 15 Dec 2016 12:52:21 +0000 (UTC) X-MXL-Hash: 5852920556c039cd-9a251bf194ced4ea578d47f656b030fb60f31292 Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1044.25; Thu, 15 Dec 2016 04:52:06 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1044.25 via Frontend Transport; Thu, 15 Dec 2016 04:52:05 -0800 Received: from uklogin.uk.solarflarecom.com (uklogin.uk.solarflarecom.com [10.17.10.10]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id uBFCq4ZS006419; Thu, 15 Dec 2016 12:52:04 GMT Received: from uklogin.uk.solarflarecom.com (localhost.localdomain [127.0.0.1]) by uklogin.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id uBFCpcev010431; Thu, 15 Dec 2016 12:52:04 GMT From: Andrew Rybchenko To: CC: , Ivan Malov Date: Thu, 15 Dec 2016 12:51:13 +0000 Message-ID: <1481806283-10387-23-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.2.3 In-Reply-To: <1481806283-10387-1-git-send-email-arybchenko@solarflare.com> References: <1480664691-26561-1-git-send-email-arybchenko@solarflare.com> <1481806283-10387-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 Content-Type: text/plain X-AnalysisOut: [v=2.1 cv=I8xjMYUg c=1 sm=1 tr=0 a=8BlWFWvVlq5taO8ncb8nKg==] X-AnalysisOut: [:17 a=n5n_aSjo0skA:10 a=pK7X0mNQAAAA:8 a=zRKbQ67AAAAA:8 a=] X-AnalysisOut: [iWIMl713e92wUrJzziAA:9 a=5HA-qpC1VU4iIGLgRoNS:22 a=PA03WX8] X-AnalysisOut: [tBzeizutn5_OT:22] X-Spam: [F=0.3214581036; CM=0.500; S=0.321(2015072901)] X-MAIL-FROM: X-SOURCE-IP: [12.187.104.26] Subject: [dpdk-dev] [PATCH v2 22/32] net/sfc: support Tx free threshold X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Dec 2016 12:52:22 -0000 From: Ivan Malov Signed-off-by: Ivan Malov Signed-off-by: Andrew Rybchenko Reviewed-by: Andrew Lee Reviewed-by: Robert Stonehouse --- drivers/net/sfc/sfc_ethdev.c | 1 + drivers/net/sfc/sfc_tweak.h | 3 +++ drivers/net/sfc/sfc_tx.c | 14 ++++++++------ drivers/net/sfc/sfc_tx.h | 10 +--------- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 73e8fe2..5d0d774 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -864,6 +864,7 @@ sfc_tx_queue_info_get(struct rte_eth_dev *dev, uint16_t tx_queue_id, memset(qinfo, 0, sizeof(*qinfo)); qinfo->conf.txq_flags = txq_info->txq->flags; + qinfo->conf.tx_free_thresh = txq_info->txq->free_thresh; qinfo->nb_desc = txq_info->entries; sfc_adapter_unlock(sa); diff --git a/drivers/net/sfc/sfc_tweak.h b/drivers/net/sfc/sfc_tweak.h index 8a60f35..be39a5e 100644 --- a/drivers/net/sfc/sfc_tweak.h +++ b/drivers/net/sfc/sfc_tweak.h @@ -48,4 +48,7 @@ */ #define SFC_TX_XMIT_PKTS_REAP_AT_LEAST_ONCE 0 +/** Default free threshold follows recommendations from DPDK documentation */ +#define SFC_TX_DEFAULT_FREE_THRESH 32 + #endif /* _SFC_TWEAK_H_ */ diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index a240610..13b24f7 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -54,7 +54,7 @@ #define SFC_TX_QFLUSH_POLL_ATTEMPTS (2000) static int -sfc_tx_qcheck_conf(struct sfc_adapter *sa, +sfc_tx_qcheck_conf(struct sfc_adapter *sa, uint16_t nb_tx_desc, const struct rte_eth_txconf *tx_conf) { unsigned int flags = tx_conf->txq_flags; @@ -65,9 +65,10 @@ sfc_tx_qcheck_conf(struct sfc_adapter *sa, rc = EINVAL; } - if (tx_conf->tx_free_thresh != 0) { + if (tx_conf->tx_free_thresh > EFX_TXQ_LIMIT(nb_tx_desc)) { sfc_err(sa, - "setting explicit TX free threshold is not supported"); + "TxQ free threshold too large: %u vs maximum %u", + tx_conf->tx_free_thresh, EFX_TXQ_LIMIT(nb_tx_desc)); rc = EINVAL; } @@ -147,7 +148,7 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, sfc_log_init(sa, "TxQ = %u", sw_index); - rc = sfc_tx_qcheck_conf(sa, tx_conf); + rc = sfc_tx_qcheck_conf(sa, nb_tx_desc, tx_conf); if (rc != 0) goto fail_bad_conf; @@ -188,6 +189,8 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index, txq->state = SFC_TXQ_INITIALIZED; txq->ptr_mask = txq_info->entries - 1; + txq->free_thresh = (tx_conf->tx_free_thresh) ? tx_conf->tx_free_thresh : + SFC_TX_DEFAULT_FREE_THRESH; txq->hw_index = sw_index; txq->flags = tx_conf->txq_flags; txq->evq = evq; @@ -537,8 +540,7 @@ sfc_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) unsigned int pkts_sent = 0; efx_desc_t *pend = &txq->pend_desc[0]; const unsigned int hard_max_fill = EFX_TXQ_LIMIT(txq->ptr_mask + 1); - const unsigned int soft_max_fill = hard_max_fill - - SFC_TX_MAX_PKT_DESC; + const unsigned int soft_max_fill = hard_max_fill - txq->free_thresh; unsigned int fill_level = added - txq->completed; boolean_t reap_done; int rc __rte_unused; diff --git a/drivers/net/sfc/sfc_tx.h b/drivers/net/sfc/sfc_tx.h index fe2736b..f9eecc0 100644 --- a/drivers/net/sfc/sfc_tx.h +++ b/drivers/net/sfc/sfc_tx.h @@ -40,15 +40,6 @@ extern "C" { #endif /** - * Estimated maximum number of segments that transmit packet consists of; - * it is determined with respect to the expectation of a packet to consist - * of a header plus a couple of data segments one of those crossing 4K page; - * it is used by transmit path to avoid redundant reaping and, thus, - * to avoid increase of latency - */ -#define SFC_TX_MAX_PKT_DESC 4 - -/** * A segment must not cross 4K boundary * (this is a requirement of NIC TX descriptors) */ @@ -85,6 +76,7 @@ struct sfc_txq { unsigned int added; unsigned int pending; unsigned int completed; + unsigned int free_thresh; unsigned int hw_index; unsigned int flags; -- 2.5.5