From patchwork Wed Dec 20 11:03:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Vipin Varghese X-Patchwork-Id: 135393 X-Patchwork-Delegate: thomas@monjalon.net 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 0CE9643736; Wed, 20 Dec 2023 12:04:00 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A840E402D9; Wed, 20 Dec 2023 12:03:59 +0100 (CET) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2064.outbound.protection.outlook.com [40.107.212.64]) by mails.dpdk.org (Postfix) with ESMTP id 2F6C740291 for ; Wed, 20 Dec 2023 12:03:58 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hLylXCkot1J3iiTHVf6xkd7w6VF7oxQ6zhHkZnVOgKqV9xqkW9/bCqXMlg2wNlo96VlOCz/DL+ECfd4YbsY+hVmHBpxXI5IYklFtWIO0sP+qZ7k3DTHMb7xTYLtCcH8YKELsS7CssS6mRgoWHLZxZdjG3qDT4cDIaU5644L+5LHqjP1Y7q9/6xCAZxIzCxQ+iblf4FsQ642Xh4MZPpN4P+Kzzw484+oNqf0z/bKmUU5jzEKOUSfP3QnKCT6aejsHxdP2Nvax1jaqS3HLfezGj1DZCxAlGNFuyppJiQa0auhbSRWBrbUdfZSf8sWlgSWlqu1wNTVg0qqU7ZRnK2YlHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=iE6UtcEtaK6pqMPfRCZLRzWvsy07jgTmPN7P0MN+vZM=; b=ElxLEQ0dHrywYD4hOWC4CZmzPpCEX/1tPMEWhcr9rvlLdJJgj1clzEie3DKmmUXwzqMppv6P818l+AZA1jCt0Cbm5ntAE+xlSScoOVlsEK4n/S2uDJ8xAYG9XVrw3VgFCHXZ5apktNSsggpYhhWSXkB4MhuOnxj5M4Pos7hfBXmiS5rtv+nGtcQqkxvmjL+uo2Wi3WZ/iL8WGEhgfGG8xmoLZfRGsnPWUQw8y/pHQP5mp18foMNA1nsYhkEE/SuBBjaAv0z5/3Rpkwz340MKhkfnTig7FvFmR1XlxYiwmKWAZd79DXLo64QJQYjWCXuRfediwOpEZMzVdOUK1tBsCQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=dpdk.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iE6UtcEtaK6pqMPfRCZLRzWvsy07jgTmPN7P0MN+vZM=; b=oIuMMqiD88N+TDPp7XLx9lRnSA4YLV0fUCCBfR5YM2/D/l5dNNMRIj1hECP1KQurY6F3ZsByo7Iwy7MrMsTzyI7Pj25vKAlykp+Sij9r6m4WOYsGqLN0aHdYPF0Fc/Mndpqt4ugaJqABnkLJ7gJpAgZD1kSKDOeLd7W86Bj6Z4U= Received: from DS7P222CA0026.NAMP222.PROD.OUTLOOK.COM (2603:10b6:8:2e::32) by SJ2PR12MB8160.namprd12.prod.outlook.com (2603:10b6:a03:4af::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7091.38; Wed, 20 Dec 2023 11:03:55 +0000 Received: from CY4PEPF0000EE38.namprd03.prod.outlook.com (2603:10b6:8:2e:cafe::b9) by DS7P222CA0026.outlook.office365.com (2603:10b6:8:2e::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.18 via Frontend Transport; Wed, 20 Dec 2023 11:03:55 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by CY4PEPF0000EE38.mail.protection.outlook.com (10.167.242.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7113.14 via Frontend Transport; Wed, 20 Dec 2023 11:03:55 +0000 Received: from BLR-5CG134626B.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.34; Wed, 20 Dec 2023 05:03:52 -0600 From: Vipin Varghese To: , , CC: Vipin Varghese , =?utf-8?q?Morten_Br=C3=B8rup?= , Thiyagrajan P Subject: [PATCH v2] app/dma-perf: replace pktmbuf with mempool objects Date: Wed, 20 Dec 2023 16:33:33 +0530 Message-ID: <20231220110333.619-1-vipin.varghese@amd.com> X-Mailer: git-send-email 2.41.0.windows.3 In-Reply-To: <20231212103746.1910-1-vipin.varghese@amd.com> References: <20231212103746.1910-1-vipin.varghese@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EE38:EE_|SJ2PR12MB8160:EE_ X-MS-Office365-Filtering-Correlation-Id: 97111f0f-72e1-406d-e0f4-08dc014b5bb0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8EzjFTutszPRPVoGuNx4otgzOSUCRJ/UzKzq3BXHg+DI9hIeYX/WBr+vAIfLYUg4layrCofcfsTPH2iDN4TDqQ5ozo4w/FfZX1qmBGAfjrAg1DTicAYvPZWCE1MU5sVwUJTTiZ30lPmT6+ik7pAO2zpfh2t4m7E4HJho03diKNcaE4w7xSvH0EFhjC+KkmuF3lZOey4JMBr0tOGoboPBlb6xYEDTK1QRQ88izKeY+6y47GP1BnlEOO/Gs+VTw5rzxbMH05IuHrtPeyKh+vC1jDcGUtEBQsmriAAGIYXbfLKAkVs7Vp9xDkhD4qYiXpo4tWitq2vrz3dMbkXtpuXYAxndDHbyfmIA+69xYktpJ2dvzIxJeojjubok9n7VUyAAAua/TMt4PRaIWrp4xfBNROUaSiOKSrIRkNxlU41fz8xc9ypq+0/c1F0jqI86qI5f4Mjg3mWovoupOcCS8sNoGXTaeHHd6j8BV5DHalCDgin2SEegM4ArZ8tCrjO+7TeLzOpyL89PwL8BddMX3n1RuZj+mKHL8LVEY6b6S6wc7RyI0J0qYMAlPz6JSOHz1ti0gbKrH/SgyOniGU1csmcbbUjzaxWv2SlRcZ/uTxv1S0ksga7PAhmkhHUHYseonM+LA0odOYSSdWqSzkD8TMZlEIkB9wIxtdrsibY4DAdmLUtivCyYTTpMAxrAwYIf9wKxWPPodOfeGgemXqfSTIp9G7sEqx9CEiXsnbc8/fak5Y/fjnE+WobHD82SXpWQFQh3x+nu9QQ6hzat0vq91WlVo7o8N5f/zwebdsjeoLRWhyE= X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230031)(4636009)(346002)(376002)(39860400002)(136003)(396003)(230922051799003)(64100799003)(1800799012)(186009)(451199024)(82310400011)(40470700004)(46966006)(36840700001)(40460700003)(8936002)(47076005)(44832011)(36860700001)(336012)(426003)(83380400001)(81166007)(41300700001)(356005)(82740400003)(86362001)(5660300002)(54906003)(316002)(110136005)(8676002)(1076003)(16526019)(70206006)(478600001)(26005)(7696005)(4326008)(6666004)(2906002)(70586007)(2616005)(36756003)(40480700001)(2101003)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Dec 2023 11:03:55.1167 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 97111f0f-72e1-406d-e0f4-08dc014b5bb0 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EE38.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8160 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 From: Vipin Varghese Replace pktmbuf pool with mempool, this allows increase in MOPS especially in lower buffer size. Using Mempool, allows to reduce the extra CPU cycles. Changes made are 1. pktmbuf pool create with mempool create. 2. create src & dst pointer array from the appropaite numa. 3. use get pool and put for mempool objects. 4. remove pktmbuf_mtod for dma and cpu memcpy. v2 changes: - add ACK from Morten Brørup v1 changes: - pktmbuf pool create with mempool create. - create src & dst pointer array from the appropaite numa. - use get pool and put for mempool objects. - remove pktmbuf_mtod for dma and cpu memcpy. Test Results for pktmbuf vs mempool: ==================================== Format: Buffer Size | % AVG cycles | % AVG Gbps Category-1: HW-DSA ------------------- 64|-13.11| 14.97 128|-41.49| 0.41 256| -1.85| 1.20 512| -9.38| 8.81 1024| 1.82| -2.00 1518| 0.00| -0.80 2048| 1.03| -0.91 4096| 0.00| -0.35 8192| 0.07| -0.08 Category-2: MEMCPY ------------------- 64|-12.50|14.14 128|-40.63|67.26 256|-38.78|59.35 512|-30.26|43.36 1024|-21.80|27.04 1518|-16.23|19.33 2048|-14.75|16.81 4096| -9.56|10.01 8192| -3.32| 3.12 Signed-off-by: Vipin Varghese Acked-by: Morten Brørup Tested-by: Thiyagrajan P --- --- app/test-dma-perf/benchmark.c | 74 +++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 30 deletions(-) diff --git a/app/test-dma-perf/benchmark.c b/app/test-dma-perf/benchmark.c index 9b1f58c78c..dc6f16cc01 100644 --- a/app/test-dma-perf/benchmark.c +++ b/app/test-dma-perf/benchmark.c @@ -43,8 +43,8 @@ struct lcore_params { uint16_t kick_batch; uint32_t buf_size; uint16_t test_secs; - struct rte_mbuf **srcs; - struct rte_mbuf **dsts; + void **srcs; + void **dsts; volatile struct worker_info worker_info; }; @@ -110,17 +110,17 @@ output_result(uint8_t scenario_id, uint32_t lcore_id, char *dma_name, uint16_t r } static inline void -cache_flush_buf(__rte_unused struct rte_mbuf **array, +cache_flush_buf(__rte_unused void **array, __rte_unused uint32_t buf_size, __rte_unused uint32_t nr_buf) { #ifdef RTE_ARCH_X86_64 char *data; - struct rte_mbuf **srcs = array; + void **srcs = array; uint32_t i, offset; for (i = 0; i < nr_buf; i++) { - data = rte_pktmbuf_mtod(srcs[i], char *); + data = (char *) srcs[i]; for (offset = 0; offset < buf_size; offset += 64) __builtin_ia32_clflush(data + offset); } @@ -224,8 +224,8 @@ do_dma_mem_copy(void *p) const uint32_t nr_buf = para->nr_buf; const uint16_t kick_batch = para->kick_batch; const uint32_t buf_size = para->buf_size; - struct rte_mbuf **srcs = para->srcs; - struct rte_mbuf **dsts = para->dsts; + void **srcs = para->srcs; + void **dsts = para->dsts; uint16_t nr_cpl; uint64_t async_cnt = 0; uint32_t i; @@ -241,8 +241,12 @@ do_dma_mem_copy(void *p) while (1) { for (i = 0; i < nr_buf; i++) { dma_copy: - ret = rte_dma_copy(dev_id, 0, rte_mbuf_data_iova(srcs[i]), - rte_mbuf_data_iova(dsts[i]), buf_size, 0); + ret = rte_dma_copy(dev_id, + 0, + (rte_iova_t) srcs[i], + (rte_iova_t) dsts[i], + buf_size, + 0); if (unlikely(ret < 0)) { if (ret == -ENOSPC) { do_dma_submit_and_poll(dev_id, &async_cnt, worker_info); @@ -276,8 +280,8 @@ do_cpu_mem_copy(void *p) volatile struct worker_info *worker_info = &(para->worker_info); const uint32_t nr_buf = para->nr_buf; const uint32_t buf_size = para->buf_size; - struct rte_mbuf **srcs = para->srcs; - struct rte_mbuf **dsts = para->dsts; + void **srcs = para->srcs; + void **dsts = para->dsts; uint32_t i; worker_info->stop_flag = false; @@ -288,8 +292,8 @@ do_cpu_mem_copy(void *p) while (1) { for (i = 0; i < nr_buf; i++) { - const void *src = rte_pktmbuf_mtod(dsts[i], void *); - void *dst = rte_pktmbuf_mtod(srcs[i], void *); + const void *src = (void *) dsts[i]; + void *dst = (void *) srcs[i]; /* copy buffer form src to dst */ rte_memcpy(dst, src, (size_t)buf_size); @@ -303,8 +307,8 @@ do_cpu_mem_copy(void *p) } static int -setup_memory_env(struct test_configure *cfg, struct rte_mbuf ***srcs, - struct rte_mbuf ***dsts) +setup_memory_env(struct test_configure *cfg, void ***srcs, + void ***dsts) { unsigned int buf_size = cfg->buf_size.cur; unsigned int nr_sockets; @@ -317,47 +321,57 @@ setup_memory_env(struct test_configure *cfg, struct rte_mbuf ***srcs, return -1; } - src_pool = rte_pktmbuf_pool_create("Benchmark_DMA_SRC", + src_pool = rte_mempool_create("Benchmark_DMA_SRC", nr_buf, + buf_size, 0, 0, - buf_size + RTE_PKTMBUF_HEADROOM, - cfg->src_numa_node); + NULL, + NULL, + NULL, + NULL, + cfg->src_numa_node, + RTE_MEMPOOL_F_SP_PUT | RTE_MEMPOOL_F_SC_GET); if (src_pool == NULL) { PRINT_ERR("Error with source mempool creation.\n"); return -1; } - dst_pool = rte_pktmbuf_pool_create("Benchmark_DMA_DST", + dst_pool = rte_mempool_create("Benchmark_DMA_DST", nr_buf, + buf_size, 0, 0, - buf_size + RTE_PKTMBUF_HEADROOM, - cfg->dst_numa_node); + NULL, + NULL, + NULL, + NULL, + cfg->dst_numa_node, + RTE_MEMPOOL_F_SP_PUT | RTE_MEMPOOL_F_SC_GET); if (dst_pool == NULL) { PRINT_ERR("Error with destination mempool creation.\n"); return -1; } - *srcs = rte_malloc(NULL, nr_buf * sizeof(struct rte_mbuf *), 0); + *srcs = rte_malloc_socket(NULL, nr_buf * sizeof(unsigned char *), 0, cfg->src_numa_node); if (*srcs == NULL) { printf("Error: srcs malloc failed.\n"); return -1; } - *dsts = rte_malloc(NULL, nr_buf * sizeof(struct rte_mbuf *), 0); + *dsts = rte_malloc_socket(NULL, nr_buf * sizeof(unsigned char *), 0, cfg->dst_numa_node); if (*dsts == NULL) { printf("Error: dsts malloc failed.\n"); return -1; } - if (rte_pktmbuf_alloc_bulk(src_pool, *srcs, nr_buf) != 0) { - printf("alloc src mbufs failed.\n"); + if (rte_mempool_get_bulk(src_pool, *srcs, nr_buf) != 0) { + printf("alloc src bufs failed.\n"); return -1; } - if (rte_pktmbuf_alloc_bulk(dst_pool, *dsts, nr_buf) != 0) { - printf("alloc dst mbufs failed.\n"); + if (rte_mempool_get_bulk(dst_pool, *dsts, nr_buf) != 0) { + printf("alloc dst bufs failed.\n"); return -1; } @@ -370,7 +384,7 @@ mem_copy_benchmark(struct test_configure *cfg, bool is_dma) uint16_t i; uint32_t offset; unsigned int lcore_id = 0; - struct rte_mbuf **srcs = NULL, **dsts = NULL; + void **srcs = NULL, **dsts = NULL; struct lcore_dma_map_t *ldm = &cfg->lcore_dma_map; unsigned int buf_size = cfg->buf_size.cur; uint16_t kick_batch = cfg->kick_batch.cur; @@ -478,9 +492,9 @@ mem_copy_benchmark(struct test_configure *cfg, bool is_dma) out: /* free mbufs used in the test */ if (srcs != NULL) - rte_pktmbuf_free_bulk(srcs, nr_buf); + rte_mempool_put_bulk(src_pool, srcs, nr_buf); if (dsts != NULL) - rte_pktmbuf_free_bulk(dsts, nr_buf); + rte_mempool_put_bulk(dst_pool, dsts, nr_buf); /* free the points for the mbufs */ rte_free(srcs);