]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
maple_tree: Add benchmarking for mas_prev() v6.1.26_clean
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 2 May 2023 16:19:10 +0000 (12:19 -0400)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 2 May 2023 17:57:11 +0000 (13:57 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
lib/test_maple_tree.c

index be4610e26682e4d7c0e3f9f36441b95ddaa4af5f..633cbf70a239c61aa6ef16b3476efad7a29c8f54 100644 (file)
@@ -24,6 +24,7 @@
 /* #define BENCH_MT_FOR_EACH */
 /* #define BENCH_FORK */
 /* #define BENCH_MAS_FOR_EACH */
+#define BENCH_MAS_PREV
 
 #ifdef __KERNEL__
 #define mt_set_non_kernel(x)           do {} while (0)
@@ -1701,7 +1702,35 @@ static noinline void __init bench_mas_for_each(struct maple_tree *mt)
 
 }
 #endif
+#if defined(BENCH_MAS_PREV)
+static noinline void __init bench_mas_prev(struct maple_tree *mt)
+{
+       int i, count = 1000000;
+       unsigned long max = 2500;
+       void *entry;
+       MA_STATE(mas, mt, 0, 0);
+
+       for (i = 0; i < max; i += 5) {
+               int gap = 4;
+               if (i % 30 == 0)
+                       gap = 3;
+               mtree_store_range(mt, i, i + gap, xa_mk_value(i), GFP_KERNEL);
+       }
 
+       rcu_read_lock();
+       for (i = 0; i < count; i++) {
+               unsigned long j = 2495;
+
+               mas_set(&mas, ULONG_MAX);
+               while ((entry = mas_prev(&mas, 0)) != NULL) {
+                       MT_BUG_ON(mt, entry != xa_mk_value(j));
+                       j -= 5;
+               }
+       }
+       rcu_read_unlock();
+
+}
+#endif
 /* check_forking - simulate the kernel forking sequence with the tree. */
 static noinline void check_forking(struct maple_tree *mt)
 {
@@ -3433,6 +3462,13 @@ static int maple_tree_seed(void)
        mtree_destroy(&tree);
        goto skip;
 #endif
+#if defined(BENCH_MAS_PREV)
+#define BENCH
+       mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
+       bench_mas_prev(&tree);
+       mtree_destroy(&tree);
+       goto skip;
+#endif
 
        mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
        check_iteration(&tree);