Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp2594017pxb; Mon, 19 Apr 2021 09:09:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz1t7iMYWv0rQ2xmNBzgccJ/6fp1yLYnlwSslpJZkAmOjYUsKGn6Ji4Xye/TFOQgHP0I4NC X-Received: by 2002:a17:906:c1c5:: with SMTP id bw5mr1452469ejb.510.1618848542507; Mon, 19 Apr 2021 09:09:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618848542; cv=none; d=google.com; s=arc-20160816; b=zcZzJ9vPiwlLsZ4ke+Nm+EunKYzGfk5c1LapJ8UBhCmBYeofHKYSHEUhx5A0bCj8Mw 847Hg62wQrH8JErXksphcLTXkJpAZfIhRAlLJoH5AOn0NKd7Sc2LCNAWFofcRJ0h6Wl9 mZDcRlXaAlFXhefnaLZteruHb9hxi80POCe7U3Y8wPnsOgW6jldiDV2+Zmu/j5/tRlmt AIcdhD5q4XZ3uWH05CfiOmWbV7TbkyiUx5tpAc2x5p5c8xc5s3y+YKA7yIaafuJXv6SQ vnI/6rCZBjhcep/13PR8bqa+6T1w+qy9F5AX07IkYZWJ2f/fWv3sP15cW3l7co0eCBfa cg3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=wQ8zsjw9RakTmQFqabWmeLGa9auX5RgClmFxLjg4Zwc=; b=WwUfnSw++rLNNjXwxaJH+oBxPF5mLlvmuF5/iSVpCPjvE5a/7Rr5oljFFAD2hZsGNa 6+JDGAZjCQXiQPMYA5Iyhbub/jAKD5wV3ObU4jxdF30xoEWQ2h0iwQ44XwLopy2UxS+O NDUtP4bw7mRZeXwEYU6mnfY9s0llUytgQhBzrS4ZuZHa9NTsORgIxzofkryOqND67l4p jNtXDlUU41EXHpHJu1ekr0t29hm7jQpIZQRLdTthyliqAMLHarc1SU3VevKViTB1VqgR wngl3nX1yCBE0UIivikedD6+pni2uZllD1eT3BGmK9k0ppWoh49EQdg1mni6TCmbOLWT heIA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id nd37si10245421ejc.708.2021.04.19.09.08.39; Mon, 19 Apr 2021 09:09:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240996AbhDSOfk (ORCPT + 99 others); Mon, 19 Apr 2021 10:35:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47738 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239845AbhDSOfe (ORCPT ); Mon, 19 Apr 2021 10:35:34 -0400 Received: from plekste.mt.lv (bute.mt.lv [IPv6:2a02:610:7501:2000::195]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 10AA3C061761; Mon, 19 Apr 2021 07:35:03 -0700 (PDT) Received: from [2a02:610:7501:feff:1ccf:41ff:fe50:18b9] (helo=localhost.localdomain) by plekste.mt.lv with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1lYUzJ-0000xj-1T; Mon, 19 Apr 2021 17:34:57 +0300 From: Gatis Peisenieks To: chris.snook@gmail.com, davem@davemloft.net, kuba@kernel.org, hkallweit1@gmail.com, jesse.brandeburg@intel.com, dchickles@marvell.com, tully@mikrotik.com, eric.dumazet@gmail.com Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Gatis Peisenieks Subject: [PATCH net-next 2/4] atl1c: improve performance by avoiding unnecessary pcie writes on xmit Date: Mon, 19 Apr 2021 17:34:47 +0300 Message-Id: <20210419143449.751852-3-gatis@mikrotik.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210419143449.751852-1-gatis@mikrotik.com> References: <20210419143449.751852-1-gatis@mikrotik.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The kernel has xmit_more facility that hints the networking driver xmit path about whether more packets are coming soon. This information can be used to avoid unnecessary expensive PCIe transaction per tx packet at a slight increase in latency. Max TX pps on Mikrotik 10/25G NIC in a Threadripper 3960X system improved from 1150Kpps to 1700Kpps. Signed-off-by: Gatis Peisenieks --- drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c index 2e11eb07b0a3..8b097964a035 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c @@ -2211,8 +2211,8 @@ static int atl1c_tx_map(struct atl1c_adapter *adapter, return -1; } -static void atl1c_tx_queue(struct atl1c_adapter *adapter, struct sk_buff *skb, - struct atl1c_tpd_desc *tpd, enum atl1c_trans_queue type) +static void atl1c_tx_queue(struct atl1c_adapter *adapter, + enum atl1c_trans_queue type) { struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; u16 reg; @@ -2238,6 +2238,7 @@ static netdev_tx_t atl1c_xmit_frame(struct sk_buff *skb, if (atl1c_tpd_avail(adapter, type) < tpd_req) { /* no enough descriptor, just stop queue */ + atl1c_tx_queue(adapter, type); netif_stop_queue(netdev); return NETDEV_TX_BUSY; } @@ -2246,6 +2247,7 @@ static netdev_tx_t atl1c_xmit_frame(struct sk_buff *skb, /* do TSO and check sum */ if (atl1c_tso_csum(adapter, skb, &tpd, type) != 0) { + atl1c_tx_queue(adapter, type); dev_kfree_skb_any(skb); return NETDEV_TX_OK; } @@ -2270,8 +2272,11 @@ static netdev_tx_t atl1c_xmit_frame(struct sk_buff *skb, atl1c_tx_rollback(adapter, tpd, type); dev_kfree_skb_any(skb); } else { - netdev_sent_queue(adapter->netdev, skb->len); - atl1c_tx_queue(adapter, skb, tpd, type); + bool more = netdev_xmit_more(); + + __netdev_sent_queue(adapter->netdev, skb->len, more); + if (!more) + atl1c_tx_queue(adapter, type); } return NETDEV_TX_OK; -- 2.31.1