From patchwork Thu Jul 20 09:22:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: fengchengwen X-Patchwork-Id: 129660 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0C96F42EBF; Thu, 20 Jul 2023 11:31:42 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D0C4342D2C; Thu, 20 Jul 2023 11:31:16 +0200 (CEST) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 4F80841143 for ; Thu, 20 Jul 2023 11:31:10 +0200 (CEST) Received: from dggpeml100024.china.huawei.com (unknown [172.30.72.53]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4R66mc201lztRBL; Thu, 20 Jul 2023 17:28:00 +0800 (CST) Received: from localhost.localdomain (10.50.163.32) by dggpeml100024.china.huawei.com (7.185.36.115) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Thu, 20 Jul 2023 17:31:07 +0800 From: Chengwen Feng To: , CC: , , , , , , Subject: [PATCH v19 0/6] introduce memarea library Date: Thu, 20 Jul 2023 09:22:48 +0000 Message-ID: <20230720092254.54157-1-fengchengwen@huawei.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220721044648.6817-1-fengchengwen@huawei.com> References: <20220721044648.6817-1-fengchengwen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.163.32] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggpeml100024.china.huawei.com (7.185.36.115) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The memarea library is an allocator of variable-size object which based on a memory region. The main features are as follows: - The memory region can be initialized from the following memory sources: 1. HEAP: e.g. invoke rte_malloc_socket. 2. LIBC: e.g. invoke posix_memalign. 3. Another memarea: it can be from another memarea. - It supports MT-safe as long as it's specified at creation time. - The address returned by the allocator is align to 8B. Note: a) The memarea is oriented towards the application layer, which could provides 'region-based memory management' [1] function. b) The eal library also provide memory zone/heap management, but these are tied to huge pages management. [1] https://en.wikipedia.org/wiki/Region-based_memory_management Chengwen Feng (6): memarea: introduce memarea library test/memarea: support memarea test memarea: support alloc and free API test/memarea: support alloc and free API test memarea: support dump API test/memarea: support dump API test --- v19: * address Anatoly's comments about test_memarea: more meaningful error tips, and display really allocated num of dump memarea. * in that test_memarea, explicitly set rte_errno to zero if test that rte_errno is a non-zero value. * don't support windows platform because CI unit-test always failed with: MALLOC_PERTURB_=169 DPDK_TEST=memarea_autotest v18: * v17 reports DPDK CI apply failed, but it maybe the CI self problem because I apply the serial to main and next-net, both are successful, so this version just resend v17. v17: * address Anatoly's comments: add note and enum for cookie and typo. v16: * fix compile failed when clang with thread-safety-analysis (by disable annotate_locks in lib/memarea/meson.build). * add reserved field for 'struct rte_memarea_param' which address Stephen's comments. * fix typo. v15: * rebase 23.07 * address Anatoly's mostly comments: use rte_errno, abstract cookie helper, more comment about critical function, rename add with split, doc limitation. v14: * address Stephen's comments: RTE_MEMAREA_LOG use easy impl and add __func__ print. v13: * address Morten's comments: make debug cookies optional, controlled by RTE_LIBRTE_MEMAREA_DEBUG; disabled by default. * reduce management data overhead. v12: * remove rte_memarea_refcnt_update() API which address Dongdong's comments. * refine the variable naming. * fix some bugs. v11: * rebase 23.03 * remove "app/test: add memarea to malloc-perf-autotest" because the two algorithm are not comparable which also address previous comments. v10: * support windows platform. * add rte_memarea.libc perftest to malloc-perf-autotest. v9: * address Dmitry's comments. * drop features of SOURCE_USER and backup memarea mechanism. * rename rte_memarea_update_refcnt to rte_memarea_refcnt_update to keep with rte_mbuf_refcnt_update name style. * fix memarea perftest compile failed at windows platform. * fix spell warning. v8: * address Mattias's comments (rename ALG_DEFAULT with ALG_NEXTFIT). * small feature patches are combined. * enhanced backup memory mechanism. * add memarea to malloc-perf-autotest. * other tiny naming optimize. v7: * repost patches as there are spread over different series in patchwork. v6: * address Mattias's comments. v5: * fix 09/10 patch spell warning. v4: * repost patches as there are spread over different series in patchwork. v3: * add memory source of RTE memory. * add algorithm field to facilitate the introduction of new algorithms. * fix memarea log don't output problem. v2: * fix compile issues reported by dpdk-test-report. * address Dimitry and Jerin's comments. * add no MT-safe test. MAINTAINERS | 6 + app/test/meson.build | 2 + app/test/test_memarea.c | 438 +++++++++++++++++++++++ doc/api/doxy-api-index.md | 3 +- doc/api/doxy-api.conf.in | 1 + doc/guides/prog_guide/index.rst | 1 + doc/guides/prog_guide/memarea_lib.rst | 57 +++ doc/guides/rel_notes/release_23_07.rst | 6 + lib/memarea/memarea_private.h | 126 +++++++ lib/memarea/meson.build | 18 + lib/memarea/rte_memarea.c | 463 +++++++++++++++++++++++++ lib/memarea/rte_memarea.h | 208 +++++++++++ lib/memarea/version.map | 15 + lib/meson.build | 1 + 14 files changed, 1344 insertions(+), 1 deletion(-) create mode 100644 app/test/test_memarea.c create mode 100644 doc/guides/prog_guide/memarea_lib.rst create mode 100644 lib/memarea/memarea_private.h create mode 100644 lib/memarea/meson.build create mode 100644 lib/memarea/rte_memarea.c create mode 100644 lib/memarea/rte_memarea.h create mode 100644 lib/memarea/version.map