From patchwork Mon Sep 3 14:47:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Maximets X-Patchwork-Id: 44173 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 356CC5F33; Mon, 3 Sep 2018 16:46:20 +0200 (CEST) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 8419A5F2E for ; Mon, 3 Sep 2018 16:46:18 +0200 (CEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20180903144617euoutp02455b9242b6a8600ed29c50af30e3e98c~Q6xvFSb4i0226802268euoutp02V for ; Mon, 3 Sep 2018 14:46:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20180903144617euoutp02455b9242b6a8600ed29c50af30e3e98c~Q6xvFSb4i0226802268euoutp02V DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1535985977; bh=AHXkTKWAMEGt6H5X0LCekT+rZUu+9Rd/UFakd5yqq6E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=b/l/C3/6ehXnhNWgQl9uIXlqWIIQj8PfDxsBIzDeNAYGjzS29zcWT34iQoP1Hsb+r MgHV0o/N/go4XxYdl0w05H+RpLfVUkYlEVEfPU3cEb2nfyYhDz3Vfa70cQ5B1z9icb raM5f3G41HYwYBc3LocB5MeFt78080hFBRDz0iRE= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20180903144616eucas1p1cb5501c3c1d3e189010d7bf73ac2072b~Q6xuc4LNg1414514145eucas1p17; Mon, 3 Sep 2018 14:46:16 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 1D.D2.04441.8394D8B5; Mon, 3 Sep 2018 15:46:16 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e~Q6xtl-i3s2361123611eucas1p1Q; Mon, 3 Sep 2018 14:46:15 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20180903144615eusmtrp16a7d3562fd23c99163796d9088a49a09~Q6xtTnQUa1765817658eusmtrp1W; Mon, 3 Sep 2018 14:46:15 +0000 (GMT) X-AuditID: cbfec7f2-5e3ff70000001159-42-5b8d4938a8da Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id EF.C7.04128.7394D8B5; Mon, 3 Sep 2018 15:46:15 +0100 (BST) Received: from imaximets.rnd.samsung.ru (unknown [106.109.129.180]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20180903144614eusmtip250cb6f54c77977fa1d04b72cdbcb3461~Q6xspiPTR0651306513eusmtip2E; Mon, 3 Sep 2018 14:46:14 +0000 (GMT) From: Ilya Maximets To: dev@dpdk.org Cc: Jingjing Wu , Konstantin Ananyev , Wenzhuo Lu , Beilei Xing , Qi Zhang , Xiao Wang , Bruce Richardson , Ilya Maximets Date: Mon, 3 Sep 2018 17:47:42 +0300 X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180903144311eucas1p2b6499c49dbd0d54334e973113cdc5ad6~Q6vBsFYRm1033710337eucas1p2D@eucas1p2.samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrNIsWRmVeSWpSXmKPExsWy7djP87oWnr3RBjPOSlh0f2hhsrixyt7i 3aftTBZX2n+yW8xc8JnR4v2fRSwW0zf0s1lsPfOX0WL/88PsDpwevxYsZfVYvOclk0ffllWM AcxRXDYpqTmZZalF+nYJXBmbny1hLbiiU/Fv/znGBsZWlS5GTg4JAROJZX13WEBsIYEVjBIT /3hD2F8YJV6/ju9i5AKyPzNK7HsxhQmmYfHvG2wQieWMEg/e/GKEcH4wSkzo+cYOUsUmoCNx avURRhBbREBA4nPnYrAOZoGjTBLXuqYzgySEBewl7qz/D1bEIqAqMWnqHFaIFfISqzccAKvh FCiXuH75ONgGCYH3bBLft78C28ArUCbxffEtNogGF4nr208zQtjCEq+Ob2GHsGUkTk/uYYGw 6yXut7yEGtTBKDH90D+oh+wltrw+B9TAAXSepsT6XfoQYUeJ9iMgizmAbD6JG28FQcLMQOak bSD3g4R5JTrahCCqVSR+H1zODGFLSdx89xnqAg+Jiyd+MUMC6BSjxM/pO9knMMrPQli2gJFx FaN4amlxbnpqsWFearlecWJucWleul5yfu4mRmCSOP3v+KcdjF8vJR1iFOBgVOLhDTDojRZi TSwrrsw9xCjBwawkwtvoDhTiTUmsrEotyo8vKs1JLT7EKM3BoiTOy6eVFi0kkJ5YkpqdmlqQ WgSTZeLglGpgdM94r979q0GpPuF1jNQ795LmJ6+TLPU3Nzx4s/PL5OSIc9Y52kaqWap8LPVl LTx1mytWcR5ff+aa8N0tF62Y2idE3y2Lb3C8WRzlZ32y0MDhaMT/26c3z/FaMyUg5IBm0/qv l9vmLokzEVYR+G/DMaP8p/IPFVOGypOB78s21uScM7k72adWiaU4I9FQi7moOBEAkzlBeg4D AAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrHLMWRmVeSWpSXmKPExsVy+t/xe7rmnr3RBq+fSlp0f2hhsrixyt7i 3aftTBZX2n+yW8xc8JnR4v2fRSwW0zf0s1lsPfOX0WL/88PsDpwevxYsZfVYvOclk0ffllWM AcxRejZF+aUlqQoZ+cUltkrRhhZGeoaWFnpGJpZ6hsbmsVZGpkr6djYpqTmZZalF+nYJehmb ny1hLbiiU/Fv/znGBsZWlS5GTg4JAROJxb9vsHUxcnEICSxllPj24yQ7REJK4sevC6wQtrDE n2tdUEXfGCUW/NjKCJJgE9CROLX6CJgtIiAg8blzMVgRs8BpJokDazcxgySEBewl7qz/D1bE IqAqMWnqHLCpvALWEudv9rBBbJCXWL3hAFg9p0C5xPXLx8HqhQTKJM7Nfss2gZFvASPDKkaR 1NLi3PTcYiO94sTc4tK8dL3k/NxNjMCw3Xbs55YdjF3vgg8xCnAwKvHw/tDtjRZiTSwrrsw9 xCjBwawkwtvoDhTiTUmsrEotyo8vKs1JLT7EaAp01ERmKdHkfGBM5ZXEG5oamltYGpobmxub WSiJ8543qIwSEkhPLEnNTk0tSC2C6WPi4JRqYNxV7tL889SxHOHZZz8miCnkcr3Z/OVlrJ7J GaXr7DPvfz+UslQ6szJh0sqNb7M3Fn9/blt0wf6B/pz6WlaxG9eulwS9lI2ZVPN1q7AXH2/W guojy/5u8N252HdzS4Tz1Tf/4nls5b6L/ysM4c+z9DnxZrW+4nqvUxbNvXdSGJbweKvmGP5X TFNiKc5INNRiLipOBAB6VCGucQIAAA== Message-Id: <20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e~Q6xtl-i3s2361123611eucas1p1Q@eucas1p1.samsung.com> X-CMS-MailID: 20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e X-Msg-Generator: CA X-RootMTR: 20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e References: <20180903144311eucas1p2b6499c49dbd0d54334e973113cdc5ad6~Q6vBsFYRm1033710337eucas1p2D@eucas1p2.samsung.com> Subject: [dpdk-dev] [PATCH v1 1/2] eal: add nanosleep based delay function X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add a new rte_delay_us_sleep() function that uses nanosleep(). This function can be used by applications to not implement their own nanosleep() based callback and by internal DPDK code if CPU non-blocking delay needed. Signed-off-by: Ilya Maximets --- lib/librte_eal/common/eal_common_timer.c | 19 +++++++ .../common/include/generic/rte_cycles.h | 11 ++++ lib/librte_eal/rte_eal_version.map | 1 + test/test/autotest_data.py | 6 +++ test/test/meson.build | 1 + test/test/test_cycles.c | 51 ++++++++++++++----- 6 files changed, 75 insertions(+), 14 deletions(-) diff --git a/lib/librte_eal/common/eal_common_timer.c b/lib/librte_eal/common/eal_common_timer.c index 2e2b770fb..4a00525ca 100644 --- a/lib/librte_eal/common/eal_common_timer.c +++ b/lib/librte_eal/common/eal_common_timer.c @@ -7,9 +7,11 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -31,6 +33,23 @@ rte_delay_us_block(unsigned int us) rte_pause(); } +void __rte_experimental +rte_delay_us_sleep(unsigned int us) +{ + struct timespec wait[2]; + int ind = 0; + + wait[0].tv_sec = 0; + if (us >= US_PER_S) { + wait[0].tv_sec = us / US_PER_S; + us -= wait[0].tv_sec * US_PER_S; + } + wait[0].tv_nsec = 1000 * us; + + while (nanosleep(&wait[ind], &wait[1 - ind]) == EINTR) + ind = 1 - ind; +} + uint64_t rte_get_tsc_hz(void) { diff --git a/lib/librte_eal/common/include/generic/rte_cycles.h b/lib/librte_eal/common/include/generic/rte_cycles.h index 0ff1af504..ac379e878 100644 --- a/lib/librte_eal/common/include/generic/rte_cycles.h +++ b/lib/librte_eal/common/include/generic/rte_cycles.h @@ -13,6 +13,7 @@ */ #include +#include #include #include @@ -157,6 +158,16 @@ rte_delay_ms(unsigned ms) */ void rte_delay_us_block(unsigned int us); +/** + * Delay function that uses system sleep. + * Does not block the CPU core. + * + * @param us + * Number of microseconds to wait. + */ +void __rte_experimental +rte_delay_us_sleep(unsigned int us); + /** * Replace rte_delay_us with user defined function. * diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map index 344a43d32..d68777ce0 100644 --- a/lib/librte_eal/rte_eal_version.map +++ b/lib/librte_eal/rte_eal_version.map @@ -270,6 +270,7 @@ EXPERIMENTAL { rte_class_register; rte_class_unregister; rte_ctrl_thread_create; + rte_delay_us_sleep; rte_dev_event_callback_register; rte_dev_event_callback_unregister; rte_dev_event_monitor_start; diff --git a/test/test/autotest_data.py b/test/test/autotest_data.py index f68d9b111..874d0cb53 100644 --- a/test/test/autotest_data.py +++ b/test/test/autotest_data.py @@ -278,6 +278,12 @@ "Func": default_autotest, "Report": None, }, + { + "Name": "Sleep delay", + "Command": "delay_us_sleep_autotest", + "Func": default_autotest, + "Report": None, + }, { "Name": "Rawdev autotest", "Command": "rawdev_autotest", diff --git a/test/test/meson.build b/test/test/meson.build index b1dd6eca2..0078aea30 100644 --- a/test/test/meson.build +++ b/test/test/meson.build @@ -143,6 +143,7 @@ test_names = [ 'cryptodev_dpaa_sec_autotest', 'cycles_autotest', 'debug_autotest', + 'delay_us_sleep_autotest', 'devargs_autotest', 'distributor_autotest', 'distributor_perf_autotest', diff --git a/test/test/test_cycles.c b/test/test/test_cycles.c index 149f60b07..c78e6a5b1 100644 --- a/test/test/test_cycles.c +++ b/test/test/test_cycles.c @@ -23,6 +23,30 @@ * of cycles is correct with regard to the frequency of the timer. */ +static int +check_wait_one_second(void) +{ + uint64_t cycles, prev_cycles; + uint64_t hz = rte_get_timer_hz(); + uint64_t max_inc = (hz / 100); /* 10 ms max between 2 reads */ + + /* check that waiting 1 second is precise */ + prev_cycles = rte_get_timer_cycles(); + rte_delay_us(1000000); + cycles = rte_get_timer_cycles(); + + if ((uint64_t)(cycles - prev_cycles) > (hz + max_inc)) { + printf("delay_us is not accurate: too long\n"); + return -1; + } + if ((uint64_t)(cycles - prev_cycles) < (hz - max_inc)) { + printf("delay_us is not accurate: too short\n"); + return -1; + } + + return 0; +} + static int test_cycles(void) { @@ -43,24 +67,23 @@ test_cycles(void) prev_cycles = cycles; } - /* check that waiting 1 second is precise */ - prev_cycles = rte_get_timer_cycles(); - rte_delay_us(1000000); - cycles = rte_get_timer_cycles(); + return check_wait_one_second(); +} - if ((uint64_t)(cycles - prev_cycles) > (hz + max_inc)) { - printf("delay_us is not accurate: too long\n"); - return -1; - } - if ((uint64_t)(cycles - prev_cycles) < (hz - max_inc)) { - printf("delay_us is not accurate: too short\n"); - return -1; - } +REGISTER_TEST_COMMAND(cycles_autotest, test_cycles); - return 0; +/* + * One second precision test with rte_delay_us_sleep. + */ + +static int +test_delay_us_sleep(void) +{ + rte_delay_us_callback_register(rte_delay_us_sleep); + return check_wait_one_second(); } -REGISTER_TEST_COMMAND(cycles_autotest, test_cycles); +REGISTER_TEST_COMMAND(delay_us_sleep_autotest, test_delay_us_sleep); /* * rte_delay_us_callback test From patchwork Mon Sep 3 14:48:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Maximets X-Patchwork-Id: 44174 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6EA695F4D; Mon, 3 Sep 2018 16:47:09 +0200 (CEST) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by dpdk.org (Postfix) with ESMTP id 572735F33 for ; Mon, 3 Sep 2018 16:47:07 +0200 (CEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20180903144706euoutp01283e73209c9d241317d9312726640118~Q6yc1Kws31820118201euoutp01H for ; Mon, 3 Sep 2018 14:47:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20180903144706euoutp01283e73209c9d241317d9312726640118~Q6yc1Kws31820118201euoutp01H DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1535986026; bh=n3+Q6L7+oTWfwBbsMw+fOyEV0DTZDUTGzzki5XBVPPk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=co+WCllgL+7NLIM0VsPkjqHO+ys1m55IOzgTRehHWz+r4KKkmo9fvdJW/Fh8gmp/+ i365iRjq8wGitFBqdmE/POeHDG7JNNyYRgrH7m/ldkGbw74l3p6bFDnxRwmDTHA+Bu ulSSnqsM+dkI7SSCh8uoBthR6be9cOowfzsPH7mo= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20180903144705eucas1p120777501299fdc4c64f594c86c454970~Q6ycDvQc50609506095eucas1p1Q; Mon, 3 Sep 2018 14:47:05 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 23.F2.04441.9694D8B5; Mon, 3 Sep 2018 15:47:05 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20180903144704eucas1p1d469c23bc22f25af27f00d94aaf8a660~Q6ybQBf930609506095eucas1p1P; Mon, 3 Sep 2018 14:47:04 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20180903144704eusmtrp22e66d1a7a865f493a5972f55b302a659~Q6ya8ySZg0869408694eusmtrp2x; Mon, 3 Sep 2018 14:47:04 +0000 (GMT) X-AuditID: cbfec7f2-5c9ff70000001159-c8-5b8d496937f9 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id A8.E7.04128.8694D8B5; Mon, 3 Sep 2018 15:47:04 +0100 (BST) Received: from imaximets.rnd.samsung.ru (unknown [106.109.129.180]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20180903144703eusmtip196e83f240866752eb084d6135c207e80~Q6yaTiwoE1096510965eusmtip1o; Mon, 3 Sep 2018 14:47:03 +0000 (GMT) From: Ilya Maximets To: dev@dpdk.org Cc: Jingjing Wu , Konstantin Ananyev , Wenzhuo Lu , Beilei Xing , Qi Zhang , Xiao Wang , Bruce Richardson , Ilya Maximets Date: Mon, 3 Sep 2018 17:48:31 +0300 X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180903144311eucas1p2b6499c49dbd0d54334e973113cdc5ad6~Q6vBsFYRm1033710337eucas1p2D@eucas1p2.samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrLIsWRmVeSWpSXmKPExsWy7djPc7qZnr3RBlMWiFt0f2hhsrixyt7i 3aftTBZX2n+yW8xc8JnR4v2fRSwW0zf0s1lsPfOX0WL/88PsDpwevxYsZfVYvOclk0ffllWM AcxRXDYpqTmZZalF+nYJXBlfL05lLJinXbFx7nfGBsYXKl2MnBwSAiYSezdNYeti5OIQEljB KHHqwjwmCOcLo8S0o+3MEM5nRonHF+6wwrTcfN3LApFYzihx7fVLVgjnB6PExb13mUGq2AR0 JE6tPsIIYosICEh87lwMtoRZ4CiTxLWu6WBFwgIBEsdX3gArYhFQlZjzcRILxAp5idUbDoDV cAqUS1y/fJwRpFlC4D2bxIGHK8EaeAXKJPa92Ah1k4vErRcboJqFJV4d38IOYctI/N85nwnC rpe43/ISalAHo8T0Q/+gEvYSW16fA2rgADpPU2L9Ln2IsKPEqyN3wcISAnwSN94KgoSZgcxJ 20DuBwnzSnS0CUFUq0j8PricGcKWkrj57jPUBR4S1z99gYbpKUaJrVfOMk9glJ+FsGwBI+Mq RvHU0uLc9NRiw7zUcr3ixNzi0rx0veT83E2MwERx+t/xTzsYv15KOsQowMGoxMMbYNAbLcSa WFZcmXuIUYKDWUmEt9EdKMSbklhZlVqUH19UmpNafIhRmoNFSZyXTystWkggPbEkNTs1tSC1 CCbLxMEp1cCYftmrOKw5qWuJx5XOxFklJrPExVmmfD7yx/1Xa8QRho/mHW0PVn+sepT3yaZY y+HpRdl3Vi//X5ac3Nm6vjosIqz0pMh2leOe334G7j9ZvnWi84PDb2JXzL0xU+llX0mZgu77 f5GHqrtqzDI5Lp5grzzjpF6uvU815PFzSTnzA/srV86u6nRRYinOSDTUYi4qTgQAw8vaABAD AAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrLLMWRmVeSWpSXmKPExsVy+t/xu7oZnr3RBrf6pS26P7QwWdxYZW/x 7tN2Josr7T/ZLWYu+Mxo8f7PIhaL6Rv62Sy2nvnLaLH/+WF2B06PXwuWsnos3vOSyaNvyyrG AOYoPZui/NKSVIWM/OISW6VoQwsjPUNLCz0jE0s9Q2PzWCsjUyV9O5uU1JzMstQifbsEvYyv F6cyFszTrtg49ztjA+MLlS5GTg4JAROJm697WUBsIYGljBLXV7hDxKUkfvy6wAphC0v8udbF 1sXIBVTzjVGi58tddpAEm4COxKnVRxhBbBEBAYnPnYvBipgFTjNJHFi7iRkkISzgJ/H51Sew BhYBVYk5HyeBbeMVsJb4tOI2G8QGeYnVGw6A1XMKlEtcv3ycEeKiMolzs9+yTWDkW8DIsIpR JLW0ODc9t9hIrzgxt7g0L10vOT93EyMwaLcd+7llB2PXu+BDjAIcjEo8vD90e6OFWBPLiitz DzFKcDArifA2ugOFeFMSK6tSi/Lji0pzUosPMZoCHTWRWUo0OR8YUXkl8YamhuYWlobmxubG ZhZK4rznDSqjhATSE0tSs1NTC1KLYPqYODilGhh5G1cnmrb9SfH+W8W7z+drllLzp97l8258 b/Y7dORE3z811RlaFyffbu1Ke1p/IPftV2bPQrWuv24uvM0X323+cTfgX3Zz9az46NWB71+b rJ8eUCul+ubyj9mPinZUCU63u75EavOuT4kl138dfXJup1f7+w333U7b1H1flqy8uqcpNTVx 07TvSizFGYmGWsxFxYkAqlDEH3ACAAA= Message-Id: <20180903144704eucas1p1d469c23bc22f25af27f00d94aaf8a660~Q6ybQBf930609506095eucas1p1P@eucas1p1.samsung.com> X-CMS-MailID: 20180903144704eucas1p1d469c23bc22f25af27f00d94aaf8a660 X-Msg-Generator: CA X-RootMTR: 20180903144704eucas1p1d469c23bc22f25af27f00d94aaf8a660 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180903144704eucas1p1d469c23bc22f25af27f00d94aaf8a660 References: <20180903144311eucas1p2b6499c49dbd0d54334e973113cdc5ad6~Q6vBsFYRm1033710337eucas1p2D@eucas1p2.samsung.com> Subject: [dpdk-dev] [PATCH v1 2/2] drivers/net: use sleep delay by default for intel NICs X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" NICs uses different delays up to a second during their configuration. It makes no sense to busy-wait so long wasting CPU cycles and preventing any other threads to execute on the same CPU core. These busy polling are the rudiments that came from the kernel drivers where you can not sleep in interrupt context, but as we're in userspace, we're able and should sleep to allow other threads to run. Delays never called on rx/tx path, so this should not affect performance. Signed-off-by: Ilya Maximets --- drivers/net/avf/Makefile | 1 + drivers/net/avf/base/avf_osdep.h | 4 ++-- drivers/net/e1000/Makefile | 1 + drivers/net/e1000/base/e1000_osdep.h | 2 +- drivers/net/e1000/meson.build | 2 ++ drivers/net/i40e/base/i40e_osdep.h | 6 +++--- drivers/net/ifc/base/ifcvf_osdep.h | 2 +- drivers/net/ixgbe/base/ixgbe_osdep.h | 2 +- drivers/net/ixgbe/meson.build | 3 ++- 9 files changed, 14 insertions(+), 9 deletions(-) diff --git a/drivers/net/avf/Makefile b/drivers/net/avf/Makefile index 3f815bbc4..8ee707529 100644 --- a/drivers/net/avf/Makefile +++ b/drivers/net/avf/Makefile @@ -9,6 +9,7 @@ include $(RTE_SDK)/mk/rte.vars.mk LIB = librte_pmd_avf.a CFLAGS += -O3 +CFLAGS += -DALLOW_EXPERIMENTAL_API LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs -lrte_hash LDLIBS += -lrte_bus_pci diff --git a/drivers/net/avf/base/avf_osdep.h b/drivers/net/avf/base/avf_osdep.h index 9ef45968e..442a5acd0 100644 --- a/drivers/net/avf/base/avf_osdep.h +++ b/drivers/net/avf/base/avf_osdep.h @@ -93,8 +93,8 @@ typedef uint64_t u64; #define avf_memset(a, b, c, d) memset((a), (b), (c)) #define avf_memcpy(a, b, c, d) rte_memcpy((a), (b), (c)) -#define avf_usec_delay(x) rte_delay_us(x) -#define avf_msec_delay(x) rte_delay_us(1000*(x)) +#define avf_usec_delay(x) rte_delay_us_sleep(x) +#define avf_msec_delay(x) avf_usec_delay(1000 * (x)) #define AVF_PCI_REG(reg) rte_read32(reg) #define AVF_PCI_REG_ADDR(a, reg) \ diff --git a/drivers/net/e1000/Makefile b/drivers/net/e1000/Makefile index 9c87e883b..0ed627656 100644 --- a/drivers/net/e1000/Makefile +++ b/drivers/net/e1000/Makefile @@ -10,6 +10,7 @@ LIB = librte_pmd_e1000.a CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) +CFLAGS += -DALLOW_EXPERIMENTAL_API LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs LDLIBS += -lrte_bus_pci diff --git a/drivers/net/e1000/base/e1000_osdep.h b/drivers/net/e1000/base/e1000_osdep.h index b8868049f..5958ea157 100644 --- a/drivers/net/e1000/base/e1000_osdep.h +++ b/drivers/net/e1000/base/e1000_osdep.h @@ -48,7 +48,7 @@ #include "../e1000_logs.h" -#define DELAY(x) rte_delay_us(x) +#define DELAY(x) rte_delay_us_sleep(x) #define usec_delay(x) DELAY(x) #define usec_delay_irq(x) DELAY(x) #define msec_delay(x) DELAY(1000*(x)) diff --git a/drivers/net/e1000/meson.build b/drivers/net/e1000/meson.build index cf456995c..d0901d377 100644 --- a/drivers/net/e1000/meson.build +++ b/drivers/net/e1000/meson.build @@ -1,6 +1,8 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2017 Intel Corporation +allow_experimental_apis = true + subdir('base') objs = [base_objs] diff --git a/drivers/net/i40e/base/i40e_osdep.h b/drivers/net/i40e/base/i40e_osdep.h index 8e5c593c9..a6072e153 100644 --- a/drivers/net/i40e/base/i40e_osdep.h +++ b/drivers/net/i40e/base/i40e_osdep.h @@ -233,9 +233,9 @@ struct i40e_spinlock { #define i40e_memcpy(a, b, c, d) rte_memcpy((a), (b), (c)) #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) -#define DELAY(x) rte_delay_us(x) -#define i40e_usec_delay(x) rte_delay_us(x) -#define i40e_msec_delay(x) rte_delay_us(1000*(x)) +#define DELAY(x) rte_delay_us_sleep(x) +#define i40e_usec_delay(x) DELAY(x) +#define i40e_msec_delay(x) DELAY(1000 * (x)) #define udelay(x) DELAY(x) #define msleep(x) DELAY(1000*(x)) #define usleep_range(min, max) msleep(DIV_ROUND_UP(min, 1000)) diff --git a/drivers/net/ifc/base/ifcvf_osdep.h b/drivers/net/ifc/base/ifcvf_osdep.h index cf151ef52..6aef25ea4 100644 --- a/drivers/net/ifc/base/ifcvf_osdep.h +++ b/drivers/net/ifc/base/ifcvf_osdep.h @@ -17,7 +17,7 @@ #define DEBUGOUT(S, args...) RTE_LOG(DEBUG, PMD, S, ##args) #define STATIC static -#define msec_delay rte_delay_ms +#define msec_delay(x) rte_delay_us_sleep(1000 * (x)) #define IFCVF_READ_REG8(reg) rte_read8(reg) #define IFCVF_WRITE_REG8(val, reg) rte_write8((val), (reg)) diff --git a/drivers/net/ixgbe/base/ixgbe_osdep.h b/drivers/net/ixgbe/base/ixgbe_osdep.h index bb5dfd2af..94ede9bc2 100644 --- a/drivers/net/ixgbe/base/ixgbe_osdep.h +++ b/drivers/net/ixgbe/base/ixgbe_osdep.h @@ -51,7 +51,7 @@ #define ASSERT(x) if(!(x)) rte_panic("IXGBE: x") -#define DELAY(x) rte_delay_us(x) +#define DELAY(x) rte_delay_us_sleep(x) #define usec_delay(x) DELAY(x) #define msec_delay(x) DELAY(1000*(x)) diff --git a/drivers/net/ixgbe/meson.build b/drivers/net/ixgbe/meson.build index 02d5ef5e4..544a14148 100644 --- a/drivers/net/ixgbe/meson.build +++ b/drivers/net/ixgbe/meson.build @@ -5,10 +5,11 @@ version = 2 cflags += ['-DRTE_LIBRTE_IXGBE_BYPASS'] +allow_experimental_apis = true + subdir('base') objs = [base_objs] -allow_experimental_apis = true sources = files( 'ixgbe_82599_bypass.c', 'ixgbe_bypass.c',