DAMON core assumes min_nr_regions parameter is respected by initial user setup or the underlying operation set. That is, users are supposed to set up the initial monitoring regions to have more than min_nr_regions regions. When the virtual address operation set (vaddr) is used, users can ask vaddr to do the setup entirely. For the case, vaddr finds regions for covering the current virtual address mappings, and split regions to meet the min_nr_regions. DAMON core therefore does nothing for min_nr_regions at the beginning, and only avoids the number becoming lower than min_nr_regions, by preventing regions merge operations when needed.
The user setup requirement is somewhat too much, however, when the min_nr_regions value is high. Actually there was a report [1] of the case. Make below three changes for resolving the issue. First (patch 1), drop the assumption and make DAMON core split regions at the beginning for respecting the min_nr_regions. Second (patch 2), drop the vaddr's split operations and related code that are no more needed. Third (patch 3), add kunit test for the newly introduced function. [1] https://lore.kernel.org/CAC5umyjmJE9SBqjbetZZecpY54bHpn2AvCGNv3aF6J=1cfo...@mail.gmail.com SeongJae Park (3): mm/damon/core: split regions for min_nr_regions at beginning mm/damon/vaddr: do not split regions for min_nr_regions mm/damon/test/core-kunit: add damon_apply_min_nr_regions() test mm/damon/core.c | 39 ++++++++++++++++-- mm/damon/tests/core-kunit.h | 52 ++++++++++++++++++++++++ mm/damon/tests/vaddr-kunit.h | 76 ------------------------------------ mm/damon/vaddr.c | 70 +-------------------------------- 4 files changed, 89 insertions(+), 148 deletions(-) base-commit: b2e07b9d93a9696f78fb21f2260d5798c6040b28 -- 2.47.3

