get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/523549/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 523549,
    "url": "http://patchwork.ozlabs.org/api/patches/523549/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1443464220-148318-5-git-send-email-catherine.sullivan@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": "<1443464220-148318-5-git-send-email-catherine.sullivan@intel.com>",
    "list_archive_url": null,
    "date": "2015-09-28T18:16:53",
    "name": "[next,S17,04/11] i40e/i40evf: change dynamic interrupt thresholds",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "d9210a3dce6648e5306c92c839f102056abab2a8",
    "submitter": {
        "id": 13931,
        "url": "http://patchwork.ozlabs.org/api/people/13931/?format=api",
        "name": "Catherine Sullivan",
        "email": "catherine.sullivan@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/1443464220-148318-5-git-send-email-catherine.sullivan@intel.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/523549/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/523549/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<intel-wired-lan-bounces@lists.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 whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ozlabs.org (Postfix) with ESMTP id 254C21400B7\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 29 Sep 2015 04:17:38 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 7081E921FE;\n\tMon, 28 Sep 2015 18:17:37 +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 srm5BuVJQezp; Mon, 28 Sep 2015 18:17:33 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 6F055921E8;\n\tMon, 28 Sep 2015 18:17:33 +0000 (UTC)",
            "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\tby ash.osuosl.org (Postfix) with ESMTP id 95CE31C1591\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 28 Sep 2015 18:17:30 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 916DA94D90\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 28 Sep 2015 18:17:30 +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 mZsIcUWYMyYk for <intel-wired-lan@lists.osuosl.org>;\n\tMon, 28 Sep 2015 18:17:29 +0000 (UTC)",
            "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id C4A048A6FA\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 28 Sep 2015 18:17:29 +0000 (UTC)",
            "from orsmga002.jf.intel.com ([10.7.209.21])\n\tby orsmga101.jf.intel.com with ESMTP; 28 Sep 2015 11:17:04 -0700",
            "from catheri1-tigger.jf.intel.com ([134.134.176.92])\n\tby orsmga002.jf.intel.com with ESMTP; 28 Sep 2015 11:17:04 -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.17,604,1437462000\"; d=\"scan'208\";a=\"814862637\"",
        "From": "Catherine Sullivan <catherine.sullivan@intel.com>",
        "To": "intel-wired-lan@lists.osuosl.org",
        "Date": "Mon, 28 Sep 2015 14:16:53 -0400",
        "Message-Id": "<1443464220-148318-5-git-send-email-catherine.sullivan@intel.com>",
        "X-Mailer": "git-send-email 1.9.3",
        "In-Reply-To": "<1443464220-148318-1-git-send-email-catherine.sullivan@intel.com>",
        "References": "<1443464220-148318-1-git-send-email-catherine.sullivan@intel.com>",
        "Subject": "[Intel-wired-lan] [next PATCH S17 04/11] i40e/i40evf: change\n\tdynamic interrupt thresholds",
        "X-BeenThere": "intel-wired-lan@lists.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.lists.osuosl.org>",
        "List-Unsubscribe": "<http://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.osuosl.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>",
        "List-Post": "<mailto:intel-wired-lan@lists.osuosl.org>",
        "List-Help": "<mailto:intel-wired-lan-request@lists.osuosl.org?subject=help>",
        "List-Subscribe": "<http://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.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@lists.osuosl.org",
        "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@lists.osuosl.org>"
    },
    "content": "From: Jesse Brandeburg <jesse.brandeburg@intel.com>\n\nThe dynamic algorithm, while now working, doesn't have good\nperformance in 40G mode.\n\nOne part of this patch addresses the high cpu utilization of some small\nstreaming workloads that the driver should reduce CPU in.\n\nIt also changes the minimum ITR that the dynamic algorithm\nwill settle on, causing our minimum latency to go from 12us\nto about 14us, when using adaptive mode.\n\nIt also changes the BULK interrupt rate to allow maximum throughput\non a 40Gb connection with a single thread of transmit, clamping\ninterrupt rate to 8000 for TX makes single thread traffic go too\nslow.\n\nThe new ULTRA bulk setting is introduced and is used\nwhen the rx packet rate on this queue exceeds 40000 packets per\nsecond.  This value of 40000 was chosen because the automatic tuning\nof minimum ITR=20us means that a single queue can't quite achieve\nthat many packets per second from a round-robin test.\n\nSigned-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>\nChange-ID: Icce8faa128688ca5fd2c4229bdd9726877a92ea2\n---\n drivers/net/ethernet/intel/i40e/i40e_txrx.c   | 27 +++++++++++++++++++++------\n drivers/net/ethernet/intel/i40e/i40e_txrx.h   |  3 +++\n drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 27 +++++++++++++++++++++------\n drivers/net/ethernet/intel/i40evf/i40e_txrx.h |  3 +++\n 4 files changed, 48 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\nindex 24e8f6b..12bbc83 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n@@ -827,6 +827,7 @@ 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@@ -835,9 +836,10 @@ static bool i40e_set_new_dynamic_itr(struct i40e_ring_container *rc)\n \t\treturn false;\n \n \t/* simple throttlerate management\n-\t *   0-10MB/s   lowest (100000 ints/s)\n+\t *   0-10MB/s   lowest (50000 ints/s)\n \t *  10-20MB/s   low    (20000 ints/s)\n-\t *  20-1249MB/s bulk   (8000 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@@ -858,24 +860,37 @@ 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-\t\tif (bytes_per_int <= 20)\n-\t\t\tnew_latency_range = I40E_LOW_LATENCY;\n-\t\tbreak;\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 \tcase I40E_LOWEST_LATENCY:\n-\t\tnew_itr = I40E_ITR_100K;\n+\t\tnew_itr = I40E_ITR_50K;\n \t\tbreak;\n \tcase I40E_LOW_LATENCY:\n \t\tnew_itr = I40E_ITR_20K;\n \t\tbreak;\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:\ndiff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.h b/drivers/net/ethernet/intel/i40e/i40e_txrx.h\nindex 7c0ed84..0fe7eb7 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.h\n+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.h\n@@ -32,7 +32,9 @@\n #define I40E_MAX_ITR               0x0FF0  /* reg uses 2 usec resolution */\n #define I40E_MIN_ITR               0x0001  /* reg uses 2 usec resolution */\n #define I40E_ITR_100K              0x0005\n+#define I40E_ITR_50K               0x000A\n #define I40E_ITR_20K               0x0019\n+#define I40E_ITR_18K               0x001B\n #define I40E_ITR_8K                0x003E\n #define I40E_ITR_4K                0x007A\n #define I40E_MAX_INTRL             0x3B    /* reg uses 4 usec resolution */\n@@ -296,6 +298,7 @@ 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 3f4a595..7cb0a06 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n@@ -331,6 +331,7 @@ static 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@@ -339,9 +340,10 @@ static bool i40e_set_new_dynamic_itr(struct i40e_ring_container *rc)\n \t\treturn false;\n \n \t/* simple throttlerate management\n-\t *   0-10MB/s   lowest (100000 ints/s)\n+\t *   0-10MB/s   lowest (50000 ints/s)\n \t *  10-20MB/s   low    (20000 ints/s)\n-\t *  20-1249MB/s bulk   (8000 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@@ -362,24 +364,37 @@ 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-\t\tif (bytes_per_int <= 20)\n-\t\t\tnew_latency_range = I40E_LOW_LATENCY;\n-\t\tbreak;\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 \tcase I40E_LOWEST_LATENCY:\n-\t\tnew_itr = I40E_ITR_100K;\n+\t\tnew_itr = I40E_ITR_50K;\n \t\tbreak;\n \tcase I40E_LOW_LATENCY:\n \t\tnew_itr = I40E_ITR_20K;\n \t\tbreak;\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:\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.h b/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\nindex c4f5a4e..27f0b626 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\n+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\n@@ -32,7 +32,9 @@\n #define I40E_MAX_ITR               0x0FF0  /* reg uses 2 usec resolution */\n #define I40E_MIN_ITR               0x0001  /* reg uses 2 usec resolution */\n #define I40E_ITR_100K              0x0005\n+#define I40E_ITR_50K               0x000A\n #define I40E_ITR_20K               0x0019\n+#define I40E_ITR_18K               0x001B\n #define I40E_ITR_8K                0x003E\n #define I40E_ITR_4K                0x007A\n #define I40E_MAX_INTRL             0x3B    /* reg uses 4 usec resolution */\n@@ -291,6 +293,7 @@ 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",
        "S17",
        "04/11"
    ]
}