From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Burakov, Anatoly" Subject: Re: [PATCH 9/9] memalloc: allocate memory in reverse Date: Tue, 24 Jul 2018 11:10:11 +0100 Message-ID: <1f5ef2a7-739e-b90f-8b04-a2a0abe234fa@intel.com> References: <914a5f584be81d6c129b35bc8e358774854d8960.1528749451.git.anatoly.burakov@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit To: dev@dpdk.org, Thomas Monjalon Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id 52DE598 for ; Tue, 24 Jul 2018 12:12:41 +0200 (CEST) In-Reply-To: <914a5f584be81d6c129b35bc8e358774854d8960.1528749451.git.anatoly.burakov@intel.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 11-Jun-18 9:55 PM, Anatoly Burakov wrote: > Currently, all hugepages are allocated from lower VA address to > higher VA address, while malloc heap allocates from higher VA > address to lower VA address. This results in heap fragmentation > over time due to multiple reserves leaving small space below the > allocated elements. > > Fix this by allocating VA memory from the top, thereby reducing > fragmentation and lowering overall memory usage. > > Signed-off-by: Anatoly Burakov > --- > lib/librte_eal/linuxapp/eal/eal_memalloc.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/lib/librte_eal/linuxapp/eal/eal_memalloc.c b/lib/librte_eal/linuxapp/eal/eal_memalloc.c > index 8c11f98c9..d35fb52c4 100644 > --- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c > +++ b/lib/librte_eal/linuxapp/eal/eal_memalloc.c > @@ -682,7 +682,8 @@ alloc_seg_walk(const struct rte_memseg_list *msl, void *arg) > need = wa->n_segs; > > /* try finding space in memseg list */ > - cur_idx = rte_fbarray_find_next_n_free(&cur_msl->memseg_arr, 0, need); > + cur_idx = rte_fbarray_find_prev_n_free(&cur_msl->memseg_arr, > + cur_msl->memseg_arr.len - 1, need); > if (cur_idx < 0) > return 0; > start_idx = cur_idx; > Hi Thomas, We have discovered a few regressions in virtio/vhost use cases due to this patch. Virtio expects to map all segments starting from 0 address, and this patch breaks that assumption. Can we revert this for 18.08? It will be reintroduced in 18.11 along with fixes for virtio/vhost fixes to account for this change. -- Thanks, Anatoly