Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/952222/?format=api
{ "id": 952222, "url": "http://patchwork.ozlabs.org/api/patches/952222/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1533108587.16601.56.camel@atviedlbe741.rss.d3s.at.thales/", "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": "<1533108587.16601.56.camel@atviedlbe741.rss.d3s.at.thales>", "list_archive_url": null, "date": "2018-08-01T07:29:34", "name": "[E1000-devel] igb: CPU0 latency and updating statistics", "commit_ref": null, "pull_url": null, "state": "rejected", "archived": false, "hash": "234e80cc6f0d6967e3dbff3c3c391fe9a67d44d3", "submitter": { "id": 74652, "url": "http://patchwork.ozlabs.org/api/people/74652/?format=api", "name": "JABLONSKY Jan", "email": "Jan.JABLONSKY@thalesgroup.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/1533108587.16601.56.camel@atviedlbe741.rss.d3s.at.thales/mbox/", "series": [ { "id": 58824, "url": "http://patchwork.ozlabs.org/api/series/58824/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=58824", "date": "2018-08-01T07:29:34", "name": "[E1000-devel] igb: CPU0 latency and updating statistics", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/58824/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/952222/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/952222/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>)", "ozlabs.org; dmarc=none (p=none dis=none)\n\theader.from=thalesgroup.com" ], "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 41gbQt6VJHz9s3q\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 2 Aug 2018 00:33:58 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id EEDA286D4A;\n\tWed, 1 Aug 2018 14:33:56 +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 eQEksic74P9o; Wed, 1 Aug 2018 14:33:55 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 2FE1C86D3F;\n\tWed, 1 Aug 2018 14:33:55 +0000 (UTC)", "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id A6A941C0156\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed, 1 Aug 2018 07:35:21 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id A2E5A87758\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed, 1 Aug 2018 07:35:21 +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 af0otuZeX+9O for <intel-wired-lan@lists.osuosl.org>;\n\tWed, 1 Aug 2018 07:35:20 +0000 (UTC)", "from thsbbfxrt01p.thalesgroup.com (thsbbfxrt01p.thalesgroup.com\n\t[192.54.144.131])\n\tby whitealder.osuosl.org (Postfix) with ESMTPS id 3676187739\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed, 1 Aug 2018 07:35:20 +0000 (UTC)", "from thsbbfxrt01p.thalesgroup.com (localhost [127.0.0.1])\n\tby localhost (Postfix) with SMTP id 41gQ1G6lsvz6Rk;\n\tWed, 1 Aug 2018 09:29:38 +0200 (CEST)" ], "X-Virus-Scanned": [ "amavisd-new at osuosl.org", "amavisd-new at osuosl.org" ], "X-Greylist": "delayed 00:05:39 by SQLgrey-1.7.6", "From": "JABLONSKY Jan <Jan.JABLONSKY@thalesgroup.com>", "To": "Jeff Kirsher <jeffrey.t.kirsher@intel.com>", "Thread-Topic": "[E1000-devel] [PATCH] igb: CPU0 latency and updating statistics", "Thread-Index": "AQHUKWlliIZIPdorn0yA6udIRduKDQ==", "Date": "Wed, 1 Aug 2018 07:29:34 +0000", "Message-ID": "<1533108587.16601.56.camel@atviedlbe741.rss.d3s.at.thales>", "Accept-Language": "en-US, fr-FR", "Content-Language": "en-US", "X-MS-Has-Attach": "", "X-MS-TNEF-Correlator": "", "x-mailer": "Evolution 3.10.4-0ubuntu2 ", "x-originating-ip": "[10.177.70.237]", "x-pmwin-version": "4.0.3, Antivirus-Engine: 3.72.1, Antivirus-Data: 5.53", "Content-ID": "<EE991B26B6702E41AE52E5259D1D70C6@iris.infra.thales>", "MIME-Version": "1.0", "X-Mailman-Approved-At": "Wed, 01 Aug 2018 14:33:54 +0000", "Subject": "[Intel-wired-lan] [E1000-devel] [PATCH] igb: CPU0 latency and\n\tupdating statistics", "X-BeenThere": "intel-wired-lan@osuosl.org", "X-Mailman-Version": "2.1.24", "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>", "Cc": "\"e1000-devel@lists.sourceforge.net\" <e1000-devel@lists.sourceforge.net>, \n\t\"netdev@vger.kernel.org\" <netdev@vger.kernel.org>,\n\t\"intel-wired-lan@lists.osuosl.org\" <intel-wired-lan@lists.osuosl.org>,\n\t\"linux-kernel@vger.kernel.org\" <linux-kernel@vger.kernel.org>", "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": "The Watchdog workqueue in igb driver is scheduled every 2s for each \nnetwork interface. That includes updating a statistics protected by \nspinlock. Function igb_update_stats in this case will be protected \nagainst preemption. According to number of a statistics registers \n(cca 60), processing this function might cause additional cpu load\n on CPU0.\n\nIn case of statistics spinlock may be replaced with mutex, which \nreduce latency on CPU0.\n\n\n# Measurements\nMeasurements were performed on Intel Atom E3950 (Quad-Core), \nE3930 (Dual-Core)\n\n# Cyclictest\nHigh latency is always on CPU0 which might be in range \nfrom 70us to 140us (sometimes higher)\n\n\n# cyclictest -l1000000 -Smp90 -i200 -q\n\n# E3930\n# default\nT: 0 ( 1745) P:90 I:200 C:1000000 Min: 2 Act: 3 Avg: 3 Max: 72\nT: 1 ( 1746) P:90 I:700 C: 285737 Min: 3 Act: 4 Avg: 3 Max: 13\n\n# with patch\nT: 0 ( 932) P:90 I:200 C:1000000 Min: 2 Act: 3 Avg: 3 Max: 22\nT: 1 ( 933) P:90 I:700 C: 285736 Min: 2 Act: 3 Avg: 3 Max: 12\n\n\n# E3950\n# default\nT: 0 ( 1103) P:90 I:200 C:1000000 Min: 2 Act: 2 Avg: 2 Max: 89\nT: 1 ( 1104) P:90 I:700 C: 285738 Min: 2 Act: 4 Avg: 2 Max: 9\nT: 2 ( 1105) P:90 I:1200 C: 166678 Min: 2 Act: 5 Avg: 3 Max: 22\nT: 3 ( 1106) P:90 I:1700 C: 117653 Min: 2 Act: 6 Avg: 2 Max: 13\n\n# with patch\nT: 0 ( 879) P:90 I:200 C:1000000 Min: 2 Act: 3 Avg: 3 Max: 26\nT: 1 ( 880) P:90 I:700 C: 285729 Min: 3 Act: 4 Avg: 3 Max: 22\nT: 2 ( 881) P:90 I:1200 C: 166672 Min: 3 Act: 7 Avg: 3 Max: 24\nT: 3 ( 882) P:90 I:1700 C: 117649 Min: 3 Act: 7 Avg: 3 Max: 8\n\n\nAdditionally I think updating statistics and watchdog task should \nbe implemented in 2 separated ways\n\nPatch is created against a linux-4.4\n\nReviewed also by: Bernhard Kaindl <bernhard.kaindl@thalesgroup.com>\n\nSigned-off-by: Jan Jablonsky <jan.jablonsky@thalesgroup.com>\n---\n drivers/net/ethernet/intel/igb/igb.h | 2 +-\n drivers/net/ethernet/intel/igb/igb_ethtool.c | 4 ++--\n drivers/net/ethernet/intel/igb/igb_main.c | 14 +++++++-------\n 3 files changed, 10 insertions(+), 10 deletions(-)\n\n \tcase e1000_82576:\n@@ -4367,9 +4367,9 @@ static void igb_watchdog_task(struct work_struct\n*work)\n \t\t}\n \t}\n \n-\tspin_lock(&adapter->stats64_lock);\n+\tmutex_lock(&adapter->stats64_lock);\n \tigb_update_stats(adapter, &adapter->stats64);\n-\tspin_unlock(&adapter->stats64_lock);\n+\tmutex_unlock(&adapter->stats64_lock);\n \n \tfor (i = 0; i < adapter->num_tx_queues; i++) {\n \t\tstruct igb_ring *tx_ring = adapter->tx_ring[i];\n@@ -5152,10 +5152,10 @@ static struct rtnl_link_stats64\n*igb_get_stats64(struct net_device *netdev,\n {\n \tstruct igb_adapter *adapter = netdev_priv(netdev);\n \n-\tspin_lock(&adapter->stats64_lock);\n+\tmutex_lock(&adapter->stats64_lock);\n \tigb_update_stats(adapter, &adapter->stats64);\n \tmemcpy(stats, &adapter->stats64, sizeof(*stats));\n-\tspin_unlock(&adapter->stats64_lock);\n+\tmutex_unlock(&adapter->stats64_lock);\n \n \treturn stats;\n }", "diff": "diff --git a/drivers/net/ethernet/intel/igb/igb.h\nb/drivers/net/ethernet/intel/igb/igb.h\nindex e3cb93b..85d68ea 100644\n--- a/drivers/net/ethernet/intel/igb/igb.h\n+++ b/drivers/net/ethernet/intel/igb/igb.h\n@@ -401,7 +401,7 @@ struct igb_adapter {\n \t/* OS defined structs */\n \tstruct pci_dev *pdev;\n \n-\tspinlock_t stats64_lock;\n+\tstruct mutex stats64_lock;\n \tstruct rtnl_link_stats64 stats64;\n \n \t/* structs defined in e1000_hw.h */\ndiff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c\nb/drivers/net/ethernet/intel/igb/igb_ethtool.c\nindex 2529bc6..07cc2b6 100644\n--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c\n+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c\n@@ -2276,7 +2276,7 @@ static void igb_get_ethtool_stats(struct\nnet_device *netdev,\n \tint i, j;\n \tchar *p;\n \n-\tspin_lock(&adapter->stats64_lock);\n+\tmutex_lock(&adapter->stats64_lock);\n \tigb_update_stats(adapter, net_stats);\n \n \tfor (i = 0; i < IGB_GLOBAL_STATS_LEN; i++) {\n@@ -2319,7 +2319,7 @@ static void igb_get_ethtool_stats(struct\nnet_device *netdev,\n \t\t} while (u64_stats_fetch_retry_irq(&ring->rx_syncp, start));\n \t\ti += IGB_RX_QUEUE_STATS_LEN;\n \t}\n-\tspin_unlock(&adapter->stats64_lock);\n+\tmutex_unlock(&adapter->stats64_lock);\n }\n \n static void igb_get_strings(struct net_device *netdev, u32 stringset,\nu8 *data)\ndiff --git a/drivers/net/ethernet/intel/igb/igb_main.c\nb/drivers/net/ethernet/intel/igb/igb_main.c\nindex 02b23f6..9d22398 100644\n--- a/drivers/net/ethernet/intel/igb/igb_main.c\n+++ b/drivers/net/ethernet/intel/igb/igb_main.c\n@@ -1810,9 +1810,9 @@ void igb_down(struct igb_adapter *adapter)\n \tdel_timer_sync(&adapter->phy_info_timer);\n \n \t/* record the stats before reset*/\n-\tspin_lock(&adapter->stats64_lock);\n+\tmutex_lock(&adapter->stats64_lock);\n \tigb_update_stats(adapter, &adapter->stats64);\n-\tspin_unlock(&adapter->stats64_lock);\n+\tmutex_unlock(&adapter->stats64_lock);\n \n \tadapter->link_speed = 0;\n \tadapter->link_duplex = 0;\n@@ -2975,7 +2975,7 @@ static int igb_sw_init(struct igb_adapter\n*adapter)\n \t\t\t\t VLAN_HLEN;\n \tadapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN;\n \n-\tspin_lock_init(&adapter->stats64_lock);\n+\tmutex_init(&adapter->stats64_lock);\n #ifdef CONFIG_PCI_IOV\n \tswitch (hw->mac.type) {\n", "prefixes": [ "E1000-devel" ] }