Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/807206/?format=api
{ "id": 807206, "url": "http://patchwork.ozlabs.org/api/patches/807206/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20170829093242.41026-13-alice.michael@intel.com/", "project": { "id": 46, "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api", "name": "Intel Wired Ethernet development", "link_name": "intel-wired-lan", "list_id": "intel-wired-lan.osuosl.org", "list_email": "intel-wired-lan@osuosl.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170829093242.41026-13-alice.michael@intel.com>", "list_archive_url": null, "date": "2017-08-29T09:32:42", "name": "[next,S79-V2,13/13] i40e: ignore skb->xmit_more when deciding to set RS bit", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "283265cd91f77e4afcd2d01a7a927fd289e7705b", "submitter": { "id": 71123, "url": "http://patchwork.ozlabs.org/api/people/71123/?format=api", "name": "Michael, Alice", "email": "alice.michael@intel.com" }, "delegate": { "id": 68, "url": "http://patchwork.ozlabs.org/api/users/68/?format=api", "username": "jtkirshe", "first_name": "Jeff", "last_name": "Kirsher", "email": "jeffrey.t.kirsher@intel.com" }, "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20170829093242.41026-13-alice.michael@intel.com/mbox/", "series": [ { "id": 423, "url": "http://patchwork.ozlabs.org/api/series/423/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=423", "date": "2017-08-29T09:32:31", "name": "[next,S79-V2,01/13] i40e: add private flag to control source pruning", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/423/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/807206/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/807206/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<intel-wired-lan-bounces@osuosl.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Delivered-To": [ "patchwork-incoming@bilbo.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Authentication-Results": "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=osuosl.org\n\t(client-ip=140.211.166.138; helo=whitealder.osuosl.org;\n\tenvelope-from=intel-wired-lan-bounces@osuosl.org;\n\treceiver=<UNKNOWN>)", "Received": [ "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xhbSS0F31z9t2Q\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 30 Aug 2017 03:37:43 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 706FE885D0;\n\tTue, 29 Aug 2017 17:37:42 +0000 (UTC)", "from whitealder.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id bxis1b97wtAi; Tue, 29 Aug 2017 17:37:41 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id A21F3885FC;\n\tTue, 29 Aug 2017 17:37:40 +0000 (UTC)", "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\tby ash.osuosl.org (Postfix) with ESMTP id B042B1C1F4F\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 29 Aug 2017 17:37:35 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id A9ACF889CA\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 29 Aug 2017 17:37:35 +0000 (UTC)", "from hemlock.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id eduLaLWROk9O for <intel-wired-lan@lists.osuosl.org>;\n\tTue, 29 Aug 2017 17:37:35 +0000 (UTC)", "from mga07.intel.com (mga07.intel.com [134.134.136.100])\n\tby hemlock.osuosl.org (Postfix) with ESMTPS id 19514889C9\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 29 Aug 2017 17:37:35 +0000 (UTC)", "from orsmga003.jf.intel.com ([10.7.209.27])\n\tby orsmga105.jf.intel.com with ESMTP; 29 Aug 2017 10:37:33 -0700", "from unknown (HELO localhost.jf.intel.com) ([10.166.16.121])\n\tby orsmga003.jf.intel.com with ESMTP; 29 Aug 2017 10:37:33 -0700" ], "X-Virus-Scanned": [ "amavisd-new at osuosl.org", "amavisd-new at osuosl.org" ], "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6", "X-ExtLoop1": "1", "X-IronPort-AV": "E=Sophos; i=\"5.41,445,1498546800\"; d=\"scan'208\";\n\ta=\"1008934138\"", "From": "Alice Michael <alice.michael@intel.com>", "To": "alice.michael@intel.com,\n\tintel-wired-lan@lists.osuosl.org", "Date": "Tue, 29 Aug 2017 05:32:42 -0400", "Message-Id": "<20170829093242.41026-13-alice.michael@intel.com>", "X-Mailer": "git-send-email 2.9.4", "In-Reply-To": "<20170829093242.41026-1-alice.michael@intel.com>", "References": "<20170829093242.41026-1-alice.michael@intel.com>", "Subject": "[Intel-wired-lan] [next PATCH S79-V2 13/13] i40e: ignore\n\tskb->xmit_more when deciding to set RS bit", "X-BeenThere": "intel-wired-lan@osuosl.org", "X-Mailman-Version": "2.1.18-1", "Precedence": "list", "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.osuosl.org>", "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>", "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>", "List-Post": "<mailto:intel-wired-lan@osuosl.org>", "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>", "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "intel-wired-lan-bounces@osuosl.org", "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>" }, "content": "From: Jacob Keller <jacob.e.keller@intel.com>\n\nSince commit 6a7fded776a7 (\"i40e: Fix RS bit update in Tx path and\ndisable force WB workaround\") we've tried to \"optimize\" setting the\nRS bit based around skb->xmit_more. This same logic was refactored\nin commit 1dc8b538795f (\"i40e: Reorder logic for coalescing RS bits\"),\nbut ultimately was not functionally changed.\n\nUsing skb->xmit_more in this way is incorrect, because in certain\ncircumstances we may see a large number of skbs in sequence with\nxmit_more set. This leads to a performance loss as the hardware does not\nwriteback anything for those packets, which delays the time it takes for\nus to respond to the stack transmit requests. This significantly impacts\nUDP performance, especially when layered with multiple devices, such as\nbonding, vlans, and vnet setups.\n\nThis was not noticed until now because it is difficult to create a setup\nwhich reproduces the issue. It was discovered in a UDP_STREAM test in\na VM, connected using a vnet device to a bridge, which is connected to\na bonded pair of X710 ports in active-backup mode with a VLAN. These\nlayered devices seem to compound the number of skbs transmitted at once\nby the qdisc. Additionally, the problem can be masked by reducing the\nITR value.\n\nSince the original commit does not provide strong justification for this\nRS bit \"optimization\", revert to the previous behavior of setting the RS\nbit every 4th packet.\n\nSigned-off-by: Jacob Keller <jacob.e.keller@intel.com>\n---\nTesting-hints:\n This may not be noticeable in many test setups. This was discovered by\n attaching 2 X710 ports to a bond, adding a vlan device on top of the\n bond, connecting this to a bridge, and using a vnet device in a VM\n running netperf UDP_STREAM test.\n\n See also RedHat BZ #1384558\n\n drivers/net/ethernet/intel/i40e/i40e_txrx.c | 34 ++++-------------------------\n 1 file changed, 4 insertions(+), 30 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\nindex 1b99167..53e1998 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n@@ -3166,38 +3166,12 @@ static inline int i40e_tx_map(struct i40e_ring *tx_ring, struct sk_buff *skb,\n \t/* write last descriptor with EOP bit */\n \ttd_cmd |= I40E_TX_DESC_CMD_EOP;\n \n-\t/* We can OR these values together as they both are checked against\n-\t * 4 below and at this point desc_count will be used as a boolean value\n-\t * after this if/else block.\n+\t/* We OR these values together to check both against 4 (WB_STRIDE)\n+\t * below. This is safe since we don't re-use desc_count afterwards.\n \t */\n \tdesc_count |= ++tx_ring->packet_stride;\n \n-\t/* Algorithm to optimize tail and RS bit setting:\n-\t * if queue is stopped\n-\t *\tmark RS bit\n-\t *\treset packet counter\n-\t * else if xmit_more is supported and is true\n-\t *\tadvance packet counter to 4\n-\t *\treset desc_count to 0\n-\t *\n-\t * if desc_count >= 4\n-\t *\tmark RS bit\n-\t *\treset packet counter\n-\t * if desc_count > 0\n-\t *\tupdate tail\n-\t *\n-\t * Note: If there are less than 4 descriptors\n-\t * pending and interrupts were disabled the service task will\n-\t * trigger a force WB.\n-\t */\n-\tif (netif_xmit_stopped(txring_txq(tx_ring))) {\n-\t\tgoto do_rs;\n-\t} else if (skb->xmit_more) {\n-\t\t/* set stride to arm on next packet and reset desc_count */\n-\t\ttx_ring->packet_stride = WB_STRIDE;\n-\t\tdesc_count = 0;\n-\t} else if (desc_count >= WB_STRIDE) {\n-do_rs:\n+\tif (desc_count >= WB_STRIDE) {\n \t\t/* write last descriptor with RS bit set */\n \t\ttd_cmd |= I40E_TX_DESC_CMD_RS;\n \t\ttx_ring->packet_stride = 0;\n@@ -3218,7 +3192,7 @@ static inline int i40e_tx_map(struct i40e_ring *tx_ring, struct sk_buff *skb,\n \tfirst->next_to_watch = tx_desc;\n \n \t/* notify HW of packet */\n-\tif (desc_count) {\n+\tif (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) {\n \t\twritel(i, tx_ring->tail);\n \n \t\t/* we need this if more than one processor can write to our tail\n", "prefixes": [ "next", "S79-V2", "13/13" ] }