[RFC PATCH v2 0/9] mm/damon: make allow filters after reject filters useful and intuitive

SeongJae Park
2025-02-27T01:58:01Z

DAMOS filters do allow or reject elements of memory for given DAMOS
scheme only if those match the filter criterias. For elements that
don't match any DAMOS filter, 'allowing' is the default behavior. This
makes allow-filters that don't have any reject-filter after them
meaningless sources of overhead. The decision was made to keep the
behavior consistent with that before the introduction of allow-filters.
This, however, makes usage of DAMOS filters confusing and inefficient.
There is an apparently more intuitive behavior for the case. If there
is no filter at all or the last filter is a reject filter, allowing by
default.

Update the filtering logic to work in the way. Decide the default
behavior as the opposite of the last isntalled filter. If it is an
allow filter, reject by default. If it is a reject filter or no filter
is installed at all, allow by default.

Note that this is changing the old behavior. But the old behavior for
the problematic filter combination was definitely confusing, inefficient
and anyway useless. Also, the behavior has relatively recently
introduced. It is difficult to anticipate any user that depends on the
behavior. Hence this is not a user-breaking behavior change but an
obvious improvement.

Changes from RFC v1
(https://lore.kernel.org/20250220193509.36379-1-sj@kernel.org)
- Set default behavior on core layer filtering stage as allow if any ops
layer filter exists.
- Wordsmith commit messages
- Rebase on latest mm-unstable

SeongJae Park (9):
mm/damon/core: introduce damos->ops_filters
mm/damon/paddr: support ops_filters
mm/damon/core: support committing ops_filters
mm/damon/core: put ops-handled filters to damos->ops_filters
mm/damon/paddr: support only damos->ops_filters
mm/damon: add default allow/reject behavior fields to struct damos
mm/damon/core: set damos_filter default allowance behavior based on
installed filters
mm/damon/paddr: respect ops_filters_default_reject
Docs/mm/damon/design: update for changed filter-default behavior

Documentation/mm/damon/design.rst | 10 ++--
include/linux/damon.h | 11 ++++
mm/damon/core.c | 90 +++++++++++++++++++++++++++++--
mm/damon/paddr.c | 8 +--
4 files changed, 105 insertions(+), 14 deletions(-)

base-commit: d5c41979a39f18ccd660b25eb79e805eb5442e18
--
2.39.5