mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-16 01:54:00 +00:00
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 <shikemeng@huaweicloud.com> Link: https://lore.kernel.org/r/20240424061904.987525-3-shikemeng@huaweicloud.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
9c97c34a99
commit
d0b88624f8
@ -883,6 +883,56 @@ static void test_mb_free_blocks(struct kunit *test)
|
|||||||
ext4_mb_unload_buddy(&e4b);
|
ext4_mb_unload_buddy(&e4b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define COUNT_FOR_ESTIMATE 100000
|
||||||
|
static void test_mb_mark_used_cost(struct kunit *test)
|
||||||
|
{
|
||||||
|
struct ext4_buddy e4b;
|
||||||
|
struct super_block *sb = (struct super_block *)test->priv;
|
||||||
|
struct ext4_free_extent ex;
|
||||||
|
int ret;
|
||||||
|
struct test_range ranges[TEST_RANGE_COUNT];
|
||||||
|
int i, j;
|
||||||
|
unsigned long start, end, all = 0;
|
||||||
|
|
||||||
|
/* buddy cache assumes that each page contains at least one block */
|
||||||
|
if (sb->s_blocksize > PAGE_SIZE)
|
||||||
|
kunit_skip(test, "blocksize exceeds pagesize");
|
||||||
|
|
||||||
|
ret = ext4_mb_load_buddy(sb, TEST_GOAL_GROUP, &e4b);
|
||||||
|
KUNIT_ASSERT_EQ(test, ret, 0);
|
||||||
|
|
||||||
|
ex.fe_group = TEST_GOAL_GROUP;
|
||||||
|
for (j = 0; j < COUNT_FOR_ESTIMATE; j++) {
|
||||||
|
mbt_generate_test_ranges(sb, ranges, TEST_RANGE_COUNT);
|
||||||
|
start = jiffies;
|
||||||
|
for (i = 0; i < TEST_RANGE_COUNT; i++) {
|
||||||
|
if (ranges[i].len == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ex.fe_start = ranges[i].start;
|
||||||
|
ex.fe_len = ranges[i].len;
|
||||||
|
ext4_lock_group(sb, TEST_GOAL_GROUP);
|
||||||
|
mb_mark_used(&e4b, &ex);
|
||||||
|
ext4_unlock_group(sb, TEST_GOAL_GROUP);
|
||||||
|
}
|
||||||
|
end = jiffies;
|
||||||
|
all += (end - start);
|
||||||
|
|
||||||
|
for (i = 0; i < TEST_RANGE_COUNT; i++) {
|
||||||
|
if (ranges[i].len == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ext4_lock_group(sb, TEST_GOAL_GROUP);
|
||||||
|
mb_free_blocks(NULL, &e4b, ranges[i].start,
|
||||||
|
ranges[i].len);
|
||||||
|
ext4_unlock_group(sb, TEST_GOAL_GROUP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
kunit_info(test, "costed jiffies %lu\n", all);
|
||||||
|
ext4_mb_unload_buddy(&e4b);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct mbt_ext4_block_layout mbt_test_layouts[] = {
|
static const struct mbt_ext4_block_layout mbt_test_layouts[] = {
|
||||||
{
|
{
|
||||||
.blocksize_bits = 10,
|
.blocksize_bits = 10,
|
||||||
@ -925,6 +975,8 @@ static struct kunit_case mbt_test_cases[] = {
|
|||||||
KUNIT_CASE_PARAM(test_mb_mark_used, mbt_layouts_gen_params),
|
KUNIT_CASE_PARAM(test_mb_mark_used, mbt_layouts_gen_params),
|
||||||
KUNIT_CASE_PARAM(test_mb_free_blocks, mbt_layouts_gen_params),
|
KUNIT_CASE_PARAM(test_mb_free_blocks, mbt_layouts_gen_params),
|
||||||
KUNIT_CASE_PARAM(test_mark_diskspace_used, mbt_layouts_gen_params),
|
KUNIT_CASE_PARAM(test_mark_diskspace_used, mbt_layouts_gen_params),
|
||||||
|
KUNIT_CASE_PARAM_ATTR(test_mb_mark_used_cost, mbt_layouts_gen_params,
|
||||||
|
{ .speed = KUNIT_SPEED_SLOW }),
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user