From 1b7959bb52a1a9020dcbd873ccdc6910c4d0855e Mon Sep 17 00:00:00 2001 From: Andrea Mazzoleni Date: Sat, 6 Jun 2026 09:48:29 +0200 Subject: [PATCH] Allow to specify the wrap size in allocation --- cmdline/util.c | 2 +- raid/memory.c | 12 ++++++------ raid/memory.h | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cmdline/util.c b/cmdline/util.c index bd17a933..1a9db356 100644 --- a/cmdline/util.c +++ b/cmdline/util.c @@ -63,7 +63,7 @@ void** malloc_nofail_vector_direct(int n, size_t size, void** freeptr) { void* ptr; - ptr = raid_malloc_vector_align(n, size, direct_size(), 0, freeptr); + ptr = raid_malloc_vector_align(n, size, direct_size(), 0, 0, freeptr); if (!ptr) { /* LCOV_EXCL_START */ diff --git a/raid/memory.c b/raid/memory.c index 096d82cc..ced90146 100644 --- a/raid/memory.c +++ b/raid/memory.c @@ -45,7 +45,7 @@ unsigned raid_optimal_displacement(int n) /* * The 4096 bytes represents a full 64-set * 64-byte L1 cache cycle. */ -#define L1_WRAP_SIZE 4096 +#define RAID_WRAP_SIZE 4096 /* * PREFETCHER MITIGATION VIA PAGE-OFFSET RANDOMIZATION (WAY-SHIFTING) @@ -118,7 +118,7 @@ static const unsigned STRIDE_NOISE[16] = { 1, 4, 0, 7, 3, 6, 2, 5 }; -void **raid_malloc_vector_align(int n, size_t size, size_t align_size, ssize_t displacement_size, void **freeptr) +void **raid_malloc_vector_align(int n, size_t size, size_t align_size, ssize_t displacement_size, ssize_t wrap_size, void **freeptr) { void **v; unsigned char *va; @@ -136,10 +136,10 @@ void **raid_malloc_vector_align(int n, size_t size, size_t align_size, ssize_t d /* * The allocated buffer must safely hold the disk chunks, the L1 fixed displacement, * and the variable STRIDE_NOISE. Because the maximum noise multiplier in the array - * is 7, reserving 8 * L1_WRAP_SIZE per disk guarantees the pointer will never overflow + * is 7, reserving 8 * RAID_WRAP_SIZE per disk guarantees the pointer will never overflow * the allocated memory block. */ - va = raid_malloc_align(n * (size + displacement_size + 8 * L1_WRAP_SIZE), align_size, freeptr); + va = raid_malloc_align(n * (size + displacement_size + 8 * wrap_size), align_size, freeptr); if (!va) { /* LCOV_EXCL_START */ free(v); @@ -157,7 +157,7 @@ void **raid_malloc_vector_align(int n, size_t size, size_t align_size, ssize_t d va += displacement_size; /* inject the variable noise multiplier to blind the stride prefetcher */ - va += STRIDE_NOISE[i % 16] * L1_WRAP_SIZE; + va += STRIDE_NOISE[i % 16] * wrap_size; } return v; @@ -165,7 +165,7 @@ void **raid_malloc_vector_align(int n, size_t size, size_t align_size, ssize_t d void **raid_malloc_vector(int n, size_t size, void **freeptr) { - return raid_malloc_vector_align(n, size, RAID_MALLOC_ALIGN, raid_optimal_displacement(n), freeptr); + return raid_malloc_vector_align(n, size, RAID_MALLOC_ALIGN, raid_optimal_displacement(n), RAID_WRAP_SIZE, freeptr); } void raid_mrand_vector(unsigned seed, int n, size_t size, void **vv) diff --git a/raid/memory.h b/raid/memory.h index ec3c9692..cde42300 100644 --- a/raid/memory.h +++ b/raid/memory.h @@ -89,7 +89,7 @@ void **raid_malloc_vector(int n, size_t size, void **freeptr); /** * Arbitrary aligned vector allocation. */ -void **raid_malloc_vector_align(int n, size_t size, size_t align_size, ssize_t displacement_size, void **freeptr); +void **raid_malloc_vector_align(int n, size_t size, size_t align_size, ssize_t displacement_size, ssize_t wrap_size, void **freeptr); /** * Fills the memory vector with pseudo-random data based on the specified seed.