netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Giuseppe CAVALLARO <peppe.cavallaro@st.com>
To: Corentin Labbe <clabbe.montjoie@gmail.com>,
	<alexandre.torgue@st.com>, <netdev@vger.kernel.org>
Cc: <davem@davemloft.net>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 13/17] net: stmmac: Implement NAPI for TX
Date: Tue, 31 Jan 2017 11:28:03 +0100	[thread overview]
Message-ID: <cd8b200c-f419-80c3-714e-cb81a95da65c@st.com> (raw)
In-Reply-To: <20170131091152.13842-14-clabbe.montjoie@gmail.com>

On 1/31/2017 10:11 AM, Corentin Labbe wrote:
> The stmmac driver run TX completion under NAPI but without checking the
> work done by the TX completion function.
>
> This patch add work/budget to the TX completion function.
>
> The visible effect is that it keep the driver longer under NAPI and
> boost performance.
> Under dwmac-sun8i the iperf goes from 140Mbit/s to 500Mbit/s.
> Under dwmac-sunxi an iperf run use half less interrupts.

I think that this patch should be sent separately with more details
about the implementation you are adopting and results.

For example, in the timer callback you force 256 (it seems
DMA_TX_SIZE/2); do you think this should be tunable or fixed to
NAPI budget?

I'd like to understand if performance you get are for TCP traffic;
can you tell me what happens on unidirectional traffic?

Thx a lot for your effort, pls let me know

Regards
peppe

