Skip to content

Commit d0b8862

Browse files
Kemeng Shitytso
authored andcommitted
ext4: add test_mb_mark_used_cost to estimate cost of mb_mark_used
Add test_mb_mark_used_cost to estimate cost of mb_mark_used Signed-off-by: Kemeng Shi <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Theodore Ts'o <[email protected]>
1 parent 9c97c34 commit d0b8862

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

fs/ext4/mballoc-test.c

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,56 @@ static void test_mb_free_blocks(struct kunit *test)
883883
ext4_mb_unload_buddy(&e4b);
884884
}
885885

886+
#define COUNT_FOR_ESTIMATE 100000
887+
static void test_mb_mark_used_cost(struct kunit *test)
888+
{
889+
struct ext4_buddy e4b;
890+
struct super_block *sb = (struct super_block *)test->priv;
891+
struct ext4_free_extent ex;
892+
int ret;
893+
struct test_range ranges[TEST_RANGE_COUNT];
894+
int i, j;
895+
unsigned long start, end, all = 0;
896+
897+
/* buddy cache assumes that each page contains at least one block */
898+
if (sb->s_blocksize > PAGE_SIZE)
899+
kunit_skip(test, "blocksize exceeds pagesize");
900+
901+
ret = ext4_mb_load_buddy(sb, TEST_GOAL_GROUP, &e4b);
902+
KUNIT_ASSERT_EQ(test, ret, 0);
903+
904+
ex.fe_group = TEST_GOAL_GROUP;
905+
for (j = 0; j < COUNT_FOR_ESTIMATE; j++) {
906+
mbt_generate_test_ranges(sb, ranges, TEST_RANGE_COUNT);
907+
start = jiffies;
908+
for (i = 0; i < TEST_RANGE_COUNT; i++) {
909+
if (ranges[i].len == 0)
910+
continue;
911+
912+
ex.fe_start = ranges[i].start;
913+
ex.fe_len = ranges[i].len;
914+
ext4_lock_group(sb, TEST_GOAL_GROUP);
915+
mb_mark_used(&e4b, &ex);
916+
ext4_unlock_group(sb, TEST_GOAL_GROUP);
917+
}
918+
end = jiffies;
919+
all += (end - start);
920+
921+
for (i = 0; i < TEST_RANGE_COUNT; i++) {
922+
if (ranges[i].len == 0)
923+
continue;
924+
925+
ext4_lock_group(sb, TEST_GOAL_GROUP);
926+
mb_free_blocks(NULL, &e4b, ranges[i].start,
927+
ranges[i].len);
928+
ext4_unlock_group(sb, TEST_GOAL_GROUP);
929+
}
930+
}
931+
932+
kunit_info(test, "costed jiffies %lu\n", all);
933+
ext4_mb_unload_buddy(&e4b);
934+
}
935+
886936
static const struct mbt_ext4_block_layout mbt_test_layouts[] = {
887937
{
888938
.blocksize_bits = 10,
@@ -925,6 +975,8 @@ static struct kunit_case mbt_test_cases[] = {
925975
KUNIT_CASE_PARAM(test_mb_mark_used, mbt_layouts_gen_params),
926976
KUNIT_CASE_PARAM(test_mb_free_blocks, mbt_layouts_gen_params),
927977
KUNIT_CASE_PARAM(test_mark_diskspace_used, mbt_layouts_gen_params),
978+
KUNIT_CASE_PARAM_ATTR(test_mb_mark_used_cost, mbt_layouts_gen_params,
979+
{ .speed = KUNIT_SPEED_SLOW }),
928980
{}
929981
};
930982

0 commit comments

Comments
 (0)