From patchwork Fri Nov 10 15:16:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Maximets X-Patchwork-Id: 836778 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="unknown key hash" (0-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="KTKhoeIp"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3yYNtd53R8z9sRm for ; Sat, 11 Nov 2017 02:17:13 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id EBB1BAF5; Fri, 10 Nov 2017 15:16:27 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 78AA0AF5 for ; Fri, 10 Nov 2017 15:16:26 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id DB5C68A for ; Fri, 10 Nov 2017 15:16:25 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20171110151623euoutp02010d4e78ce07de55febfb433e1527261~1wmOpfgQF1840618406euoutp02U; Fri, 10 Nov 2017 15:16:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20171110151623euoutp02010d4e78ce07de55febfb433e1527261~1wmOpfgQF1840618406euoutp02U DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1510326983; bh=nQ8dvX8LVxwLnjqv3OGZyK7Rvz87nGLFINO1sPwD898=; h=From:To:Cc:Subject:Date:In-reply-to:References:From; b=KTKhoeIpHbxfMg+LwKv3EYd6RUM3OLomfD9Q+vKUe2S2lOQ5N/G4BQYFMC/M5KIkf vNU0OSi6j/QAZhFGfBJvvyjbXfA6lxzFNcgGPIR6Ow3N0A1s7kXYSoYCqW7SMczWV2 IqBzxL8oIXAcOGM+TE6JToRS20tBsnYGF8btZzqw= Received: from eusmges4.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20171110151622eucas1p2b79be2f480868fd11b4bb3b56207e499~1wmN9cRDG0625506255eucas1p2V; Fri, 10 Nov 2017 15:16:22 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges4.samsung.com (EUCPMTA) with SMTP id 06.13.12944.6C2C50A5; Fri, 10 Nov 2017 15:16:22 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20171110151621eucas1p2073472221af40a7f0878de538187bda7~1wmNEI7zR1192911929eucas1p2A; Fri, 10 Nov 2017 15:16:21 +0000 (GMT) X-AuditID: cbfec7f4-f79ab6d000003290-05-5a05c2c6b72f Received: from eusync1.samsung.com ( [203.254.199.211]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id B2.26.18832.5C2C50A5; Fri, 10 Nov 2017 15:16:21 +0000 (GMT) Received: from imaximets.rnd.samsung.ru ([106.109.129.180]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OZ7008MUJR2YR00@eusync1.samsung.com>; Fri, 10 Nov 2017 15:16:21 +0000 (GMT) From: Ilya Maximets To: ovs-dev@openvswitch.org Date: Fri, 10 Nov 2017 18:16:10 +0300 Message-id: <1510326972-26479-2-git-send-email-i.maximets@samsung.com> X-Mailer: git-send-email 2.7.4 In-reply-to: <1510326972-26479-1-git-send-email-i.maximets@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrNIsWRmVeSWpSXmKPExsWy7djPc7rHDrFGGfy/KWqx+henRUv/TGaL aZ9vs1tcaf/JbrHx4VlWixU3TjFazP30nNHi9dF/zA4cHov3vGTyeHbzP6NH35ZVjAHMUVw2 Kak5mWWpRfp2CVwZ9y62sBbM4a7oXLiYtYHxM0cXIyeHhICJxJRVW9ggbDGJC/fWA9lcHEIC Sxkl7v09ygrhfGaUONvZxgzT8eXWJxaIxDJGiW1nHkE5zUwSv9edYgGpYhPQkTi1+ggjiC0i IC3xuvcN2Chmge1MEpvvnAJbKCzgIbH23hVWEJtFQFXi4O6b7CA2r4CbxL+j21kg1slJ3DzX CbaaU8Bd4tbBCWCDJAQ62CRWv26CuslF4t6+00wQtrDEq+Nb2CFsGYnOjoNMEA3NjBINqy4x QjgTGCW+NC+H6rCXOHXzKpjNLMAnMWnbdKCpHEBxXomONiEI00Pi8bZIiGpHiWVLzjFBvDyL UWL96wlMExilFzAyrGIUSS0tzk1PLTbRK07MLS7NS9dLzs/dxAiM0tP/jn/Zwbj4mNUhRgEO RiUe3g93WaKEWBPLiitzDzFKcDArifAGzmONEuJNSaysSi3Kjy8qzUktPsQozcGiJM5rG9UW KSSQnliSmp2aWpBaBJNl4uCUamA0n2gYsO/VF/55K99+PvRsZokqyxTW19IyTgWl2rlTbB4u 3fM3RK7n/rvtLWb//hQe4fqy/c4nh6Ltdy7eDD38zW/K9LMHXkh4RxdUJ10M4Xys83zPCb3r T5+GySQt8X8eac5m/em9Z1d3QVuj/b0tDBU3eF4zbrphItpj+lNH8aZmXO288P+ZSizFGYmG WsxFxYkAcEcMoc4CAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupnluLIzCtJLcpLzFFi42I5/e/4Zd2jh1ijDObuUrNY/YvToqV/JrPF tM+32S2utP9kt9j48CyrxYobpxgt5n56zmjx+ug/ZgcOj8V7XjJ5PLv5n9Gjb8sqxgDmKC6b lNSczLLUIn27BK6MexdbWAvmcFd0LlzM2sD4maOLkZNDQsBE4sutTywQtpjEhXvr2boYuTiE BJYwSjxYtYgFwmllknhysp8dpIpNQEfi1OojjCC2iIC0xOveN6wgRcwCO5kkHvY8AksIC3hI rL13hRXEZhFQlTi4+yZYM6+Am8S/o9uh1slJ3DzXyQxicwq4S9w6OAGsXgioZsL89WwTGHkX MDKsYhRJLS3OTc8tNtQrTswtLs1L10vOz93ECAymbcd+bt7BeGlj8CFGAQ5GJR5ejwcsUUKs iWXFlbmHGCU4mJVEeAPnsUYJ8aYkVlalFuXHF5XmpBYfYpTmYFES5+3dszpSSCA9sSQ1OzW1 ILUIJsvEwSnVwFghrGA0kzHIxLrt8UL9x8/eblr2foPgNqbMcmk7WyEV7kdhGYuaD86vU33T c/HSyykH5s8JlGN0tyrLO64j7SKim/oge/ONj8rdqz8GvlmZp7WyQ+RIzJRV7AIeZ8RNtTO2 zZCpcNzQd7tX/iTj+7K2q0VCv5fIW17+mntyMktE0bmC/JIVVkosxRmJhlrMRcWJAIB5dJYi AgAA X-CMS-MailID: 20171110151621eucas1p2073472221af40a7f0878de538187bda7 X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20171110151621eucas1p2073472221af40a7f0878de538187bda7 X-RootMTR: 20171110151621eucas1p2073472221af40a7f0878de538187bda7 References: <1510326972-26479-1-git-send-email-i.maximets@samsung.com> X-Spam-Status: No, score=-4.9 required=5.0 tests=DKIM_SIGNED, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD,T_DKIM_INVALID autolearn=disabled version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Robert Wojciechowicz , Heetae Ahn , Ilya Maximets Subject: [ovs-dev] [PATCH v3 1/3] netdev-dpdk: Fix dpdk_mp leak in case of EEXIST. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org In case of EEXIST, 'dpdk_mp_create()' will allocate yet another 'struct dpdk_mp' with same 'mp' pointer inside. We need to free this structure to avoid the leak. CC: Robert Wojciechowicz CC: Antonio Fischetti Fixes: d555d9bded5f ("netdev-dpdk: Create separate memory pool for each port.") Fixes: b6b26021d2e2 ("netdev-dpdk: fix management of pre-existing mempools.") Signed-off-by: Ilya Maximets Acked-by: Antonio Fischetti --- lib/netdev-dpdk.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 76e79be..ad52a03 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -659,6 +659,12 @@ netdev_dpdk_mempool_configure(struct netdev_dpdk *dev) * Update dev with the new values. */ dev->mtu = dev->requested_mtu; dev->max_packet_len = MTU_TO_FRAME_LEN(dev->mtu); + /* 'mp' should contain pointer to the mempool already owned by netdev. + * Otherwise something went completely wrong. */ + ovs_assert(dev->dpdk_mp); + ovs_assert(dev->dpdk_mp->mp == mp->mp); + /* Free the returned struct dpdk_mp because it will not be used. */ + rte_free(mp); return EEXIST; } else { /* A new mempool was created, release the previous one. */ From patchwork Fri Nov 10 15:16:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Maximets X-Patchwork-Id: 836779 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="unknown key hash" (0-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="WVdsGY1x"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3yYNvK1wVhz9sRm for ; Sat, 11 Nov 2017 02:17:49 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id E9FACB2E; Fri, 10 Nov 2017 15:16:29 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id E9183AE0 for ; Fri, 10 Nov 2017 15:16:28 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 046BE8A for ; Fri, 10 Nov 2017 15:16:27 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20171110151625euoutp02ef6ef008ba9750c01d59c690588f60f8~1wmQ8wpXZ1840618406euoutp02W; Fri, 10 Nov 2017 15:16:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20171110151625euoutp02ef6ef008ba9750c01d59c690588f60f8~1wmQ8wpXZ1840618406euoutp02W DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1510326985; bh=WMZNtC9VsM4f1jRQAOOT5Lqkrj697zPeqccXBQPdgoU=; h=From:To:Cc:Subject:Date:In-reply-to:References:From; b=WVdsGY1xit+R+kPbUJyf06CjRR22MvrmKituYxioC9Q9O6a6B8KxTuNfNqgtvL0hA jXlVA6Ciezwpa8e8LZQsSfKPRFjNXb6BpPI7CmCPgRIcSZ592QR/sMeavPPKzSzudJ KK9TVHQ49ScEJEjRR3/frMtAiLzyFraKRmQUpL9U= Received: from eusmges5.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20171110151624eucas1p2cd69e12f8224f0639d1fcd774f9007fe~1wmQLQlFm2630826308eucas1p2m; Fri, 10 Nov 2017 15:16:24 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges5.samsung.com (EUCPMTA) with SMTP id F2.92.12743.8C2C50A5; Fri, 10 Nov 2017 15:16:24 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20171110151624eucas1p210e4082a5422c8801d2e6ff007fe764d~1wmPbm4lS0448104481eucas1p2a; Fri, 10 Nov 2017 15:16:24 +0000 (GMT) X-AuditID: cbfec7f5-f79d06d0000031c7-48-5a05c2c8cdde Received: from eusync1.samsung.com ( [203.254.199.211]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id A3.26.18832.8C2C50A5; Fri, 10 Nov 2017 15:16:24 +0000 (GMT) Received: from imaximets.rnd.samsung.ru ([106.109.129.180]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OZ7008MUJR2YR00@eusync1.samsung.com>; Fri, 10 Nov 2017 15:16:24 +0000 (GMT) From: Ilya Maximets To: ovs-dev@openvswitch.org Date: Fri, 10 Nov 2017 18:16:11 +0300 Message-id: <1510326972-26479-3-git-send-email-i.maximets@samsung.com> X-Mailer: git-send-email 2.7.4 In-reply-to: <1510326972-26479-1-git-send-email-i.maximets@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrBIsWRmVeSWpSXmKPExsWy7djPc7onDrFGGbw9pmOx+henRUv/TGaL aZ9vs1tcaf/JbrHx4VlWixU3TjFazP30nNHi9dF/zA4cHov3vGTyeHbzP6NH35ZVjAHMUVw2 Kak5mWWpRfp2CVwZl89dZi84kFHROVewgXGCRxcjJ4eEgInE7OX3GSFsMYkL99azdTFycQgJ LGWUWHf2EitIQkjgM6PE833lMA07Ny2Gii9jlLh0zh6ioZlJ4tufJrBJbAI6EqdWHwGzRQSk JV73vmEFKWIW2M4ksfnOKTaQhLCAvcT7yXvZuxg5OFgEVCUebeYDCfMKuElsbnzKDrFMTuLm uU5mEJtTwF3i1sEJYHMkBHrYJOYv2Q11tovE7emLmCFsYYlXx7dANctIdHYcZIJoaGaUaFh1 iRHCmcAo8aV5ORNElb3EqZtXwWxmAT6JSdumM4NcJCHAK9HRJgRR4iHxbN5tVgjbUWL6mvPM EC/PYpR48H8+ywRG6QWMDKsYRVJLi3PTU4tN9YoTc4tL89L1kvNzNzEC4/P0v+NfdzAuPWZ1 iFGAg1GJh/fDXZYoIdbEsuLK3EOMEhzMSiK8gfNYo4R4UxIrq1KL8uOLSnNSiw8xSnOwKInz 2ka1RQoJpCeWpGanphakFsFkmTg4pRoY57E8Cji1itd/O/+P2PwjP6ZsnPJ0v6L20jjfiomr bNv18yfU3I3mrEltl0sR+62lMXN77NVF+9cs4tGzTVv6vcP5OsMkazlLoy/92WnGy7KW3nqc ueDxuxc7s+arT5h6x8Eh8b57rItR065WmSNlBxVfnKhrcdG1fOe5Leb0qZl/Uy/q8jdUKLEU ZyQaajEXFScCABT2PP3LAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFuplluLIzCtJLcpLzFFi42I5/e/4Zd0Th1ijDD5v5LJY/YvToqV/JrPF tM+32S2utP9kt9j48CyrxYobpxgt5n56zmjx+ug/ZgcOj8V7XjJ5PLv5n9Gjb8sqxgDmKC6b lNSczLLUIn27BK6My+cusxccyKjonCvYwDjBo4uRk0NCwERi56bFrBC2mMSFe+vZuhi5OIQE ljBKTHvTygjhtDJJLJoxFayKTUBH4tTqI4wgtoiAtMTr3jesIEXMAjuZJB72PAJLCAvYS7yf vJe9i5GDg0VAVeLRZj6QMK+Am8TmxqfsENvkJG6e62QGsTkF3CVuHZwANl8IqGbC/PVsExh5 FzAyrGIUSS0tzk3PLTbUK07MLS7NS9dLzs/dxAgMpG3Hfm7ewXhpY/AhRgEORiUeXo8HLFFC rIllxZW5hxglOJiVRHgD57FGCfGmJFZWpRblxxeV5qQWH2KU5mBREuft3bM6UkggPbEkNTs1 tSC1CCbLxMEp1cCou3xZza2KS6Ufsu/umSYsu0bagVEn47iQoV73XccI1gNaLrPWhTgbXT/2 ha96hmfaxZNvbQOms4StMI//smOi4m6r96tmpK55fPfBlheM4eU5qW9eNoatfiZlxCOSsSuB Z2qRQVA/d1yKC0Pvgn/tT4WeWjZxPsyfYF82o2D9Fv7w64vt/WYqsRRnJBpqMRcVJwIAxXHm JyACAAA= X-CMS-MailID: 20171110151624eucas1p210e4082a5422c8801d2e6ff007fe764d X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20171110151624eucas1p210e4082a5422c8801d2e6ff007fe764d X-RootMTR: 20171110151624eucas1p210e4082a5422c8801d2e6ff007fe764d References: <1510326972-26479-1-git-send-email-i.maximets@samsung.com> X-Spam-Status: No, score=-4.9 required=5.0 tests=DKIM_SIGNED, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD,T_DKIM_INVALID autolearn=disabled version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Robert Wojciechowicz , Heetae Ahn , Ilya Maximets Subject: [ovs-dev] [PATCH v3 2/3] netdev-dpdk: Factor out struct dpdk_mp. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org Since commit d555d9bded5f ("netdev-dpdk: Create separate memory pool for each port."), struct dpdk_mp is redundant because each mempool can be used by single port only and this port already contains all the information we store in dpdk_mp. There is no need to duplicate the information. Fields of this structure currently used only to generate mempool name. But it's required only while creation and after that we can use mp->name directly from the struct rte_mempool. Let's remove this structure and use struct rte_mempool directly instead. Signed-off-by: Ilya Maximets Acked-by: Antonio Fischetti --- lib/netdev-dpdk.c | 190 +++++++++++++++++++----------------------------------- 1 file changed, 65 insertions(+), 125 deletions(-) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index ad52a03..82f41db 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -303,15 +303,6 @@ static struct ovs_list dpdk_list OVS_GUARDED_BY(dpdk_mutex) static struct ovs_mutex dpdk_mp_mutex OVS_ACQ_AFTER(dpdk_mutex) = OVS_MUTEX_INITIALIZER; -struct dpdk_mp { - struct rte_mempool *mp; - int mtu; - int socket_id; - char if_name[IFNAMSIZ]; - unsigned n_mbufs; /* Number of mbufs inside the mempool. */ - struct ovs_list list_node OVS_GUARDED_BY(dpdk_mp_mutex); -}; - /* There should be one 'struct dpdk_tx_queue' created for * each cpu core. */ struct dpdk_tx_queue { @@ -371,7 +362,7 @@ struct netdev_dpdk { PADDED_MEMBERS_CACHELINE_MARKER(CACHE_LINE_SIZE, cacheline1, struct ovs_mutex mutex OVS_ACQ_AFTER(dpdk_mutex); - struct dpdk_mp *dpdk_mp; + struct rte_mempool *mp; /* virtio identifier for vhost devices */ ovsrcu_index vid; @@ -500,38 +491,18 @@ ovs_rte_pktmbuf_init(struct rte_mempool *mp OVS_UNUSED, dp_packet_init_dpdk((struct dp_packet *) pkt, pkt->buf_len); } -/* - * Full DPDK memory pool name must be unique - * and cannot be longer than RTE_MEMPOOL_NAMESIZE - */ -static char * -dpdk_mp_name(struct dpdk_mp *dmp) -{ - uint32_t h = hash_string(dmp->if_name, 0); - char *mp_name = xcalloc(RTE_MEMPOOL_NAMESIZE, sizeof *mp_name); - int ret = snprintf(mp_name, RTE_MEMPOOL_NAMESIZE, "ovs_%x_%d_%d_%u", - h, dmp->socket_id, dmp->mtu, dmp->n_mbufs); - if (ret < 0 || ret >= RTE_MEMPOOL_NAMESIZE) { - VLOG_DBG("snprintf returned %d. Failed to generate a mempool " - "name for \"%s\". Hash:0x%x, mtu:%d, mbufs:%u.", - ret, dmp->if_name, h, dmp->mtu, dmp->n_mbufs); - free(mp_name); - return NULL; - } - return mp_name; -} - -static struct dpdk_mp * -dpdk_mp_create(struct netdev_dpdk *dev, int mtu, bool *mp_exists) +/* Returns a valid pointer when either of the following is true: + * - a new mempool was just created; + * - a matching mempool already exists. */ +static struct rte_mempool * +dpdk_mp_create(struct netdev_dpdk *dev, int mtu) { - struct dpdk_mp *dmp = dpdk_rte_mzalloc(sizeof *dmp); - if (!dmp) { - return NULL; - } - *mp_exists = false; - dmp->socket_id = dev->requested_socket_id; - dmp->mtu = mtu; - ovs_strzcpy(dmp->if_name, dev->up.name, IFNAMSIZ); + char mp_name[RTE_MEMPOOL_NAMESIZE]; + const char *netdev_name = netdev_get_name(&dev->up); + int socket_id = dev->requested_socket_id; + uint32_t n_mbufs; + uint32_t hash = hash_string(netdev_name, 0); + struct rte_mempool *mp = NULL; /* * XXX: rough estimation of number of mbufs required for this port: @@ -540,95 +511,72 @@ dpdk_mp_create(struct netdev_dpdk *dev, int mtu, bool *mp_exists) * + * + */ - dmp->n_mbufs = dev->requested_n_rxq * dev->requested_rxq_size - + dev->requested_n_txq * dev->requested_txq_size - + MIN(RTE_MAX_LCORE, dev->requested_n_rxq) * NETDEV_MAX_BURST - + MIN_NB_MBUF; + n_mbufs = dev->requested_n_rxq * dev->requested_rxq_size + + dev->requested_n_txq * dev->requested_txq_size + + MIN(RTE_MAX_LCORE, dev->requested_n_rxq) * NETDEV_MAX_BURST + + MIN_NB_MBUF; + ovs_mutex_lock(&dpdk_mp_mutex); do { - char *mp_name = dpdk_mp_name(dmp); - if (!mp_name) { - rte_free(dmp); - return NULL; + /* Full DPDK memory pool name must be unique and cannot be + * longer than RTE_MEMPOOL_NAMESIZE. */ + int ret = snprintf(mp_name, RTE_MEMPOOL_NAMESIZE, "ovs_%x_%d_%d_%u", + hash, socket_id, mtu, n_mbufs); + if (ret < 0 || ret >= RTE_MEMPOOL_NAMESIZE) { + VLOG_DBG("snprintf returned %d. " + "Failed to generate a mempool name for \"%s\". " + "Hash:0x%x, socket_id: %d, mtu:%d, mbufs:%u.", + ret, netdev_name, hash, socket_id, mtu, n_mbufs); + break; } VLOG_DBG("Port %s: Requesting a mempool of %u mbufs " "on socket %d for %d Rx and %d Tx queues.", - dev->up.name, dmp->n_mbufs, - dev->requested_socket_id, + netdev_name, n_mbufs, socket_id, dev->requested_n_rxq, dev->requested_n_txq); - dmp->mp = rte_pktmbuf_pool_create(mp_name, dmp->n_mbufs, - MP_CACHE_SZ, - sizeof (struct dp_packet) - - sizeof (struct rte_mbuf), - MBUF_SIZE(mtu) - - sizeof(struct dp_packet), - dmp->socket_id); - if (dmp->mp) { - VLOG_DBG("Allocated \"%s\" mempool with %u mbufs", mp_name, - dmp->n_mbufs); + mp = rte_pktmbuf_pool_create(mp_name, n_mbufs, MP_CACHE_SZ, + sizeof (struct dp_packet) - sizeof (struct rte_mbuf), + MBUF_SIZE(mtu) - sizeof(struct dp_packet), socket_id); + + if (mp) { + VLOG_DBG("Allocated \"%s\" mempool with %u mbufs", + mp_name, n_mbufs); /* rte_pktmbuf_pool_create has done some initialization of the * rte_mbuf part of each dp_packet. Some OvS specific fields * of the packet still need to be initialized by * ovs_rte_pktmbuf_init. */ - rte_mempool_obj_iter(dmp->mp, ovs_rte_pktmbuf_init, NULL); + rte_mempool_obj_iter(mp, ovs_rte_pktmbuf_init, NULL); } else if (rte_errno == EEXIST) { /* A mempool with the same name already exists. We just * retrieve its pointer to be returned to the caller. */ - dmp->mp = rte_mempool_lookup(mp_name); - VLOG_DBG("A mempool with name %s already exists at %p.", - mp_name, dmp->mp); + mp = rte_mempool_lookup(mp_name); /* As the mempool create returned EEXIST we can expect the * lookup has returned a valid pointer. If for some reason * that's not the case we keep track of it. */ - *mp_exists = true; + VLOG_DBG("A mempool with name \"%s\" already exists at %p.", + mp_name, mp); } else { VLOG_ERR("Failed mempool \"%s\" create request of %u mbufs", - mp_name, dmp->n_mbufs); + mp_name, n_mbufs); } - free(mp_name); - if (dmp->mp) { - return dmp; - } - } while (!(*mp_exists) && - (rte_errno == ENOMEM && (dmp->n_mbufs /= 2) >= MIN_NB_MBUF)); - - rte_free(dmp); - return NULL; -} - -/* Returns a valid pointer when either of the following is true: - * - a new mempool was just created; - * - a matching mempool already exists. */ -static struct dpdk_mp * -dpdk_mp_get(struct netdev_dpdk *dev, int mtu, bool *mp_exists) -{ - struct dpdk_mp *dmp; + } while (!mp && rte_errno == ENOMEM && (n_mbufs /= 2) >= MIN_NB_MBUF); - ovs_mutex_lock(&dpdk_mp_mutex); - dmp = dpdk_mp_create(dev, mtu, mp_exists); ovs_mutex_unlock(&dpdk_mp_mutex); - - return dmp; + return mp; } /* Release an existing mempool. */ static void -dpdk_mp_free(struct dpdk_mp *dmp) +dpdk_mp_free(struct rte_mempool *mp) { - char *mp_name; - - if (!dmp) { + if (!mp) { return; } ovs_mutex_lock(&dpdk_mp_mutex); - mp_name = dpdk_mp_name(dmp); - VLOG_DBG("Releasing \"%s\" mempool", mp_name); - free(mp_name); - rte_mempool_free(dmp->mp); - rte_free(dmp); + VLOG_DBG("Releasing \"%s\" mempool", mp->name); + rte_mempool_free(mp); ovs_mutex_unlock(&dpdk_mp_mutex); } @@ -643,39 +591,32 @@ netdev_dpdk_mempool_configure(struct netdev_dpdk *dev) OVS_REQUIRES(dev->mutex) { uint32_t buf_size = dpdk_buf_size(dev->requested_mtu); - struct dpdk_mp *mp; - bool mp_exists; + struct rte_mempool *mp; + int ret = 0; - mp = dpdk_mp_get(dev, FRAME_LEN_TO_MTU(buf_size), &mp_exists); + mp = dpdk_mp_create(dev, FRAME_LEN_TO_MTU(buf_size)); if (!mp) { VLOG_ERR("Failed to create memory pool for netdev " "%s, with MTU %d on socket %d: %s\n", dev->up.name, dev->requested_mtu, dev->requested_socket_id, rte_strerror(rte_errno)); - return rte_errno; - } else if (mp_exists) { - /* If a new MTU was requested and its rounded value equals the one - * that is currently used, then the existing mempool is returned. - * Update dev with the new values. */ - dev->mtu = dev->requested_mtu; - dev->max_packet_len = MTU_TO_FRAME_LEN(dev->mtu); - /* 'mp' should contain pointer to the mempool already owned by netdev. - * Otherwise something went completely wrong. */ - ovs_assert(dev->dpdk_mp); - ovs_assert(dev->dpdk_mp->mp == mp->mp); - /* Free the returned struct dpdk_mp because it will not be used. */ - rte_free(mp); - return EEXIST; + ret = rte_errno; } else { - /* A new mempool was created, release the previous one. */ - dpdk_mp_free(dev->dpdk_mp); - dev->dpdk_mp = mp; + /* If a new MTU was requested and its rounded value equals the one + * that is currently used, then the existing mempool is returned. */ + if (dev->mp != mp) { + /* A new mempool was created, release the previous one. */ + dpdk_mp_free(dev->mp); + } else { + ret = EEXIST; + } + dev->mp = mp; dev->mtu = dev->requested_mtu; dev->socket_id = dev->requested_socket_id; dev->max_packet_len = MTU_TO_FRAME_LEN(dev->mtu); } - return 0; + return ret; } static void @@ -781,8 +722,7 @@ dpdk_eth_dev_queue_setup(struct netdev_dpdk *dev, int n_rxq, int n_txq) for (i = 0; i < n_rxq; i++) { diag = rte_eth_rx_queue_setup(dev->port_id, i, dev->rxq_size, - dev->socket_id, NULL, - dev->dpdk_mp->mp); + dev->socket_id, NULL, dev->mp); if (diag) { VLOG_INFO("Interface %s rxq(%d) setup error: %s", dev->up.name, i, rte_strerror(-diag)); @@ -866,7 +806,7 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev) memcpy(dev->hwaddr.ea, eth_addr.addr_bytes, ETH_ADDR_LEN); rte_eth_link_get_nowait(dev->port_id, &dev->link); - mbp_priv = rte_mempool_get_priv(dev->dpdk_mp->mp); + mbp_priv = rte_mempool_get_priv(dev->mp); dev->buf_size = mbp_priv->mbuf_data_room_size - RTE_PKTMBUF_HEADROOM; /* Get the Flow control configuration for DPDK-ETH */ @@ -1113,7 +1053,7 @@ common_destruct(struct netdev_dpdk *dev) OVS_EXCLUDED(dev->mutex) { rte_free(dev->tx_q); - dpdk_mp_free(dev->dpdk_mp); + dpdk_mp_free(dev->mp); ovs_list_remove(&dev->list_node); free(ovsrcu_get_protected(struct ingress_policer *, @@ -1688,7 +1628,7 @@ netdev_dpdk_vhost_rxq_recv(struct netdev_rxq *rxq, nb_rx = rte_vhost_dequeue_burst(netdev_dpdk_get_vid(dev), qid * VIRTIO_QNUM + VIRTIO_TXQ, - dev->dpdk_mp->mp, + dev->mp, (struct rte_mbuf **) batch->packets, NETDEV_MAX_BURST); if (!nb_rx) { @@ -1910,7 +1850,7 @@ dpdk_do_tx_copy(struct netdev *netdev, int qid, struct dp_packet_batch *batch) continue; } - pkts[txcnt] = rte_pktmbuf_alloc(dev->dpdk_mp->mp); + pkts[txcnt] = rte_pktmbuf_alloc(dev->mp); if (OVS_UNLIKELY(!pkts[txcnt])) { dropped += cnt - i; break; From patchwork Fri Nov 10 15:16:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Maximets X-Patchwork-Id: 836780 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="unknown key hash" (0-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="LP0cJGqh"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3yYNw90w1bz9sRm for ; Sat, 11 Nov 2017 02:18:33 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id CBD6EBB3; Fri, 10 Nov 2017 15:16:32 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 780F0BA2 for ; Fri, 10 Nov 2017 15:16:31 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 1C4AC8A for ; Fri, 10 Nov 2017 15:16:31 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20171110151628euoutp02e05eaf325e12e0a1d0142d224eb08a97~1wmT0hJqR1840618406euoutp02Y; Fri, 10 Nov 2017 15:16:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20171110151628euoutp02e05eaf325e12e0a1d0142d224eb08a97~1wmT0hJqR1840618406euoutp02Y DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1510326988; bh=MvgDtzz6YJ/+DKhs+h9M4mPpNX81da9iknzynRiVo7I=; h=From:To:Cc:Subject:Date:In-reply-to:References:From; b=LP0cJGqhjXKuYW0knBHDXkQKarTw6dXbH/jzRIJsLlbXccw6zABXgoCH+r2E2cK00 X0+N43dVEIlTErAg71bfAunmqKSSP0c1n5kWz13rw2hjER0EUI6kXn+7LHwGuYPm/d Mise86S7OjnnIzogmIaH2O9XnUo0ZR2ao6JK2X8g= Received: from eusmges4.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20171110151628eucas1p23bb765cf91b196e87f064a4590d51da5~1wmTNH4RH0625506255eucas1p2g; Fri, 10 Nov 2017 15:16:28 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges4.samsung.com (EUCPMTA) with SMTP id 37.13.12944.BC2C50A5; Fri, 10 Nov 2017 15:16:27 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20171110151627eucas1p282f5cea59e60b0b5043587be8a5c798e~1wmSk1Slp0624606246eucas1p2W; Fri, 10 Nov 2017 15:16:27 +0000 (GMT) X-AuditID: cbfec7f4-f79ab6d000003290-0f-5a05c2cb9266 Received: from eusync1.samsung.com ( [203.254.199.211]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 95.26.18832.BC2C50A5; Fri, 10 Nov 2017 15:16:27 +0000 (GMT) Received: from imaximets.rnd.samsung.ru ([106.109.129.180]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OZ7008MUJR2YR00@eusync1.samsung.com>; Fri, 10 Nov 2017 15:16:27 +0000 (GMT) From: Ilya Maximets To: ovs-dev@openvswitch.org Date: Fri, 10 Nov 2017 18:16:12 +0300 Message-id: <1510326972-26479-4-git-send-email-i.maximets@samsung.com> X-Mailer: git-send-email 2.7.4 In-reply-to: <1510326972-26479-1-git-send-email-i.maximets@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrJIsWRmVeSWpSXmKPExsWy7djP87qnD7FGGSxeZmOx+henRUv/TGaL aZ9vs1tcaf/JbrHx4VlWixU3TjFazP30nNHi9dF/zA4cHov3vGTyeHbzP6NH35ZVjAHMUVw2 Kak5mWWpRfp2CVwZxx6/Zi54zF/xs2MJewPjY54uRk4OCQETiVvHljJB2GISF+6tZ+ti5OIQ EljKKNFz9yAjhPOZUaKj4xczTMf0rX/ZIRLLGCU2rZnKAuE0M0n07+xlBaliE9CROLX6CCOI LSIgLfG69w0rSBGzwHYmic13TrGBJIQF7CXOLHwKVsQioCrReXI+UJyDg1fATaKhTRZim5zE zXOdYJs5Bdwlbh2cADZHQqCHTWLK3y/sEEUuEr2fdkA9ISzx6vgWqLiMRGfHQSaIhmZGiYZV lxghnAmMEl+al0N12EucunkVzGYW4JOYtG06M8gVEgK8Eh1tQhCmh8SGDYwQpqPEpUtOEA/P YpSYcmk2ywRG6QWMDKsYRVJLi3PTU4tN9IoTc4tL89L1kvNzNzECI/T0v+NfdjAuPmZ1iFGA g1GJh/fDXZYoIdbEsuLK3EOMEhzMSiK8gfNYo4R4UxIrq1KL8uOLSnNSiw8xSnOwKInz2ka1 RQoJpCeWpGanphakFsFkmTg4pRoYzUWutb70dN5myPDW9vdLBf5jym4HMl63bHu4ZHr5wbw7 4heLLq67zL73TFeDIaeDxa3vId7M/hwCS4rnl+muDarST3jYsDny8tzqnwe3Ly+/LuUdc2aj 2sHcwjlfu4xm+8ew/P+Q51Lc8OrU2s7/hw79X/z6Mrfd/gKRmOSNzlPknVyOfjNarsRSnJFo qMVcVJwIAHyND9fMAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupjluLIzCtJLcpLzFFi42I5/e/4Zd3Th1ijDA4dVrRY/YvToqV/JrPF tM+32S2utP9kt9j48CyrxYobpxgt5n56zmjx+ug/ZgcOj8V7XjJ5PLv5n9Gjb8sqxgDmKC6b lNSczLLUIn27BK6MY49fMxc85q/42bGEvYHxMU8XIyeHhICJxPStf9khbDGJC/fWs3UxcnEI CSxhlJh1fS0rhNPKJHH70B+wKjYBHYlTq48wgtgiAtISr3vfgBUxC+xkknjY8wgsISxgL3Fm 4VMwm0VAVaLz5HygsRwcvAJuEg1tshDb5CRunutkBrE5Bdwlbh2cwApiCwGVTJi/nm0CI+8C RoZVjCKppcW56bnFhnrFibnFpXnpesn5uZsYgaG07djPzTsYL20MPsQowMGoxMPr8YAlSog1 say4MvcQowQHs5IIb+A81igh3pTEyqrUovz4otKc1OJDjNIcLErivL17VkcKCaQnlqRmp6YW pBbBZJk4OKUaGMWeWHoWyPMKJnC8t/D5cK2/ZN7ELJ73+3jVzv/tPB8aXbh/7/LpPB1/n7e5 HnD+XSBVMnWZxokJdzeI+75S7QiRe5/H8eEk4zKl34pH1gR7maedLzx+KDx8R/ySuQ9uT/wt c6i039a3RkdsW9EFo7h3Nf1Jhw4vevov93Nj4n4Hr5W771jdy1FiKc5INNRiLipOBAAsFrEV IQIAAA== X-CMS-MailID: 20171110151627eucas1p282f5cea59e60b0b5043587be8a5c798e X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20171110151627eucas1p282f5cea59e60b0b5043587be8a5c798e X-RootMTR: 20171110151627eucas1p282f5cea59e60b0b5043587be8a5c798e References: <1510326972-26479-1-git-send-email-i.maximets@samsung.com> X-Spam-Status: No, score=-4.9 required=5.0 tests=DKIM_SIGNED, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD,T_DKIM_INVALID autolearn=disabled version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Robert Wojciechowicz , Heetae Ahn , Ilya Maximets Subject: [ovs-dev] [PATCH v3 3/3] netdev-dpdk: Remove unused MAX_NB_MBUF. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org MAX_NB_MBUF was used as a default mempool size for almost all ports. Not used since new per-port mempool allocation introduced. MIN_NB_MBUF still used as a lower limit. CC: Robert Wojciechowicz Fixes: d555d9bded5f ("netdev-dpdk: Create separate memory pool for each port.") Signed-off-by: Ilya Maximets Acked-by: Antonio Fischetti --- lib/netdev-dpdk.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 82f41db..9ceb109 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -89,23 +89,13 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); #define NETDEV_DPDK_MBUF_ALIGN 1024 #define NETDEV_DPDK_MAX_PKT_LEN 9728 -/* Max and min number of packets in the mempool. OVS tries to allocate a - * mempool with MAX_NB_MBUF: if this fails (because the system doesn't have - * enough hugepages) we keep halving the number until the allocation succeeds - * or we reach MIN_NB_MBUF */ - -#define MAX_NB_MBUF (4096 * 64) +/* Min number of packets in the mempool. OVS tries to allocate a mempool with + * roughly estimated number of mbufs: if this fails (because the system doesn't + * have enough hugepages) we keep halving the number until the allocation + * succeeds or we reach MIN_NB_MBUF */ #define MIN_NB_MBUF (4096 * 4) #define MP_CACHE_SZ RTE_MEMPOOL_CACHE_MAX_SIZE -/* MAX_NB_MBUF can be divided by 2 many times, until MIN_NB_MBUF */ -BUILD_ASSERT_DECL(MAX_NB_MBUF % ROUND_DOWN_POW2(MAX_NB_MBUF/MIN_NB_MBUF) == 0); - -/* The smallest possible NB_MBUF that we're going to try should be a multiple - * of MP_CACHE_SZ. This is advised by DPDK documentation. */ -BUILD_ASSERT_DECL((MAX_NB_MBUF / ROUND_DOWN_POW2(MAX_NB_MBUF/MIN_NB_MBUF)) - % MP_CACHE_SZ == 0); - /* * DPDK XSTATS Counter names definition */