radix tree test suite: keep regression test runs short

Currently the full suite of regression tests take upwards of 30 minutes
to run on my development machine.  The vast majority of this time is
taken by the big_gang_check() and copy_tag_check() tests, which each run
their tests through thousands of iterations...does this have value?

Without big_gang_check() and copy_tag_check(), the test suite runs in
around 15 seconds on my box.

Honestly the first time I ever ran through the entire test suite was to
gather the timings for this email - it simply takes too long to be
useful on a normal basis.

Instead, hide the excessive iterations through big_gang_check() and
copy_tag_check() tests behind an '-l' flag (for "long run") in case they
are still useful, but allow the regression test suite to complete in a
reasonable amount of time.  We still run each of these tests a few times
(3 at present) to try and keep the test coverage.

Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: Kirill Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jan Kara <jack@suse.com>
Cc: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Ross Zwisler 2016-05-20 17:01:45 -07:00 committed by Linus Torvalds
parent 97d778b2de
commit aa1d62d853

View File

@ -61,11 +61,11 @@ void __big_gang_check(void)
} while (!wrapped); } while (!wrapped);
} }
void big_gang_check(void) void big_gang_check(bool long_run)
{ {
int i; int i;
for (i = 0; i < 1000; i++) { for (i = 0; i < (long_run ? 1000 : 3); i++) {
__big_gang_check(); __big_gang_check();
srand(time(0)); srand(time(0));
printf("%d ", i); printf("%d ", i);
@ -270,7 +270,7 @@ static void locate_check(void)
item_kill_tree(&tree); item_kill_tree(&tree);
} }
static void single_thread_tests(void) static void single_thread_tests(bool long_run)
{ {
int i; int i;
@ -285,9 +285,9 @@ static void single_thread_tests(void)
printf("after add_and_check: %d allocated\n", nr_allocated); printf("after add_and_check: %d allocated\n", nr_allocated);
dynamic_height_check(); dynamic_height_check();
printf("after dynamic_height_check: %d allocated\n", nr_allocated); printf("after dynamic_height_check: %d allocated\n", nr_allocated);
big_gang_check(); big_gang_check(long_run);
printf("after big_gang_check: %d allocated\n", nr_allocated); printf("after big_gang_check: %d allocated\n", nr_allocated);
for (i = 0; i < 2000; i++) { for (i = 0; i < (long_run ? 2000 : 3); i++) {
copy_tag_check(); copy_tag_check();
printf("%d ", i); printf("%d ", i);
fflush(stdout); fflush(stdout);
@ -295,15 +295,23 @@ static void single_thread_tests(void)
printf("after copy_tag_check: %d allocated\n", nr_allocated); printf("after copy_tag_check: %d allocated\n", nr_allocated);
} }
int main(void) int main(int argc, char **argv)
{ {
bool long_run = false;
int opt;
while ((opt = getopt(argc, argv, "l")) != -1) {
if (opt == 'l')
long_run = true;
}
rcu_register_thread(); rcu_register_thread();
radix_tree_init(); radix_tree_init();
regression1_test(); regression1_test();
regression2_test(); regression2_test();
regression3_test(); regression3_test();
single_thread_tests(); single_thread_tests(long_run);
sleep(1); sleep(1);
printf("after sleep(1): %d allocated\n", nr_allocated); printf("after sleep(1): %d allocated\n", nr_allocated);