From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f176.google.com (mail-wr0-f176.google.com [209.85.128.176]) by dpdk.org (Postfix) with ESMTP id A70012B9F for ; Fri, 5 May 2017 13:26:05 +0200 (CEST) Received: by mail-wr0-f176.google.com with SMTP id z52so2043167wrc.2 for ; Fri, 05 May 2017 04:26:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oCkzrtSarMWujzFBqjOfEFifBbEViUnrIaQd08vuC/c=; b=Go9f6sNX3untPEaRgbo6nVBdj44kept/17+CcNA7o3BxO98POBv+W2YLgyHdkn6bIL TLUczJaQujNal5qUxj0vEK7qe6M+IjSqVJEKXW+sH4X/pAeL5FymeJYR/7C3JdjRjSD3 pXi7tnHmrFoLMv68K44iu+ycQ583JUlejA0IO0atR5gJ9fRYxOHoKbdrHjqC3EPNPFCN wypz304cvH8+qEbXyw/AdmfLRhsdtxuCw8kzuTJPcLQ0o2YFnpG7w/mW2aix3wdqIJig 3wrUpGSkyJEJ0gQlLGXF6vPjLczCLRDpVPMZ+ub2QMssYKHq5Hkq3jsuzUL/gtX043Md o+rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oCkzrtSarMWujzFBqjOfEFifBbEViUnrIaQd08vuC/c=; b=qwTUwtZk9PDUs5gm8sKuuqZcGnA/noJry6ykm4A7D00RCnZoogtqISMj5gyk8F9/X/ eyAwGzYFlGmX25XAVogdm5HLAcLCuUhhJWZf5gUcB1hJysT2eWV4g5O/77LYhJyO+KT+ RR6yVptQEKsR+gUPYbVtMYnyAEjEC+c2ciha1l541OjbTYBHDlVFpT/45T5nD7P4EYmZ m2XXZDj93eFfIXEVZwtO31bCltSdDDSITJnK1AkUn8DeGiuwGYQZ9zvZF6Zw6DpReDa+ CNqzVLiDhO2L651XBRPEuNg/ABo6MX1fKBUg02jsxWr3Y3hFO8zAn7PIWEM7wa3ITkFZ vuZg== X-Gm-Message-State: AN3rC/5CeZzn/VT+Mw0JWxX/2IZcpxOHcq8JSWLPUGFJw0dhOaLOHTbM mxQ+NhJ75cGHbkESCgE= X-Received: by 10.223.163.21 with SMTP id c21mr25273969wrb.38.1493983565202; Fri, 05 May 2017 04:26:05 -0700 (PDT) Received: from platinum (2a01cb0c03c651000226b0fffeed02fc.ipv6.abo.wanadoo.fr. [2a01:cb0c:3c6:5100:226:b0ff:feed:2fc]) by smtp.gmail.com with ESMTPSA id p197sm1274321wmb.34.2017.05.05.04.26.04 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 05 May 2017 04:26:05 -0700 (PDT) Date: Fri, 5 May 2017 13:26:02 +0200 From: Olivier Matz To: Gregory Etelson Cc: dev@dpdk.org Message-ID: <20170505132602.13731734@platinum> In-Reply-To: <4486793.msUSBAJSWm@polaris> References: <4486793.msUSBAJSWm@polaris> X-Mailer: Claws Mail 3.14.1 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] custom align for mempool elements 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: Fri, 05 May 2017 11:26:05 -0000 Hi Gregory, On Wed, 26 Apr 2017 07:00:49 +0300, Gregory Etelson wrote: > Signed-off-by: Gregory Etelson > --- > lib/librte_mempool/rte_mempool.c | 27 ++++++++++++++++++++------- > lib/librte_mempool/rte_mempool.h | 1 + > 2 files changed, 21 insertions(+), 7 deletions(-) > > diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c > index f65310f..c780df3 100644 > --- a/lib/librte_mempool/rte_mempool.c > +++ b/lib/librte_mempool/rte_mempool.c > @@ -382,7 +382,7 @@ rte_mempool_populate_phys(struct rte_mempool *mp, char *vaddr, > if (mp->flags & MEMPOOL_F_NO_CACHE_ALIGN) > off = RTE_PTR_ALIGN_CEIL(vaddr, 8) - vaddr; > else > - off = RTE_PTR_ALIGN_CEIL(vaddr, RTE_CACHE_LINE_SIZE) - vaddr; > + off = RTE_PTR_ALIGN_CEIL(vaddr, mp->elt_align) - vaddr; > > while (off + total_elt_sz <= len && mp->populated_size < mp->size) { > off += mp->header_size; > @@ -392,6 +392,7 @@ rte_mempool_populate_phys(struct rte_mempool *mp, char *vaddr, > else > mempool_add_elem(mp, (char *)vaddr + off, paddr + off); > off += mp->elt_size + mp->trailer_size; > + off = RTE_ALIGN_CEIL(off, mp->elt_align); > i++; > } > > @@ -508,6 +509,20 @@ rte_mempool_populate_virt(struct rte_mempool *mp, char *addr, > return ret; > } > > +static uint32_t > +mempool_default_elt_aligment(void) > +{ > + uint32_t align; > + if (rte_xen_dom0_supported()) { > + align = RTE_PGSIZE_2M;; > + } else if (rte_eal_has_hugepages()) { > + align = RTE_CACHE_LINE_SIZE; > + } else { > + align = getpagesize(); > + } > + return align; > +} > + > /* Default function to populate the mempool: allocate memory in memzones, > * and populate them. Return the number of objects added, or a negative > * value on error. > @@ -518,7 +533,7 @@ rte_mempool_populate_default(struct rte_mempool *mp) > int mz_flags = RTE_MEMZONE_1GB|RTE_MEMZONE_SIZE_HINT_ONLY; > char mz_name[RTE_MEMZONE_NAMESIZE]; > const struct rte_memzone *mz; > - size_t size, total_elt_sz, align, pg_sz, pg_shift; > + size_t size, total_elt_sz, pg_sz, pg_shift; > phys_addr_t paddr; > unsigned mz_id, n; > int ret; > @@ -530,15 +545,12 @@ rte_mempool_populate_default(struct rte_mempool *mp) > if (rte_xen_dom0_supported()) { > pg_sz = RTE_PGSIZE_2M; > pg_shift = rte_bsf32(pg_sz); > - align = pg_sz; > } else if (rte_eal_has_hugepages()) { > pg_shift = 0; /* not needed, zone is physically contiguous */ > pg_sz = 0; > - align = RTE_CACHE_LINE_SIZE; > } else { > pg_sz = getpagesize(); > pg_shift = rte_bsf32(pg_sz); > - align = pg_sz; > } > > total_elt_sz = mp->header_size + mp->elt_size + mp->trailer_size; > @@ -553,11 +565,11 @@ rte_mempool_populate_default(struct rte_mempool *mp) > } > > mz = rte_memzone_reserve_aligned(mz_name, size, > - mp->socket_id, mz_flags, align); > + mp->socket_id, mz_flags, mp->elt_align); > /* not enough memory, retry with the biggest zone we have */ > if (mz == NULL) > mz = rte_memzone_reserve_aligned(mz_name, 0, > - mp->socket_id, mz_flags, align); > + mp->socket_id, mz_flags, mp->elt_align); > if (mz == NULL) { > ret = -rte_errno; > goto fail; > @@ -827,6 +839,7 @@ rte_mempool_create_empty(const char *name, unsigned n, unsigned elt_size, > /* Size of default caches, zero means disabled. */ > mp->cache_size = cache_size; > mp->private_data_size = private_data_size; > + mp->elt_align = mempool_default_elt_aligment(); > STAILQ_INIT(&mp->elt_list); > STAILQ_INIT(&mp->mem_list); > > diff --git a/lib/librte_mempool/rte_mempool.h b/lib/librte_mempool/rte_mempool.h > index 48bc8ea..6631973 100644 > --- a/lib/librte_mempool/rte_mempool.h > +++ b/lib/librte_mempool/rte_mempool.h > @@ -245,6 +245,7 @@ struct rte_mempool { > * this mempool. > */ > int32_t ops_index; > + uint32_t elt_align; > > struct rte_mempool_cache *local_cache; /**< Per-lcore local cache */ > It looks the patch will break the ABI (the mempool structure), so it has to follow the abi deprecation process (= a notice in 17.05 and the patch for 17.08). Could you give us some details about why you need such feature, how you use it (since no API is added)? Thanks, Olivier