lib-test_vmalloc-switch-to-prandom_u32.patch removed from -mm tree
The quilt patch titled
Subject: lib/test_vmalloc: switch to prandom_u32()
has been removed from the -mm tree. Its filename was
lib-test_vmalloc-switch-to-prandom_u32.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: "Uladzislau Rezki (Sony)" <[email protected]>
Subject: lib/test_vmalloc: switch to prandom_u32()
Date: Tue, 7 Jun 2022 11:34:49 +0200
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.
---
lib/test_vmalloc.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)
lib/test_vmalloc.c renamed from lib/test_vmalloc.c~lib-test_vmalloc-switch-to-prandom_u32 +8 -7
@@ -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, intint i, j;for (i = n -1 ; i >0 ; i--) { -get_random_bytes (&rnd,sizeof (rnd)); + rnd =prandom_u32 ();/* Cut the range. */ j = rnd % i;
_
Patches currently in -mm which might be from [email protected] are