Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54f4d334 authored by Rehas Sachdeva's avatar Rehas Sachdeva Committed by Matthew Wilcox
Browse files

radix tree test suite: Add performance test for radix_tree_join()

parent 6478581c
Loading
Loading
Loading
Loading
+47 −0
Original line number Original line Diff line number Diff line
@@ -186,6 +186,50 @@ static void benchmark_split(unsigned long size, unsigned long step)


}
}


static long long  __benchmark_join(unsigned long index,
			     unsigned order1, unsigned order2)
{
	unsigned long loc;
	struct timespec start, finish;
	long long nsec;
	void *item, *item2 = item_create(index + 1, order1);
	RADIX_TREE(tree, GFP_KERNEL);

	item_insert_order(&tree, index, order2);
	item = radix_tree_lookup(&tree, index);

	clock_gettime(CLOCK_MONOTONIC, &start);
	radix_tree_join(&tree, index + 1, order1, item2);
	clock_gettime(CLOCK_MONOTONIC, &finish);
	nsec = (finish.tv_sec - start.tv_sec) * NSEC_PER_SEC +
		(finish.tv_nsec - start.tv_nsec);

	loc = find_item(&tree, item);
	if (loc == -1)
		free(item);

	item_kill_tree(&tree);

	return nsec;
}

static void benchmark_join(unsigned long step)
{
	int i, j, idx;
	long long nsec = 0;

	for (idx = 0; idx < 1 << 10; idx += step) {
		for (i = 1; i < 15; i++) {
			for (j = 0; j < i; j++) {
				nsec += __benchmark_join(idx, i, j);
			}
		}
	}

	printv(2, "Size %8d, step %8ld, join time %10lld ns\n",
			1 << 10, step, nsec);
}

void benchmark(void)
void benchmark(void)
{
{
	unsigned long size[] = {1 << 10, 1 << 20, 0};
	unsigned long size[] = {1 << 10, 1 << 20, 0};
@@ -207,4 +251,7 @@ void benchmark(void)
	for (c = 0; size[c]; c++)
	for (c = 0; size[c]; c++)
		for (s = 0; step[s]; s++)
		for (s = 0; step[s]; s++)
			benchmark_split(size[c], step[s]);
			benchmark_split(size[c], step[s]);

	for (s = 0; step[s]; s++)
		benchmark_join(step[s]);
}
}