get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 531507,
    "url": "http://patchwork.ozlabs.org/api/patches/531507/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1445018231-3196-13-git-send-email-jacob.e.keller@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": "<1445018231-3196-13-git-send-email-jacob.e.keller@intel.com>",
    "list_archive_url": null,
    "date": "2015-10-16T17:57:07",
    "name": "[next-queue,v5,13/17] fm10k: Update adaptive ITR algorithm",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "1caa3babcfb2893e5dc2ee0c913e734017787534",
    "submitter": {
        "id": 9784,
        "url": "http://patchwork.ozlabs.org/api/people/9784/?format=api",
        "name": "Jacob Keller",
        "email": "jacob.e.keller@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/1445018231-3196-13-git-send-email-jacob.e.keller@intel.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/531507/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/531507/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 silver.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\tby ozlabs.org (Postfix) with ESMTP id 099501402B2\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 17 Oct 2015 04:57:29 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby silver.osuosl.org (Postfix) with ESMTP id 5975F3226F;\n\tFri, 16 Oct 2015 17:57:28 +0000 (UTC)",
            "from silver.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id LWT9Zj5ZUrcb; Fri, 16 Oct 2015 17:57:23 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby silver.osuosl.org (Postfix) with ESMTP id ABB50332B0;\n\tFri, 16 Oct 2015 17:57:19 +0000 (UTC)",
            "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\tby ash.osuosl.org (Postfix) with ESMTP id 232B31C16C8\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri, 16 Oct 2015 17:57:16 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 1D4058B0C5\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri, 16 Oct 2015 17:57:16 +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 XMaNH02BYTN0 for <intel-wired-lan@lists.osuosl.org>;\n\tFri, 16 Oct 2015 17:57:15 +0000 (UTC)",
            "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 5B69F93D34\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri, 16 Oct 2015 17:57:15 +0000 (UTC)",
            "from fmsmga001.fm.intel.com ([10.253.24.23])\n\tby orsmga103.jf.intel.com with ESMTP; 16 Oct 2015 10:57:15 -0700",
            "from jekeller-desk.amr.corp.intel.com ([134.134.3.123])\n\tby fmsmga001.fm.intel.com with ESMTP; 16 Oct 2015 10:57:15 -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,689,1437462000\"; d=\"scan'208\";a=\"812781793\"",
        "From": "Jacob Keller <jacob.e.keller@intel.com>",
        "To": "Intel Wired LAN <intel-wired-lan@lists.osuosl.org>",
        "Date": "Fri, 16 Oct 2015 10:57:07 -0700",
        "Message-Id": "<1445018231-3196-13-git-send-email-jacob.e.keller@intel.com>",
        "X-Mailer": "git-send-email 2.6.1.264.gbab76a9",
        "In-Reply-To": "<1445018231-3196-1-git-send-email-jacob.e.keller@intel.com>",
        "References": "<1445018231-3196-1-git-send-email-jacob.e.keller@intel.com>",
        "Subject": "[Intel-wired-lan] [next-queue v5 13/17] fm10k: Update adaptive ITR\n\talgorithm",
        "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": "The existing adaptive ITR algorithm is overly restrictive. It throttles\nincorrectly for various traffic rates, and does not produce good\nperformance. The algorithm now allows for more interrupts per second,\nand does some calculation to help improve for smaller packet loads. In\naddition, take into account the new itr_scale from the hardware which\nindicates how much to scale due to PCIe link speed.\n\nReported-by: Matthew Vick <matthew.vick@intel.com>\nReported-by: Alex Duyck <alexander.duyck@gmail.com>\nSigned-off-by: Jacob Keller <jacob.e.keller@intel.com>\n---\n drivers/net/ethernet/intel/fm10k/fm10k.h      |  1 +\n drivers/net/ethernet/intel/fm10k/fm10k_main.c | 52 ++++++++++++++++++++-------\n drivers/net/ethernet/intel/fm10k/fm10k_pci.c  |  6 ++--\n 3 files changed, 45 insertions(+), 14 deletions(-)\n\nChanges in v5:\n* fix comment to 250k ints/sec, instead of 333k, as math for this was\n  incorrect.",
    "diff": "diff --git a/drivers/net/ethernet/intel/fm10k/fm10k.h b/drivers/net/ethernet/intel/fm10k/fm10k.h\nindex a2484cb88d86..bdbb804a594f 100644\n--- a/drivers/net/ethernet/intel/fm10k/fm10k.h\n+++ b/drivers/net/ethernet/intel/fm10k/fm10k.h\n@@ -164,6 +164,7 @@ struct fm10k_ring_container {\n \tunsigned int total_packets;\t/* total packets processed this int */\n \tu16 work_limit;\t\t\t/* total work allowed per interrupt */\n \tu16 itr;\t\t\t/* interrupt throttle rate value */\n+\tu8 itr_scale;\t\t\t/* ITR adjustment scaler based on PCI speed */\n \tu8 count;\t\t\t/* total number of rings in vector */\n };\n \ndiff --git a/drivers/net/ethernet/intel/fm10k/fm10k_main.c b/drivers/net/ethernet/intel/fm10k/fm10k_main.c\nindex 8207ee189600..c72c8054302c 100644\n--- a/drivers/net/ethernet/intel/fm10k/fm10k_main.c\n+++ b/drivers/net/ethernet/intel/fm10k/fm10k_main.c\n@@ -1367,7 +1367,7 @@ static bool fm10k_clean_tx_irq(struct fm10k_q_vector *q_vector,\n  **/\n static void fm10k_update_itr(struct fm10k_ring_container *ring_container)\n {\n-\tunsigned int avg_wire_size, packets;\n+\tunsigned int avg_wire_size, packets, itr_round;\n \n \t/* Only update ITR if we are using adaptive setting */\n \tif (!ITR_IS_ADAPTIVE(ring_container->itr))\n@@ -1379,18 +1379,44 @@ static void fm10k_update_itr(struct fm10k_ring_container *ring_container)\n \n \tavg_wire_size = ring_container->total_bytes / packets;\n \n-\t/* Add 24 bytes to size to account for CRC, preamble, and gap */\n-\tavg_wire_size += 24;\n+\t/* The following is a crude approximation of:\n+\t *  wmem_default / (size + overhead) = desired_pkts_per_int\n+\t *  rate / bits_per_byte / (size + ethernet overhead) = pkt_rate\n+\t *  (desired_pkt_rate / pkt_rate) * usecs_per_sec = ITR value\n+\t *\n+\t * Assuming wmem_default is 212992 and overhead is 640 bytes per\n+\t * packet, (256 skb, 64 headroom, 320 shared info), we can reduce the\n+\t * formula down to\n+\t *\n+\t *  (34 * (size + 24)) / (size + 640) = ITR\n+\t *\n+\t * We first do some math on the packet size and then finally bitshift\n+\t * by 8 after rounding up. We also have to account for PCIe link speed\n+\t * difference as ITR scales based on this.\n+\t */\n+\tif (avg_wire_size <= 360) {\n+\t\t/* Start at 250K ints/sec and gradually drop to 77K ints/sec */\n+\t\tavg_wire_size *= 8;\n+\t\tavg_wire_size += 376;\n+\t} else if (avg_wire_size <= 1152) {\n+\t\t/* 77K ints/sec to 45K ints/sec */\n+\t\tavg_wire_size *= 3;\n+\t\tavg_wire_size += 2176;\n+\t} else if (avg_wire_size <= 1920) {\n+\t\t/* 45K ints/sec to 38K ints/sec */\n+\t\tavg_wire_size += 4480;\n+\t} else {\n+\t\t/* plateau at a limit of 38K ints/sec */\n+\t\tavg_wire_size = 6656;\n+\t}\n \n-\t/* Don't starve jumbo frames */\n-\tif (avg_wire_size > 3000)\n-\t\tavg_wire_size = 3000;\n-\n-\t/* Give a little boost to mid-size frames */\n-\tif ((avg_wire_size > 300) && (avg_wire_size < 1200))\n-\t\tavg_wire_size /= 3;\n-\telse\n-\t\tavg_wire_size /= 2;\n+\t/* Perform final bitshift for division after rounding up to ensure\n+\t * that the calculation will never get below a 1. The bit shift\n+\t * accounts for changes in the ITR due to PCIe link speed.\n+\t */\n+\titr_round = ACCESS_ONCE(ring_container->itr_scale) + 8;\n+\tavg_wire_size += (1 << itr_round) - 1;\n+\tavg_wire_size >>= itr_round;\n \n \t/* write back value and retain adaptive flag */\n \tring_container->itr = avg_wire_size | FM10K_ITR_ADAPTIVE;\n@@ -1608,6 +1634,7 @@ static int fm10k_alloc_q_vector(struct fm10k_intfc *interface,\n \tq_vector->tx.ring = ring;\n \tq_vector->tx.work_limit = FM10K_DEFAULT_TX_WORK;\n \tq_vector->tx.itr = interface->tx_itr;\n+\tq_vector->tx.itr_scale = interface->hw.mac.itr_scale;\n \tq_vector->tx.count = txr_count;\n \n \twhile (txr_count) {\n@@ -1636,6 +1663,7 @@ static int fm10k_alloc_q_vector(struct fm10k_intfc *interface,\n \t/* save Rx ring container info */\n \tq_vector->rx.ring = ring;\n \tq_vector->rx.itr = interface->rx_itr;\n+\tq_vector->rx.itr_scale = interface->hw.mac.itr_scale;\n \tq_vector->rx.count = rxr_count;\n \n \twhile (rxr_count) {\ndiff --git a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c\nindex faf81492d009..1f0d9bc3bf7b 100644\n--- a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c\n+++ b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c\n@@ -880,7 +880,8 @@ static irqreturn_t fm10k_msix_mbx_vf(int __always_unused irq, void *data)\n \n \t/* re-enable mailbox interrupt and indicate 20us delay */\n \tfm10k_write_reg(hw, FM10K_VFITR(FM10K_MBX_VECTOR),\n-\t\t\tFM10K_ITR_ENABLE | FM10K_MBX_INT_DELAY);\n+\t\t\tFM10K_ITR_ENABLE | (FM10K_MBX_INT_DELAY >>\n+\t\t\t\t\t    hw->mac.itr_scale));\n \n \t/* service upstream mailbox */\n \tif (fm10k_mbx_trylock(interface)) {\n@@ -1111,7 +1112,8 @@ static irqreturn_t fm10k_msix_mbx_pf(int __always_unused irq, void *data)\n \n \t/* re-enable mailbox interrupt and indicate 20us delay */\n \tfm10k_write_reg(hw, FM10K_ITR(FM10K_MBX_VECTOR),\n-\t\t\tFM10K_ITR_ENABLE | FM10K_MBX_INT_DELAY);\n+\t\t\tFM10K_ITR_ENABLE | (FM10K_MBX_INT_DELAY >>\n+\t\t\t\t\t    hw->mac.itr_scale));\n \n \treturn IRQ_HANDLED;\n }\n",
    "prefixes": [
        "next-queue",
        "v5",
        "13/17"
    ]
}