@@ -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+
886936static 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