From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id 58FE3231E for ; Thu, 3 May 2018 10:03:11 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 May 2018 01:03:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,357,1520924400"; d="scan'208";a="51154944" Received: from aburakov-mobl.ger.corp.intel.com (HELO [10.252.18.186]) ([10.252.18.186]) by fmsmga004.fm.intel.com with ESMTP; 03 May 2018 01:03:04 -0700 To: Olivier Matz , dev@dpdk.org References: <20180502201349.15568-1-olivier.matz@6wind.com> From: "Burakov, Anatoly" Message-ID: <0fa5ec0b-d528-12b1-d3f2-680b5f05242b@intel.com> Date: Thu, 3 May 2018 09:03:02 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180502201349.15568-1-olivier.matz@6wind.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH] mempool: fix alignment of memzone length when populating 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: , X-List-Received-Date: Thu, 03 May 2018 08:03:11 -0000 On 02-May-18 9:13 PM, Olivier Matz wrote: > When populating a mempool with the default function, if there is not > enough virtually contiguous memory for the whole mempool, it will be > populated with several chunks. A chunk of the maximum available length > is requested with: > > mz = rte_memzone_reserve_aligned(..., len=0, ..., align=x) > > If align is smaller than the page size, the length of the memzone may > not be a multiple of the page size. This makes > rte_mempool_populate_virt() to fail because it requires a page-aligned > length. This patch forces the memzone length to be a multiple of page > size. > > The problem can be reproduced easily by allocating more than available > memory: > ./build/app/testpmd -l 0,1 -- --total-num-mbufs=65536 > ... > Cause: Creation of mbuf pool for socket 0 failed: Invalid argument > > After the patch, the error code is correct: > ./build/app/testpmd -l 0,1 -- --total-num-mbufs=65536 > ... > Cause: Creation of mbuf pool for socket 0 failed: Cannot allocate memory > > Signed-off-by: Olivier Matz > Fixes: ba0009560c30 ("mempool: support new allocation methods") > --- > > Hi Anatoly, > > Another option to fix this issue could be to ensure that > rte_memzone_reserve_aligned(..., len=0, ..., align=x) returns a length > that is multiple of page size. Something like: > > mz = rte_memzone_reserve_aligned(mz_name, 0, > - mp->socket_id, flags, align); > + mp->socket_id, flags, RTE_MAX(pg_sz, align)); > > Let me know if you prefer this way. > > Thanks, > Olivier > > > lib/librte_mempool/rte_mempool.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c > index cf5d124ec..78c3e95ec 100644 > --- a/lib/librte_mempool/rte_mempool.c > +++ b/lib/librte_mempool/rte_mempool.c > @@ -709,7 +709,7 @@ rte_mempool_populate_default(struct rte_mempool *mp) > (void *)(uintptr_t)mz); > else > ret = rte_mempool_populate_virt(mp, mz->addr, > - mz->len, pg_sz, > + RTE_ALIGN_FLOOR(mz->len, pg_sz), pg_sz, > rte_mempool_memchunk_mz_free, > (void *)(uintptr_t)mz); > if (ret < 0) { > Either way is OK by me. Acked-by: Anatoly Burakov -- Thanks, Anatoly