From patchwork Fri Aug 31 12:45:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Maximets X-Patchwork-Id: 44112 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 C46585B2E; Fri, 31 Aug 2018 14:44:06 +0200 (CEST) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 6B0405B2E for ; Fri, 31 Aug 2018 14:44:05 +0200 (CEST) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20180831124403euoutp02b9e4ee57af5e90da70f5e9347fbccc5d~P_LKFkrns0968909689euoutp02w for ; Fri, 31 Aug 2018 12:44:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20180831124403euoutp02b9e4ee57af5e90da70f5e9347fbccc5d~P_LKFkrns0968909689euoutp02w DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1535719443; bh=AHXkTKWAMEGt6H5X0LCekT+rZUu+9Rd/UFakd5yqq6E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PWoR+DvrTGlCxehh9xvhMkPVrQao2uhBHswP2f0uMgB7cTj6aZ3YiTW/RkjJDIib/ 8FIh6Lk1KxXl3Q3wrH5G8c0pPUFzIXXDD0l3Ook1yRvucyoIEVUvS0esd2uNKEOGS5 U8j+sKj5IMjyYfmD9bgUGsfQBaW1eGPINr5/A1y0= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20180831124403eucas1p26542eca12413f738a903426e83e93ada~P_LJpYSg12420224202eucas1p2g; Fri, 31 Aug 2018 12:44:03 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id A9.EC.04806.218398B5; Fri, 31 Aug 2018 13:44:02 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20180831124402eucas1p120ba1cdc8c3f6bc6c5bd09b5d3ede771~P_LI1zFBt2959529595eucas1p1H; Fri, 31 Aug 2018 12:44:02 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20180831124401eusmtrp221faf92d5294b19d9c1f8db282ebac75~P_LIkkm0-2459624596eusmtrp2J; Fri, 31 Aug 2018 12:44:01 +0000 (GMT) X-AuditID: cbfec7f5-367ff700000012c6-a7-5b89381202f9 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 6F.DF.04128.118398B5; Fri, 31 Aug 2018 13:44:01 +0100 (BST) Received: from imaximets.rnd.samsung.ru (unknown [106.109.129.180]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20180831124401eusmtip2afc5aecbd516a8038958acf1041cc444~P_LHuDPPy2110821108eusmtip2a; Fri, 31 Aug 2018 12:44:00 +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: Fri, 31 Aug 2018 15:45:16 +0300 X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180831124517.27619-1-i.maximets@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrFIsWRmVeSWpSXmKPExsWy7djP87pCFp3RBgtXGVp0f2hhsrixyt7i 3aftTBZX2n+yW8xc8JnR4v2fRSwW0zf0s1lsPfOX0WL/88PsDpwevxYsZfVYvOclk0ffllWM AcxRXDYpqTmZZalF+nYJXBmbny1hLbiiU/Fv/znGBsZWlS5GTg4JAROJn/ufMXUxcnEICaxg lHh7/Co7hPOFUeLbqTZGCOczo8TBV8uByjjAWu4+zYWIL2eUeP/uOlTRD0aJW+vPsIHMZRPQ kTi1+ggjiC0iICDxuXMxG0gRs8BRJolrXdOZQRLCAlYSe052soBMZRFQlfj0VgHiJnmJ1RsO gJVwCthILDneAHafhMBnNonJd/eCDeUVKJNYc/sOK0SDi8TMn/+hbGGJV8e3sEPYMhL/d85n grDrJe63vGSEGNTBKDH90D+ohL3Eltfn2EGOYBbQlFi/Sx8i7Cjx8k4TC8THfBI33gqChJmB zEnbQM4HCfNKdLQJQVSrSPw+uJwZwpaSuPnuMztEiYfExbOckODpZ5T4vG410wRG+VkIuxYw Mq5iFE8tLc5NTy02zkst1ytOzC0uzUvXS87P3cQITBGn/x3/uoNx35+kQ4wCHIxKPLwRH9uj hVgTy4orcw8xSnAwK4nwcmZ0RAvxpiRWVqUW5ccXleakFh9ilOZgURLn5dNKixYSSE8sSc1O TS1ILYLJMnFwSjUwHrrUtr71qpv11S5zr3W/X3fk3avIuFMve4OD7ZOC+Oxkw4rZL6eEiPcw ebNNyz0nHKy+IeBU3lNhvgmWy53Op0dYfNkWfWtTsFKv9GMejQPrNjBY1fyX+Hs+bc7PvZ4T Q06sSRSqaM4QdxfXCxacffLfLp1tveqzDH1OeG1orO306T22SzBGiaU4I9FQi7moOBEADKvz Fw0DAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrDLMWRmVeSWpSXmKPExsVy+t/xe7qCFp3RBudPqlt0f2hhsrixyt7i 3aftTBZX2n+yW8xc8JnR4v2fRSwW0zf0s1lsPfOX0WL/88PsDpwevxYsZfVYvOclk0ffllWM AcxRejZF+aUlqQoZ+cUltkrRhhZGeoaWFnpGJpZ6hsbmsVZGpkr6djYpqTmZZalF+nYJehmb ny1hLbiiU/Fv/znGBsZWlS5GDg4JAROJu09zuxi5OIQEljJKXP06l62LkRMoLiXx49cFVghb WOLPtS42iKJvjBJrDj5nAkmwCehInFp9hBHEFhEQkPjcuRisiFngNJPEgbWbmEESwgJWEntO drKAbGMRUJX49FYBJMwrYC3xddEuRogF8hKrNxwAK+cUsJFYcrwBbL4QUM3tK5PZJzDyLWBk WMUoklpanJueW2ykV5yYW1yal66XnJ+7iREYstuO/dyyg7HrXfAhRgEORiUeXob37dFCrIll xZW5hxglOJiVRHg5MzqihXhTEiurUovy44tKc1KLDzGaAt00kVlKNDkfGE95JfGGpobmFpaG 5sbmxmYWSuK85w0qo4QE0hNLUrNTUwtSi2D6mDg4pRoYHb+d1uYU+eo2oz3KbIP2xEaF98Wv TncHGHosFD0Sfiize8IvzfBI6wn/JseGc2zNrYy7u0M6nHnWo0oNSYPbS5u3cBYnbcpqdNla L1RQe8N1xyGFPd7N6cWheus3yV942dLtq/KE3a8irEx3I5eH3dPmA1uqb7B4VwXtDGy/d/js pzPKXquUWIozEg21mIuKEwF8ePTgbwIAAA== Message-Id: <20180831124402eucas1p120ba1cdc8c3f6bc6c5bd09b5d3ede771~P_LI1zFBt2959529595eucas1p1H@eucas1p1.samsung.com> X-CMS-MailID: 20180831124402eucas1p120ba1cdc8c3f6bc6c5bd09b5d3ede771 X-Msg-Generator: CA X-RootMTR: 20180831124402eucas1p120ba1cdc8c3f6bc6c5bd09b5d3ede771 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180831124402eucas1p120ba1cdc8c3f6bc6c5bd09b5d3ede771 References: <20180831124517.27619-1-i.maximets@samsung.com> Subject: [dpdk-dev] [RFC 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 Fri Aug 31 12:45:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Maximets X-Patchwork-Id: 44113 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 74E3E5B40; Fri, 31 Aug 2018 14:44:09 +0200 (CEST) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id D80A65A6A for ; Fri, 31 Aug 2018 14:44:06 +0200 (CEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20180831124406euoutp029c301610790c6db6ba1e0a3749f6ea85~P_LMk4oXw1058710587euoutp02C for ; Fri, 31 Aug 2018 12:44:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20180831124406euoutp029c301610790c6db6ba1e0a3749f6ea85~P_LMk4oXw1058710587euoutp02C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1535719446; bh=x5DJiHgTOSRaIMIzl3ZhcpnHsp4LmkUZFmIsRG1u078=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Oy59fWIErHQUgKbb8YOAo55ueBGDAGXVjrxqXi0VAhsKV97yePfYNeaVrK+dxaNKM Pv9R94ajVrf5Uyllj3oZ2fRerMaBZrR6w8LSOciisgG/YvhmiailvpilAsTrH6kmFZ DkgExymfHtQgo66L4zU2oKH4W6y679D0JnIlKpEo= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20180831124405eucas1p2dd4516b68c3c611b09028fcf10f9c507~P_LMEUVOn1664316643eucas1p2y; Fri, 31 Aug 2018 12:44:05 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 23.D1.04441.518398B5; Fri, 31 Aug 2018 13:44:05 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20180831124404eucas1p20daff43600dfe450c9106616f886eab4~P_LLRV5aM1664316643eucas1p2w; Fri, 31 Aug 2018 12:44:04 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20180831124404eusmtrp2813a2f80a3807eb1c5e75f8f2be9d2db~P_LK-1cFf2459624596eusmtrp2Q; Fri, 31 Aug 2018 12:44:04 +0000 (GMT) X-AuditID: cbfec7f2-5c9ff70000001159-38-5b893815e416 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id E0.EF.04128.418398B5; Fri, 31 Aug 2018 13:44:04 +0100 (BST) Received: from imaximets.rnd.samsung.ru (unknown [106.109.129.180]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20180831124403eusmtip2ca9b82355b098641c2cdb99b7de53b13~P_LKYwmAf2134721347eusmtip2o; Fri, 31 Aug 2018 12:44: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: Fri, 31 Aug 2018 15:45:17 +0300 X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180831124517.27619-1-i.maximets@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA0VSa0hTYRjuO2eXs9HkNB2+rGiwTEi8JGSdH6IJRSszEoKogbX0NEdu2o4z 9U/+MKdTUiQQV6R4DS200nmhSKdtaKIRZROT+hGJpk6d5i1nO55J/573uXzvw8tH4NJtnpzQ GbJpo0GToRSIeTbHxliEjCpRH58bklGli4UY5WqJpxaWuzDqs3lDSFXXehDl/lvHo6raywVU 58g2ot5NDwhPi1SbtY18Vf2bGUz1sKMFXcavi2PT6AxdDm2MirspTh+ZrhZkPQnJdX2s4xeg 9cMWJCKAPAFLQ2V8CxITUvIZAsewE+OGFQSPno76FQ+C1Xkzfy/yp2aAxwnNCFp/uXFuWEfw fHIFY10CMhyGWwcRi4NIEjwl9QLWhJPvMRi3VOGsEEieB+9Ez66JRx6F6Z05HrdCAa3tfbse ERkLDc6C3VJAugXwoq9TyAoSMgfat0r9gTPw0uwWcjgQZp0dfnwIdnpqMA7fh++FM4h7qBhB ld3rF+Kh4/eoL0D46h2Dtt4ojk6AxvkRjKWBDADX/AGWxn2w0sb2Z2kJFBdJOXcIbPU34xyW w8SCx99ABRs9X4XcgcoRtE014RVIYf2/rBahFhRMmxi9lmaiDfS9SEajZ0wGbWRqpv4V8n2K D17ncjda/XTLjkgCKfdL9rnNailfk8Pk6e0ICFwZJBGlF6ulkjRNXj5tzLxhNGXQjB0dJHjK YElA2G21lNRqsuk7NJ1FG/dUjBDJC5D+7ezRrXOOwauWB1m43Grt7crPSA2VjQ2n3G1exqeS Y7SPz8rsylldd3Ick50gIhLXJElYXnXopGOJH2RuVkRAySX3uMJUozuSO3Hqm9Pa0F8hHG/T VpanxNjWLiZ5f4rdosTFwBDsSjiyWJpcr4vKTv648MUWe22TFoiUPCZdEx2GGxnNP94SPD4Q AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrLLMWRmVeSWpSXmKPExsVy+t/xe7oiFp3RBt0nFCy6P7QwWdxYZW/x 7tN2Josr7T/ZLWYu+Mxo8f7PIhaL6Rv62Sy2nvnLaLH/+WF2B06PXwuWsnos3vOSyaNvyyrG AOYoPZui/NKSVIWM/OISW6VoQwsjPUNLCz0jE0s9Q2PzWCsjUyV9O5uU1JzMstQifbsEvYwz z2eyFcxRqbhxYRFrA+MPuS5GTg4JAROJb/MPs3QxcnEICSxllLj/7ygbREJK4sevC6wQtrDE n2tdbBBF3xglFt9vZwdJsAnoSJxafYQRxBYREJD43LkYrIhZ4DSTxIG1m5hBEsICnhL/bu4E K2IRUJV4/v8N0DoODl4Ba4ltE3ggFshLrN5wAKycU8BGYsnxBiYQWwio5PaVyewTGPkWMDKs YhRJLS3OTc8tNtIrTswtLs1L10vOz93ECAzabcd+btnB2PUu+BCjAAejEg8vw/v2aCHWxLLi ytxDjBIczEoivJwZHdFCvCmJlVWpRfnxRaU5qcWHGE2BbprILCWanA+MqLySeENTQ3MLS0Nz Y3NjMwslcd7zBpVRQgLpiSWp2ampBalFMH1MHJxSDYyymf+iG2/pVi5MYRHm6dzrfP+tQWTR vvmGagUtf/K27WUMEymJ1O9cXZql3LCl+3rekivxjYrG6f4l8WklN9/JT/1ll3e1dJqk47qz Ncvz0uY3MhrlKDhe+G9RyPRBbWEBz/wvm+6/Y5hWdv3jkeC38afXF3nECJs+6y9R+pp/9MOJ n0XqN5RYijMSDbWYi4oTAVYas5xwAgAA Message-Id: <20180831124404eucas1p20daff43600dfe450c9106616f886eab4~P_LLRV5aM1664316643eucas1p2w@eucas1p2.samsung.com> X-CMS-MailID: 20180831124404eucas1p20daff43600dfe450c9106616f886eab4 X-Msg-Generator: CA X-RootMTR: 20180831124404eucas1p20daff43600dfe450c9106616f886eab4 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180831124404eucas1p20daff43600dfe450c9106616f886eab4 References: <20180831124517.27619-1-i.maximets@samsung.com> Subject: [dpdk-dev] [RFC 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/i40e/base/i40e_osdep.h | 6 +++--- drivers/net/ifc/base/ifcvf_osdep.h | 2 +- drivers/net/ixgbe/base/ixgbe_osdep.h | 2 +- 7 files changed, 10 insertions(+), 8 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/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))