Return-Path: tariqt@mellanox.com Received: from zmta04.collab.prod.int.phx2.redhat.com (LHLO zmta04.collab.prod.int.phx2.redhat.com) (10.5.81.11) by zmail22.collab.prod.int.phx2.redhat.com with LMTP; Wed, 17 Aug 2016 05:21:47 -0400 (EDT) Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by zmta04.collab.prod.int.phx2.redhat.com (Postfix) with ESMTP id B23B4DA128 for ; Wed, 17 Aug 2016 05:21:47 -0400 (EDT) Received: from mx1.redhat.com (ext-mx01.extmail.prod.ext.phx2.redhat.com [10.5.110.25]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u7H9LlWp015796 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Wed, 17 Aug 2016 05:21:47 -0400 Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by mx1.redhat.com (Postfix) with ESMTP id B3ADB8122E for ; Wed, 17 Aug 2016 09:21:45 +0000 (UTC) Received: from Internal Mail-Server by MTLPINE1 (envelope-from tariqt@mellanox.com) with ESMTPS (AES256-SHA encrypted); 17 Aug 2016 12:15:03 +0300 Received: from dev-l-vrt-206.mtl.labs.mlnx (dev-l-vrt-206.mtl.labs.mlnx [10.134.206.1]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id u7H9F31D010642; Wed, 17 Aug 2016 12:15:03 +0300 From: Tariq Toukan To: Jesper Dangaard Brouer , Achiad Shochat , Rana Shahout , Saeed Mahameed Subject: [PATCH] net/mlx5e: force tx skb bulking Date: Wed, 17 Aug 2016 12:14:51 +0300 Message-Id: <1471425291-1782-1-git-send-email-tariqt@mellanox.com> X-Greylist: Delayed for 00:06:41 by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 17 Aug 2016 09:21:46 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 17 Aug 2016 09:21:46 +0000 (UTC) for IP:'193.47.165.129' DOMAIN:'mail-il-dmz.mellanox.com' HELO:'mellanox.co.il' FROM:'tariqt@mellanox.com' RCPT:'' X-RedHat-Spam-Score: 0.251 (BAYES_50,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS,UNPARSEABLE_RELAY) 193.47.165.129 mail-il-dmz.mellanox.com 193.47.165.129 mail-il-dmz.mellanox.com X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Scanned-By: MIMEDefang 2.78 on 10.5.110.25 From: Achiad Shochat To improve SW message rate in case HW is faster. Heuristically detect cases where the message rate is high and there is still no skb bulking and if so, stops the txq for a while trying to force the bulking. Change-Id: Icb925135e69b030943cb4666117c47d1cc04da97 --- drivers/net/ethernet/mellanox/mlx5/core/en.h | 5 +++++ drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h index 74edd01..78a0661 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h @@ -394,6 +394,10 @@ enum { MLX5E_SQ_STATE_TX_TIMEOUT, }; +enum { + MLX5E_SQ_STOP_ONCE, +}; + struct mlx5e_ico_wqe_info { u8 opcode; u8 num_wqebbs; @@ -403,6 +407,7 @@ struct mlx5e_sq { /* data path */ /* dirtied @completion */ + unsigned long flags; u16 cc; u32 dma_fifo_cc; diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c index e073bf59..034eef0 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c @@ -351,8 +351,10 @@ static netdev_tx_t mlx5e_sq_xmit(struct mlx5e_sq *sq, struct sk_buff *skb) if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; - if (unlikely(!mlx5e_sq_has_room_for(sq, MLX5E_SQ_STOP_ROOM))) { + if (test_bit(MLX5E_SQ_STOP_ONCE, &sq->flags) || + unlikely(!mlx5e_sq_has_room_for(sq, MLX5E_SQ_STOP_ROOM))) { netif_tx_stop_queue(sq->txq); + clear_bit(MLX5E_SQ_STOP_ONCE, &sq->flags); sq->stats.stopped++; } @@ -429,6 +431,7 @@ bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget) u32 dma_fifo_cc; u32 nbytes; u16 npkts; + u16 ncqes; u16 sqcc; int i; @@ -439,6 +442,7 @@ bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget) npkts = 0; nbytes = 0; + ncqes = 0; /* sq->cc must be updated only after mlx5_cqwq_update_db_record(), * otherwise a cq overrun may occur @@ -458,6 +462,7 @@ bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget) break; mlx5_cqwq_pop(&cq->wq); + ncqes++; wqe_counter = be16_to_cpu(cqe->wqe_counter); @@ -508,6 +513,8 @@ bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget) sq->dma_fifo_cc = dma_fifo_cc; sq->cc = sqcc; + if ((npkts > 7) && ((npkts >> (ilog2(ncqes))) < 8)) + set_bit(MLX5E_SQ_STOP_ONCE, &sq->flags); netdev_tx_completed_queue(sq->txq, npkts, nbytes); -- 1.8.3.1