mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 13:51:44 +00:00
lib/test_vmalloc: switch to prandom_u32()
A get_random_bytes() function can cause a high contention if it is called across CPUs simultaneously. Because it shares one lock per all CPUs: <snip> class name con-bounces contentions waittime-min waittime-max waittime-total waittime-avg acq-bounces acquisitions holdtime-min holdtime-max holdtime-total holdtime-avg &crng->lock: 663145 665886 0.05 8.85 261966.66 0.39 7188152 13731279 0.04 11.89 2181582.30 0.16 ----------- &crng->lock 307835 [<00000000acba59cd>] _extract_crng+0x48/0x90 &crng->lock 358051 [<00000000f0075abc>] _crng_backtrack_protect+0x32/0x90 ----------- &crng->lock 234241 [<00000000f0075abc>] _crng_backtrack_protect+0x32/0x90 &crng->lock 431645 [<00000000acba59cd>] _extract_crng+0x48/0x90 <snip> Switch from the get_random_bytes() to prandom_u32() that does not have any internal contention when a random value is needed for the tests. The reason is to minimize CPU cycles introduced by the test-suite itself from the vmalloc performance metrics. Link: https://lkml.kernel.org/r/20220607093449.3100-6-urezki@gmail.com Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Matthew Wilcox <willy@infradead.org> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: Oleksiy Avramchenko <oleksiy.avramchenko@sony.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
899c6efe58
commit
5e21f2d577
@ -74,12 +74,13 @@ test_report_one_done(void)
|
||||
|
||||
static int random_size_align_alloc_test(void)
|
||||
{
|
||||
unsigned long size, align, rnd;
|
||||
unsigned long size, align;
|
||||
unsigned int rnd;
|
||||
void *ptr;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < test_loop_count; i++) {
|
||||
get_random_bytes(&rnd, sizeof(rnd));
|
||||
rnd = prandom_u32();
|
||||
|
||||
/*
|
||||
* Maximum 1024 pages, if PAGE_SIZE is 4096.
|
||||
@ -150,7 +151,7 @@ static int random_size_alloc_test(void)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < test_loop_count; i++) {
|
||||
get_random_bytes(&n, sizeof(i));
|
||||
n = prandom_u32();
|
||||
n = (n % 100) + 1;
|
||||
|
||||
p = vmalloc(n * PAGE_SIZE);
|
||||
@ -294,14 +295,14 @@ pcpu_alloc_test(void)
|
||||
for (i = 0; i < 35000; i++) {
|
||||
unsigned int r;
|
||||
|
||||
get_random_bytes(&r, sizeof(i));
|
||||
r = prandom_u32();
|
||||
size = (r % (PAGE_SIZE / 4)) + 1;
|
||||
|
||||
/*
|
||||
* Maximum PAGE_SIZE
|
||||
*/
|
||||
get_random_bytes(&r, sizeof(i));
|
||||
align = 1 << ((i % 11) + 1);
|
||||
r = prandom_u32();
|
||||
align = 1 << ((r % 11) + 1);
|
||||
|
||||
pcpu[i] = __alloc_percpu(size, align);
|
||||
if (!pcpu[i])
|
||||
@ -396,7 +397,7 @@ static void shuffle_array(int *arr, int n)
|
||||
int i, j;
|
||||
|
||||
for (i = n - 1; i > 0; i--) {
|
||||
get_random_bytes(&rnd, sizeof(rnd));
|
||||
rnd = prandom_u32();
|
||||
|
||||
/* Cut the range. */
|
||||
j = rnd % i;
|
||||
|
Loading…
Reference in New Issue
Block a user