From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by dpdk.org (Postfix) with ESMTP id 5F6652C18 for ; Thu, 3 May 2018 12:11:44 +0200 (CEST) Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w43A9dHD073730 for ; Thu, 3 May 2018 06:11:43 -0400 Received: from e06smtp10.uk.ibm.com (e06smtp10.uk.ibm.com [195.75.94.106]) by mx0a-001b2d01.pphosted.com with ESMTP id 2hqxwrm60g-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 03 May 2018 06:11:43 -0400 Received: from localhost by e06smtp10.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 3 May 2018 11:11:41 +0100 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp10.uk.ibm.com (192.168.101.140) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 3 May 2018 11:11:39 +0100 Received: from d06av25.portsmouth.uk.ibm.com (d06av25.portsmouth.uk.ibm.com [9.149.105.61]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w43ABcWp6291948; Thu, 3 May 2018 10:11:38 GMT Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D055A11C050; Thu, 3 May 2018 11:03:12 +0100 (BST) Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B780811C054; Thu, 3 May 2018 11:03:11 +0100 (BST) Received: from chozha.in.ibm.com (unknown [9.124.35.140]) by d06av25.portsmouth.uk.ibm.com (Postfix) with ESMTP; Thu, 3 May 2018 11:03:11 +0100 (BST) From: Gowrishankar To: Sergio Gonzalez Monroy Cc: Anatoly Burakov , dev@dpdk.org, Thomas Monjalon , Gowrishankar Muthukrishnan Date: Thu, 3 May 2018 15:41:34 +0530 X-Mailer: git-send-email 1.9.1 X-TM-AS-GCONF: 00 x-cbid: 18050310-0040-0000-0000-000004358042 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18050310-0041-0000-0000-00002639A2BE Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2018-05-03_05:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=2 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1805030095 Subject: [dpdk-dev] [PATCH 0/2] eal/malloc: fix wrong heap initialization over multiple memsegs 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 10:11:44 -0000 From: Gowrishankar Muthukrishnan When there are multiple memsegs (each per hugepage), there are couple of problems observed: 1. Same heap size index is always chosen to add new malloc_elems again and again, while there is an increasing heap size actually. Hence, when there is memalloc request for size *more than* elem->size available in free heap, malloc_heap_alloc would fail. In elem_start_pt(), we are actually relying on elem->size at the best, for finding suitable element, which is lower than requested size, in this case. Hence, patch 1 in this series addresses this by merging contiguous malloc_elem (by virt addresses), so that there is better chance of finding suitable elem for the requested size. 2. Even after resizing the heap malloc_elems, its free_head index is still the same, as the memsegs are just added in every malloc_ elem. If larger memory is requested in rte_malloc, in a way that, heap index of requested size is beyond the slot where the entire heap is available, malloc_heap_alloc would fail. Because, at the time of heap init, only the lower index is always chosen to fill up memsegs. Hence, patch 2 addresses this by moving the list of malloc_elems into new slot in heap, as its size grows. We encountered these situations as we run ip_reassembly example app, when multiple segments are created in VA (when overcommit hugepages set in powerpc arch). These problems are found only in the current releases (until v18.05 which carries new implementation for dynamic memory allocation). These patches are tested with unit tests as well as some of the examples apps. I request more testing if possible, on other archs as these are problems in available LTS codes as well. Signed-off-by: Gowrishankar Muthukrishnan Gowrishankar Muthukrishnan (2): eal/malloc: merge malloc_elems in heap if they are contiguous eal/malloc: fix heap index to correctly insert memseg lib/librte_eal/common/malloc_heap.c | 52 ++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) -- 1.9.1