>
> Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> ---
>  drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 18 ++++++++++++++----
>  1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index 2df36bd..e53b727 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -1299,10 +1299,11 @@ static void stmmac_dma_operation_mode(struct stmmac_priv *priv)
>   * @priv: driver private structure
>   * Description: it reclaims the transmit resources after transmission completes.
>   */
> -static void stmmac_tx_clean(struct stmmac_priv *priv)
> +static int stmmac_tx_clean(struct stmmac_priv *priv, int budget)
>  {
>  	unsigned int bytes_compl = 0, pkts_compl = 0;
>  	unsigned int entry = priv->dirty_tx;
> +	int work = 0;
>
>  	netif_tx_lock(priv->dev);
>
> @@ -1369,6 +1370,9 @@ static void stmmac_tx_clean(struct stmmac_priv *priv)
>  		priv->hw->desc->release_tx_desc(p, priv->mode);
>
>  		entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE);
> +		work++;
> +		if (work >= budget)
> +			break;
>  	}
>  	priv->dirty_tx = entry;
>
> @@ -1386,6 +1390,11 @@ static void stmmac_tx_clean(struct stmmac_priv *priv)
>  		mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(eee_timer));
>  	}
>  	netif_tx_unlock(priv->dev);
> +
> +	if (work < budget)
> +		work = 0;
> +
> +	return work;
>  }
>
>  static inline void stmmac_enable_dma_irq(struct stmmac_priv *priv)
> @@ -1617,7 +1626,7 @@ static void stmmac_tx_timer(unsigned long data)
>  {
>  	struct stmmac_priv *priv = (struct stmmac_priv *)data;
>
> -	stmmac_tx_clean(priv);
> +	stmmac_tx_clean(priv, 256);
>  }
>
>  /**
> @@ -2657,9 +2666,10 @@ static int stmmac_poll(struct napi_struct *napi, int budget)
>  	int work_done = 0;
>
>  	priv->xstats.napi_poll++;
> -	stmmac_tx_clean(priv);
> +	work_done += stmmac_tx_clean(priv, budget);
>
> -	work_done = stmmac_rx(priv, budget);
> +	if (work_done < budget)
> +		work_done += stmmac_rx(priv, budget - work_done);
>  	if (work_done < budget) {
>  		napi_complete(napi);
>  		stmmac_enable_dma_irq(priv);
>

  reply	other threads:[~2017-01-31 10:28 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-31  9:11 [PATCH 00/17] net: stmmac: misc fix Corentin Labbe
2017-01-31  9:11 ` [PATCH 01/17] net: stmmac: fix the typo on MAC_RNABLE_RX Corentin Labbe
2017-01-31 10:03   ` Giuseppe CAVALLARO
2017-01-31  9:11 ` [PATCH 02/17] net: stmmac: Remove the bus_setup function pointer Corentin Labbe
2017-01-31 10:02   ` Giuseppe CAVALLARO
2017-01-31  9:11 ` [PATCH 03/17] net: stmmac: fix some typos in comments Corentin Labbe
2017-01-31 10:03   ` Giuseppe CAVALLARO
2017-01-31  9:11 ` [PATCH 04/17] net: stmmac: remove freesoftware address Corentin Labbe
2017-01-31  9:11 ` [PATCH 05/17] net: stmmac: remplace asm/io.h by linux/io.h Corentin Labbe
2017-01-31  9:11 ` [PATCH 06/17] net: stmmac: fix some code style problem Corentin Labbe
2017-01-31 10:05   ` Giuseppe CAVALLARO
2017-01-31  9:11 ` [PATCH 07/17] net: stmmac: replace stmmac_mdio_busy_wait by readl_poll_timeout Corentin Labbe
2017-01-31 10:13   ` Giuseppe CAVALLARO
2017-01-31 10:39     ` Corentin Labbe
2017-01-31 10:44       ` Giuseppe CAVALLARO
2017-01-31  9:11 ` [PATCH 08/17] net: stmmac: Use readl_poll_timeout Corentin Labbe
2017-01-31  9:11 ` [PATCH 09/17] net: stmmac: replace ENOSYS by EINVAL Corentin Labbe
2017-01-31 10:06   ` Giuseppe CAVALLARO
2017-01-31  9:11 ` [PATCH 10/17] net: stmmac: Correct the error message about invalid speed Corentin Labbe
2017-01-31 10:07   ` Giuseppe CAVALLARO
2017-01-31  9:11 ` [PATCH 11/17] net: stmmac: Rewrite two test against NULL value Corentin Labbe
2017-01-31 10:07   ` Giuseppe CAVALLARO
2017-01-31  9:11 ` [PATCH 12/17] net: stmmac: rename rx_crc to rx_crc_errors Corentin Labbe
2017-01-31 10:08   ` Giuseppe CAVALLARO
2017-01-31  9:11 ` [PATCH 13/17] net: stmmac: Implement NAPI for TX Corentin Labbe
2017-01-31 10:28   ` Giuseppe CAVALLARO [this message]
2017-01-31 13:38     ` Corentin Labbe
2017-02-01  4:12   ` David Miller
2017-02-03 13:41     ` Corentin Labbe
2017-02-03 15:15       ` David Miller
2017-02-03 15:58         ` Corentin Labbe
2017-01-31  9:11 ` [PATCH 14/17] net: stmmac: print phy information Corentin Labbe
2017-01-31 10:10   ` Giuseppe CAVALLARO
2017-02-03 13:16     ` Corentin Labbe
2017-01-31  9:11 ` [PATCH 15/17] net: stmmac: remove dead code in stmmac_tx_clean Corentin Labbe
2017-01-31 10:21   ` Giuseppe CAVALLARO
2017-01-31  9:11 ` [PATCH 16/17] net: stmmac: remove unused variable in sysfs_display_ring Corentin Labbe
2017-01-31 10:11   ` Giuseppe CAVALLARO
2017-01-31  9:11 ` [PATCH 17/17] net: stmmac: replace unsigned by u32 Corentin Labbe
2017-01-31 10:12   ` Giuseppe CAVALLARO
2017-01-31 10:00 ` [PATCH 00/17] net: stmmac: misc fix Giuseppe CAVALLARO
2017-01-31 10:23   ` Joao Pinto
2017-01-31 10:33     ` Giuseppe CAVALLARO
2017-01-31 10:37       ` Joao Pinto

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=cd8b200c-f419-80c3-714e-cb81a95da65c@st.com \
    --to=peppe.cavallaro@st.com \
    --cc=alexandre.torgue@st.com \
    --cc=clabbe.montjoie@gmail.com \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.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).