Use the optimal displacement depending on the number of disks

This commit is contained in:
Andrea Mazzoleni 2026-05-30 19:59:29 +02:00
parent 8f45779253
commit f181eb96e7
4 changed files with 56 additions and 33 deletions

View file

@ -28,10 +28,21 @@ void *raid_malloc_align(size_t size, size_t align_size, void **freeptr)
void *raid_malloc(size_t size, void **freeptr)
{
return raid_malloc_align(size, RAID_MALLOC_ALIGN, freeptr);
return raid_malloc_align(size, RAID_MALLOC_ALIGN, freeptr);
}
void **raid_malloc_vector_align(int nd, int n, size_t size, size_t align_size, size_t displacement_size, void **freeptr)
unsigned raid_optimal_displacement(int n)
{
if (n <= 8)
return 24 * 64;
if (n <= 16)
return 28 * 64;
if (n <= 32)
return 30 * 64;
return 33 * 64;
}
void **raid_malloc_vector_align(int nd, int n, size_t size, size_t align_size, ssize_t displacement_size, void **freeptr)
{
void **v;
unsigned char *va;
@ -39,6 +50,8 @@ void **raid_malloc_vector_align(int nd, int n, size_t size, size_t align_size, s
BUG_ON(n <= 0 || nd < 0);
(void)nd;
v = malloc(n * sizeof(void *));
if (!v) {
/* LCOV_EXCL_START */
@ -64,7 +77,7 @@ void **raid_malloc_vector_align(int nd, int n, size_t size, size_t align_size, s
void **raid_malloc_vector(int nd, int n, size_t size, void **freeptr)
{
return raid_malloc_vector_align(nd, n, size, RAID_MALLOC_ALIGN, RAID_MALLOC_DISPLACEMENT, freeptr);
return raid_malloc_vector_align(nd, n, size, RAID_MALLOC_ALIGN, raid_optimal_displacement(n), freeptr);
}
void raid_mrand_vector(unsigned seed, int n, size_t size, void **vv)
@ -131,4 +144,3 @@ int raid_mtest_vector(int n, size_t size, void **vv)
return 0;
}