mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 12:57:53 +00:00
maple_tree: add benchmarking for mas_prev()
Add some benchmarking functions in testing for mas_prev(). This is useful to ensure there are no regressions added during modifications. Link: https://lkml.kernel.org/r/20230724183157.3939892-3-Liam.Howlett@oracle.com Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com> Cc: Peng Zhang <zhangpeng.00@bytedance.com> Cc: Suren Baghdasaryan <surenb@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
361c678be7
commit
8c314f3b55
1 changed files with 37 additions and 0 deletions
|
@ -45,6 +45,7 @@ atomic_t maple_tree_tests_passed;
|
|||
/* #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)
|
||||
|
@ -1801,7 +1802,36 @@ 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 __init check_forking(struct maple_tree *mt)
|
||||
{
|
||||
|
@ -3537,6 +3567,13 @@ static int __init 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);
|
||||
|
|
Loading…
Reference in a new issue