radix tree test suite: keep regression test runs short
authorRoss Zwisler <ross.zwisler@linux.intel.com>
Sat, 21 May 2016 00:01:45 +0000 (17:01 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 21 May 2016 00:58:30 +0000 (17:58 -0700)
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>
tools/testing/radix-tree/main.c

index 71c5272..122c8b9 100644 (file)
@@ -61,11 +61,11 @@ void __big_gang_check(void)
        } while (!wrapped);
 }
 
-void big_gang_check(void)
+void big_gang_check(bool long_run)
 {
        int i;
 
-       for (i = 0; i < 1000; i++) {
+       for (i = 0; i < (long_run ? 1000 : 3); i++) {
                __big_gang_check();
                srand(time(0));
                printf("%d ", i);
@@ -270,7 +270,7 @@ static void locate_check(void)
        item_kill_tree(&tree);
 }
 
-static void single_thread_tests(void)
+static void single_thread_tests(bool long_run)
 {
        int i;
 
@@ -285,9 +285,9 @@ static void single_thread_tests(void)
        printf("after add_and_check: %d allocated\n", nr_allocated);
        dynamic_height_check();
        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);
-       for (i = 0; i < 2000; i++) {
+       for (i = 0; i < (long_run ? 2000 : 3); i++) {
                copy_tag_check();
                printf("%d ", i);
                fflush(stdout);
@@ -295,15 +295,23 @@ static void single_thread_tests(void)
        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();
        radix_tree_init();
 
        regression1_test();
        regression2_test();
        regression3_test();
-       single_thread_tests();
+       single_thread_tests(long_run);
 
        sleep(1);
        printf("after sleep(1): %d allocated\n", nr_allocated);