Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/788789/?format=api
{ "id": 788789, "url": "http://patchwork.ozlabs.org/api/patches/788789/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20170714131019.52530-6-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": "<20170714131019.52530-6-alice.michael@intel.com>", "list_archive_url": null, "date": "2017-07-14T13:10:12", "name": "[next,S76-V2,06/13] i40e/i40evf: remove ULTRA latency mode", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "3f657660de09f1b8a8e98f6d678ecfd259ccc758", "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/20170714131019.52530-6-alice.michael@intel.com/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/788789/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/788789/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" ], "Received": [ "from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\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 3x8QRl63Vcz9s7F\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 15 Jul 2017 07:14:27 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 664848844A;\n\tFri, 14 Jul 2017 21:14:26 +0000 (UTC)", "from fraxinus.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id Lo8Dk13pyY3g; Fri, 14 Jul 2017 21:14:24 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 2C44088428;\n\tFri, 14 Jul 2017 21:14:24 +0000 (UTC)", "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\tby ash.osuosl.org (Postfix) with ESMTP id E4D181CE81B\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri, 14 Jul 2017 21:14:19 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id DBA918A423\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri, 14 Jul 2017 21:14:19 +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 H2vH8SfIMQGS for <intel-wired-lan@lists.osuosl.org>;\n\tFri, 14 Jul 2017 21:14:18 +0000 (UTC)", "from mga05.intel.com (mga05.intel.com [192.55.52.43])\n\tby hemlock.osuosl.org (Postfix) with ESMTPS id D8E418A41C\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri, 14 Jul 2017 21:14:18 +0000 (UTC)", "from orsmga002.jf.intel.com ([10.7.209.21])\n\tby fmsmga105.fm.intel.com with ESMTP; 14 Jul 2017 14:14:18 -0700", "from unknown (HELO localhost.jf.intel.com) ([10.166.16.121])\n\tby orsmga002.jf.intel.com with ESMTP; 14 Jul 2017 14:14:17 -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.40,360,1496127600\"; d=\"scan'208\";a=\"111486592\"", "From": "Alice Michael <alice.michael@intel.com>", "To": "alice.michael@intel.com,\n\tintel-wired-lan@lists.osuosl.org", "Date": "Fri, 14 Jul 2017 09:10:12 -0400", "Message-Id": "<20170714131019.52530-6-alice.michael@intel.com>", "X-Mailer": "git-send-email 2.9.3", "In-Reply-To": "<20170714131019.52530-1-alice.michael@intel.com>", "References": "<20170714131019.52530-1-alice.michael@intel.com>", "Subject": "[Intel-wired-lan] [next PATCH S76-V2 06/13] i40e/i40evf: remove\n\tULTRA latency mode", "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 c56625d59726 (\"i40e/i40evf: change dynamic interrupt\nthresholds\") a new higher latency ITR setting called I40E_ULTRA_LATENCY\nwas added with a cryptic comment about how it was meant for adjusting Rx\nmore aggressively when streaming small packets.\n\nThis mode was attempting to calculate packets per second and then kick\nin when we have a huge number of small packets.\n\nUnfortunately, the ULTRA setting was kicking in for workloads it wasn't\nintended for including single-thread UDP_STREAM workloads.\n\nThis wasn't caught for a variety of reasons. First, the ip_defrag\nroutines were improved somewhat which makes the UDP_STREAM test still\nreasonable at 10GbE, even when dropped down to 8k interrupts a second.\nAdditionally, some other obvious workloads appear to work fine, such\nas TCP_STREAM.\n\nThe number 40k doesn't make sense for a number of reasons. First, we\nabsolutely can do more than 40k packets per second. Second, we calculate\nthe value inline in an integer, which sometimes can overflow resulting\nin using incorrect values.\n\nIf we fix this overflow it makes it even more likely that we'll enter\nULTRA mode which is the opposite of what we want.\n\nThe ULTRA mode was added originally as a way to reduce CPU utilization\nduring a small packet workload where we weren't keeping up anyways. It\nshould never have been kicking in during these other workloads.\n\nGiven the issues outlined above, let's remove the ULTRA latency mode. If\nnecessary, a better solution to the CPU utilization issue for small\npacket workloads will be added in a future patch.\n\nSigned-off-by: Jacob Keller <jacob.e.keller@intel.com>\n---\n drivers/net/ethernet/intel/i40e/i40e_txrx.c | 17 -----------------\n drivers/net/ethernet/intel/i40e/i40e_txrx.h | 1 -\n drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 17 -----------------\n drivers/net/ethernet/intel/i40evf/i40e_txrx.h | 1 -\n 4 files changed, 36 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\nindex b323677..c056f60 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n@@ -959,7 +959,6 @@ void i40e_force_wb(struct i40e_vsi *vsi, struct i40e_q_vector *q_vector)\n static bool i40e_set_new_dynamic_itr(struct i40e_ring_container *rc)\n {\n \tenum i40e_latency_range new_latency_range = rc->latency_range;\n-\tstruct i40e_q_vector *qv = rc->ring->q_vector;\n \tu32 new_itr = rc->itr;\n \tint bytes_per_int;\n \tint usecs;\n@@ -971,7 +970,6 @@ static bool i40e_set_new_dynamic_itr(struct i40e_ring_container *rc)\n \t * 0-10MB/s lowest (50000 ints/s)\n \t * 10-20MB/s low (20000 ints/s)\n \t * 20-1249MB/s bulk (18000 ints/s)\n-\t * > 40000 Rx packets per second (8000 ints/s)\n \t *\n \t * The math works out because the divisor is in 10^(-6) which\n \t * turns the bytes/us input value into MB/s values, but\n@@ -994,24 +992,12 @@ static bool i40e_set_new_dynamic_itr(struct i40e_ring_container *rc)\n \t\t\tnew_latency_range = I40E_LOWEST_LATENCY;\n \t\tbreak;\n \tcase I40E_BULK_LATENCY:\n-\tcase I40E_ULTRA_LATENCY:\n \tdefault:\n \t\tif (bytes_per_int <= 20)\n \t\t\tnew_latency_range = I40E_LOW_LATENCY;\n \t\tbreak;\n \t}\n \n-\t/* this is to adjust RX more aggressively when streaming small\n-\t * packets. The value of 40000 was picked as it is just beyond\n-\t * what the hardware can receive per second if in low latency\n-\t * mode.\n-\t */\n-#define RX_ULTRA_PACKET_RATE 40000\n-\n-\tif ((((rc->total_packets * 1000000) / usecs) > RX_ULTRA_PACKET_RATE) &&\n-\t (&qv->rx == rc))\n-\t\tnew_latency_range = I40E_ULTRA_LATENCY;\n-\n \trc->latency_range = new_latency_range;\n \n \tswitch (new_latency_range) {\n@@ -1024,9 +1010,6 @@ static bool i40e_set_new_dynamic_itr(struct i40e_ring_container *rc)\n \tcase I40E_BULK_LATENCY:\n \t\tnew_itr = I40E_ITR_18K;\n \t\tbreak;\n-\tcase I40E_ULTRA_LATENCY:\n-\t\tnew_itr = I40E_ITR_8K;\n-\t\tbreak;\n \tdefault:\n \t\tbreak;\n \t}\ndiff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.h b/drivers/net/ethernet/intel/i40e/i40e_txrx.h\nindex f0a0eab..e6456e8 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.h\n+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.h\n@@ -454,7 +454,6 @@ enum i40e_latency_range {\n \tI40E_LOWEST_LATENCY = 0,\n \tI40E_LOW_LATENCY = 1,\n \tI40E_BULK_LATENCY = 2,\n-\tI40E_ULTRA_LATENCY = 3,\n };\n \n struct i40e_ring_container {\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\nindex a8dc1d9..b9acb20 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n@@ -357,7 +357,6 @@ void i40evf_force_wb(struct i40e_vsi *vsi, struct i40e_q_vector *q_vector)\n static bool i40e_set_new_dynamic_itr(struct i40e_ring_container *rc)\n {\n \tenum i40e_latency_range new_latency_range = rc->latency_range;\n-\tstruct i40e_q_vector *qv = rc->ring->q_vector;\n \tu32 new_itr = rc->itr;\n \tint bytes_per_int;\n \tint usecs;\n@@ -369,7 +368,6 @@ static bool i40e_set_new_dynamic_itr(struct i40e_ring_container *rc)\n \t * 0-10MB/s lowest (50000 ints/s)\n \t * 10-20MB/s low (20000 ints/s)\n \t * 20-1249MB/s bulk (18000 ints/s)\n-\t * > 40000 Rx packets per second (8000 ints/s)\n \t *\n \t * The math works out because the divisor is in 10^(-6) which\n \t * turns the bytes/us input value into MB/s values, but\n@@ -392,24 +390,12 @@ static bool i40e_set_new_dynamic_itr(struct i40e_ring_container *rc)\n \t\t\tnew_latency_range = I40E_LOWEST_LATENCY;\n \t\tbreak;\n \tcase I40E_BULK_LATENCY:\n-\tcase I40E_ULTRA_LATENCY:\n \tdefault:\n \t\tif (bytes_per_int <= 20)\n \t\t\tnew_latency_range = I40E_LOW_LATENCY;\n \t\tbreak;\n \t}\n \n-\t/* this is to adjust RX more aggressively when streaming small\n-\t * packets. The value of 40000 was picked as it is just beyond\n-\t * what the hardware can receive per second if in low latency\n-\t * mode.\n-\t */\n-#define RX_ULTRA_PACKET_RATE 40000\n-\n-\tif ((((rc->total_packets * 1000000) / usecs) > RX_ULTRA_PACKET_RATE) &&\n-\t (&qv->rx == rc))\n-\t\tnew_latency_range = I40E_ULTRA_LATENCY;\n-\n \trc->latency_range = new_latency_range;\n \n \tswitch (new_latency_range) {\n@@ -422,9 +408,6 @@ static bool i40e_set_new_dynamic_itr(struct i40e_ring_container *rc)\n \tcase I40E_BULK_LATENCY:\n \t\tnew_itr = I40E_ITR_18K;\n \t\tbreak;\n-\tcase I40E_ULTRA_LATENCY:\n-\t\tnew_itr = I40E_ITR_8K;\n-\t\tbreak;\n \tdefault:\n \t\tbreak;\n \t}\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.h b/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\nindex 4896840..fb506c9 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\n+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\n@@ -425,7 +425,6 @@ enum i40e_latency_range {\n \tI40E_LOWEST_LATENCY = 0,\n \tI40E_LOW_LATENCY = 1,\n \tI40E_BULK_LATENCY = 2,\n-\tI40E_ULTRA_LATENCY = 3,\n };\n \n struct i40e_ring_container {\n", "prefixes": [ "next", "S76-V2", "06/13" ] }