From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 38AF0468E4 for ; Thu, 12 Jun 2025 23:10:17 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3374342E56; Thu, 12 Jun 2025 23:10:17 +0200 (CEST) Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by mails.dpdk.org (Postfix) with ESMTP id DECBB42E56 for ; Thu, 12 Jun 2025 23:10:15 +0200 (CEST) Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-3a4fd1ba177so968924f8f.0 for ; Thu, 12 Jun 2025 14:10:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749762615; x=1750367415; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qi6vYNxAhPdy4c4TtM7PdlBw3hy6nrgkvdCTZub0+9c=; b=S0rTALcW6xlh9oi8HXHwhJZrveNLpOc+QbtEqvMbiFJQ7/C184KcfGhGZsQWC3mWDo DYu/86SN68prAy77mZ9/13kqKD2+SznAhCXPeZfNrVCRSZleZaHj4CKzbUQxI7VgN8DY A1ZHVBLLPfHjs/xl1L/OigWCHd/gbx/jk729xOboufS/1McAyVovc+1OL9oNpbzYX/Tt xXtCG69VZqfdvDdQariZXa872e85s319elMIjKl3EUGmNZhirPpNDNzDz/+f1DLqBW8z ZdevhGq1EsKkTVVOrvgwAHtmFF9A3lK7vEH2eaGHYo9AP9iPAhcUObCDa53Vs5iQANey Lkow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749762615; x=1750367415; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qi6vYNxAhPdy4c4TtM7PdlBw3hy6nrgkvdCTZub0+9c=; b=kis1WhUtODnXoLXdDx+OWNt7KjqhwoH7oGmiuoJOM49QAQIuPMl5QJBQjA+9Xy/HKk dIg5Yn1zTSwFP//qpWamkCz3TXC2JqtAO+0XjaRfVWXxXxBpFsREf3XP4wwiO82TkpCo 1QudTD1PYHsgMDS51K1agdTcCCMjdb9nQrkLYlUHj9D5Fl7rBFLJ58g8r+rz6OBYlorW rR5ysuZ+3qwIcpqtS5a5vIohEpgMr83marTBfI2aAhewJzB/UjVXWp11cTIzxKgKa/NU yAyt4A0KHiCmZ8T05PMBMQYD/8BU4De+sCxDYAxOnuV59IjhFjxtChuR6MDq3PRDUowe A0ag== X-Forwarded-Encrypted: i=1; AJvYcCU8VStUCZys4iRfTivNtV5w1WcJ0es+1mmaKDfQpoVUHRU2uUoEtAu2DHtGQ3lIJd+wHp1fPAU=@dpdk.org X-Gm-Message-State: AOJu0YwMgNKsjx6uqa4MUAOAwfRY8klezX599ZJ7rPyUysTgGjlGim5o rpRJn/9kyeJEEx1A1j5xh6sriwFbUswazSFs9yEF0kgJzcSPIDZUEBgrAp3nB3h6 X-Gm-Gg: ASbGncsCrlHa3yfh1EjXyZRjRf9b/2dy/whhrdVNeaABq6xxLfvKUeci/osJFGDrGuH xEbHxIwnbq0iOCYfFFWL68MU1YrPSRHoqX/BxRFBUaLgGzswYhPLStC+U4YZ4tUfmlFiEqtpaH3 1PtmnqybYCwuHlRVQEyD5hviaqIzPen87rp7ElpAAalCNa+FNO/UL3F+IT3pBZxYNq49XN+yW/G oDhVvOoXRUyQqJfuHquQdGlj2z2eSwxwcwljDu85NQTLCYo4IoVlrgMyFMprZxUUzEUTGCscdxa 0m9c2otqsvgIryY5gVpuWeNj0Pla0qyua1miqVIjhW9Ifc7+njq9mgpA0RfhFge+P5ne X-Google-Smtp-Source: AGHT+IGNPbg0WBa8G11Ophwzs2bCqY0NFViUq8KxvjrpS7MnOVKYGgfdWozCT0NVFhvAcSt2E/d1qw== X-Received: by 2002:a05:6000:2004:b0:3a5:1388:9a55 with SMTP id ffacd0b85a97d-3a56a2bbbe7mr40533f8f.5.1749762615387; Thu, 12 Jun 2025 14:10:15 -0700 (PDT) Received: from localhost ([2a01:4b00:d036:ae00:f2df:571a:ae4c:bef2]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-4532e256630sm32775435e9.29.2025.06.12.14.10.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Jun 2025 14:10:14 -0700 (PDT) From: luca.boccassi@gmail.com To: Bruce Richardson Cc: Chengwen Feng , dpdk stable Subject: patch 'test/malloc: improve resiliency' has been queued to stable release 22.11.9 Date: Thu, 12 Jun 2025 22:07:04 +0100 Message-ID: <20250612210733.2506558-47-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250612210733.2506558-1-luca.boccassi@gmail.com> References: <20250612210733.2506558-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 22.11.9 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 06/14/25. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/7d1be9cbb9be54c004526f3032093d8e906d10e2 Thanks. Luca Boccassi --- >From 7d1be9cbb9be54c004526f3032093d8e906d10e2 Mon Sep 17 00:00:00 2001 From: Bruce Richardson Date: Wed, 26 Mar 2025 17:13:24 +0000 Subject: [PATCH] test/malloc: improve resiliency [ upstream commit 7777215715d475b5e884179de39ff4bc6b8cbf72 ] The test case "test_multi_alloc_statistics" was brittle in that it did some allocations and frees and then checked statistics without considering the initial state of the malloc heaps. This meant that, depending on what allocations/frees were done beforehand, the test can sometimes fail. We can improve resiliency by running the test using a new malloc heap, which means it is unaffected by any previous allocations. Bugzilla ID: 1579 Fixes: a40a1f8231b4 ("app: various tests update") Signed-off-by: Bruce Richardson Acked-by: Chengwen Feng --- app/test/test_malloc.c | 77 +++++++++++++++++++++++++++++++++++------- 1 file changed, 64 insertions(+), 13 deletions(-) diff --git a/app/test/test_malloc.c b/app/test/test_malloc.c index ff081dd931..08a6ca8a26 100644 --- a/app/test/test_malloc.c +++ b/app/test/test_malloc.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #define N 10000 @@ -267,11 +268,48 @@ test_str_to_size(void) static int test_multi_alloc_statistics(void) { + int ret = -1; /* default return is error, cleared at end on success */ int socket = 0; struct rte_malloc_socket_stats pre_stats, post_stats ,first_stats, second_stats; size_t size = 2048; int align = 1024; int overhead = 0; + const size_t pgsz = rte_mem_page_size(); + const size_t heap_size = (1 << 22); + + if (pgsz > heap_size) { + printf("Page size (%zu) is bigger than heap size, skipping alloc stats test\n", + pgsz); + return TEST_SKIPPED; + } + if (heap_size % pgsz != 0) { + printf("Heap size (%zu) is not a multiple of page size (%zu), skipping alloc stats test\n", + heap_size, pgsz); + return TEST_SKIPPED; + } + + if (rte_malloc_heap_create(__func__) != 0) { + printf("Failed to create test malloc heap\n"); + goto end; + } + + /* Allocate some memory using malloc and add it to our test heap. */ + void *unaligned_memory = malloc(heap_size + pgsz); + if (unaligned_memory == NULL) { + printf("Failed to allocate memory\n"); + goto cleanup_empty_heap; + } + void *memory = RTE_PTR_ALIGN(unaligned_memory, pgsz); + if (rte_malloc_heap_memory_add(__func__, memory, heap_size, NULL, + heap_size / pgsz, pgsz) != 0) { + printf("Failed to add memory to heap\n"); + goto cleanup_allocated_memory; + } + socket = rte_malloc_heap_get_socket(__func__); + if (socket < 0) { + printf("Failed to get socket for test malloc heap.\n"); + goto cleanup_all; + } /* Dynamically calculate the overhead by allocating one cacheline and * then comparing what was allocated from the heap. @@ -280,7 +318,7 @@ test_multi_alloc_statistics(void) void *dummy = rte_malloc_socket(NULL, RTE_CACHE_LINE_SIZE, 0, socket); if (dummy == NULL) - return -1; + goto cleanup_all; rte_malloc_get_socket_stats(socket, &post_stats); @@ -295,7 +333,8 @@ test_multi_alloc_statistics(void) void *p1 = rte_malloc_socket("stats", size , align, socket); if (!p1) - return -1; + goto cleanup_all; + rte_free(p1); rte_malloc_dump_stats(stdout, "stats"); @@ -308,7 +347,7 @@ test_multi_alloc_statistics(void) (post_stats.alloc_count != pre_stats.alloc_count) || (post_stats.free_count != pre_stats.free_count)) { printf("Malloc statistics are incorrect - freed alloc\n"); - return -1; + goto cleanup_all; } /* Check two consecutive allocations */ size = 1024; @@ -316,12 +355,12 @@ test_multi_alloc_statistics(void) rte_malloc_get_socket_stats(socket,&pre_stats); void *p2 = rte_malloc_socket("add", size ,align, socket); if (!p2) - return -1; + goto cleanup_all; rte_malloc_get_socket_stats(socket,&first_stats); void *p3 = rte_malloc_socket("add2", size,align, socket); if (!p3) - return -1; + goto cleanup_all; rte_malloc_get_socket_stats(socket,&second_stats); @@ -333,34 +372,34 @@ test_multi_alloc_statistics(void) if(second_stats.heap_totalsz_bytes != first_stats.heap_totalsz_bytes) { printf("Incorrect heap statistics: Total size \n"); - return -1; + goto cleanup_all; } /* Check allocated size is equal to two additions plus overhead */ if(second_stats.heap_allocsz_bytes != size + overhead + first_stats.heap_allocsz_bytes) { printf("Incorrect heap statistics: Allocated size \n"); - return -1; + goto cleanup_all; } /* Check that allocation count increments correctly i.e. +1 */ if (second_stats.alloc_count != first_stats.alloc_count + 1) { printf("Incorrect heap statistics: Allocated count \n"); - return -1; + goto cleanup_all; } if (second_stats.free_count != first_stats.free_count){ printf("Incorrect heap statistics: Free count \n"); - return -1; + goto cleanup_all; } /* Make sure that we didn't touch our greatest chunk: 2 * 11M) */ if (post_stats.greatest_free_size != pre_stats.greatest_free_size) { printf("Incorrect heap statistics: Greatest free size \n"); - return -1; + goto cleanup_all; } /* Free size must equal the original free size minus the new allocation*/ if (first_stats.heap_freesz_bytes <= second_stats.heap_freesz_bytes) { printf("Incorrect heap statistics: Free size \n"); - return -1; + goto cleanup_all; } if ((post_stats.heap_totalsz_bytes != pre_stats.heap_totalsz_bytes) || @@ -369,9 +408,21 @@ test_multi_alloc_statistics(void) (post_stats.alloc_count != pre_stats.alloc_count) || (post_stats.free_count != pre_stats.free_count)) { printf("Malloc statistics are incorrect - freed alloc\n"); - return -1; + goto cleanup_all; } - return 0; + + /* set return value as success before cleanup */ + ret = 0; + + /* cleanup */ +cleanup_all: + rte_malloc_heap_memory_remove(__func__, memory, heap_size); +cleanup_allocated_memory: + free(unaligned_memory); +cleanup_empty_heap: + rte_malloc_heap_destroy(__func__); +end: + return ret; } #ifdef RTE_EXEC_ENV_WINDOWS -- 2.47.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-06-12 22:06:25.609934478 +0100 +++ 0047-test-malloc-improve-resiliency.patch 2025-06-12 22:06:23.878044807 +0100 @@ -1 +1 @@ -From 7777215715d475b5e884179de39ff4bc6b8cbf72 Mon Sep 17 00:00:00 2001 +From 7d1be9cbb9be54c004526f3032093d8e906d10e2 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 7777215715d475b5e884179de39ff4bc6b8cbf72 ] + @@ -17 +18,0 @@ -Cc: stable@dpdk.org @@ -26 +27 @@ -index 02a7d8ef20..d6f8da3b24 100644 +index ff081dd931..08a6ca8a26 100644