Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/806318/?format=api
{ "id": 806318, "url": "http://patchwork.ozlabs.org/api/patches/806318/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/20170828001603.75876-15-jeffrey.t.kirsher@intel.com/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170828001603.75876-15-jeffrey.t.kirsher@intel.com>", "list_archive_url": null, "date": "2017-08-28T00:16:02", "name": "[net-next,14/15] i40e/i40evf: remove ULTRA latency mode", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "3f657660de09f1b8a8e98f6d678ecfd259ccc758", "submitter": { "id": 473, "url": "http://patchwork.ozlabs.org/api/people/473/?format=api", "name": "Kirsher, Jeffrey T", "email": "jeffrey.t.kirsher@intel.com" }, "delegate": { "id": 34, "url": "http://patchwork.ozlabs.org/api/users/34/?format=api", "username": "davem", "first_name": "David", "last_name": "Miller", "email": "davem@davemloft.net" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/20170828001603.75876-15-jeffrey.t.kirsher@intel.com/mbox/", "series": [ { "id": 52, "url": "http://patchwork.ozlabs.org/api/series/52/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=52", "date": "2017-08-28T00:15:49", "name": "40GbE Intel Wired LAN Driver Updates 2017-08-27", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/52/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/806318/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/806318/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming@ozlabs.org", "Delivered-To": "patchwork-incoming@ozlabs.org", "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)", "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xgXPs52SFz9s82\n\tfor <patchwork-incoming@ozlabs.org>;\n\tMon, 28 Aug 2017 10:16:49 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751786AbdH1AQm (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tSun, 27 Aug 2017 20:16:42 -0400", "from mga14.intel.com ([192.55.52.115]:47467 \"EHLO mga14.intel.com\"\n\trhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP\n\tid S1751706AbdH1AQV (ORCPT <rfc822;netdev@vger.kernel.org>);\n\tSun, 27 Aug 2017 20:16:21 -0400", "from fmsmga004.fm.intel.com ([10.253.24.48])\n\tby fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t27 Aug 2017 17:16:21 -0700", "from davidpwo-mobl1.amr.corp.intel.com (HELO\n\tjtkirshe-DESK.amr.corp.intel.com.com) ([10.254.22.134])\n\tby fmsmga004.fm.intel.com with ESMTP; 27 Aug 2017 17:16:21 -0700" ], "X-ExtLoop1": "1", "X-IronPort-AV": "E=Sophos;i=\"5.41,439,1498546800\"; d=\"scan'208\";a=\"304981102\"", "From": "Jeff Kirsher <jeffrey.t.kirsher@intel.com>", "To": "davem@davemloft.net", "Cc": "Jacob Keller <jacob.e.keller@intel.com>, netdev@vger.kernel.org,\n\tnhorman@redhat.com, sassmann@redhat.com, jogreene@redhat.com,\n\tJeff Kirsher <jeffrey.t.kirsher@intel.com>", "Subject": "[net-next 14/15] i40e/i40evf: remove ULTRA latency mode", "Date": "Sun, 27 Aug 2017 17:16:02 -0700", "Message-Id": "<20170828001603.75876-15-jeffrey.t.kirsher@intel.com>", "X-Mailer": "git-send-email 2.14.1", "In-Reply-To": "<20170828001603.75876-1-jeffrey.t.kirsher@intel.com>", "References": "<20170828001603.75876-1-jeffrey.t.kirsher@intel.com>", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.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>\nTested-by: Andrew Bowers <andrewx.bowers@intel.com>\nSigned-off-by: Jeff Kirsher <jeffrey.t.kirsher@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 3999afea518b..f00f233092e9 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 f0a0eabc2666..e6456e8a899c 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 f15e341ada9e..2f7d9f4a6746 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 489684002e94..fb506c9f5a6e 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": [ "net-next", "14/15" ] }