mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-04-13 09:59:31 +00:00
Docs/mm/damon/design: document allow/reject DAMOS filter behaviors
Update DAMOS filters design document to describe the allow/reject behavior of filters. Link: https://lkml.kernel.org/r/20250109175126.57878-8-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
faa636c0ec
commit
f477b9b409
1 changed files with 29 additions and 4 deletions
|
@ -504,9 +504,34 @@ have a list of latency-critical processes.
|
|||
|
||||
To let users optimize DAMOS schemes with such special knowledge, DAMOS provides
|
||||
a feature called DAMOS filters. The feature allows users to set an arbitrary
|
||||
number of filters for each scheme. Each filter specifies the type of target
|
||||
memory, and whether it should exclude the memory of the type (filter-out), or
|
||||
all except the memory of the type (filter-in).
|
||||
number of filters for each scheme. Each filter specifies
|
||||
|
||||
- a type of memory (``type``),
|
||||
- whether it is for the memory of the type or all except the type
|
||||
(``matching``), and
|
||||
- whether it is to allow (include) or reject (exclude) applying
|
||||
the scheme's action to the memory (``allow``).
|
||||
|
||||
When multiple filters are installed, each filter is evaluated in the installed
|
||||
order. If a part of memory is matched to one of the filter, next filters are
|
||||
ignored. If the memory passes through the filters evaluation stage because it
|
||||
is not matched to any of the filters, applying the scheme's action to it is
|
||||
allowed, same to the behavior when no filter exists.
|
||||
|
||||
For example, let's assume 1) a filter for allowing anonymous pages and 2)
|
||||
another filter for rejecting young pages are installed in the order. If a page
|
||||
of a region that eligible to apply the scheme's action is an anonymous page,
|
||||
the scheme's action will be applied to the page regardless of whether it is
|
||||
young or not, since it matches with the first allow-filter. If the page is
|
||||
not anonymous but young, the scheme's action will not be applied, since the
|
||||
second reject-filter blocks it. If the page is neither anonymous nor young,
|
||||
the page will pass through the filters evaluation stage since there is no
|
||||
matching filter, and the action will be applied to the page.
|
||||
|
||||
Note that the action can equally be applied to memory that either explicitly
|
||||
filter-allowed or filters evaluation stage passed. It means that installing
|
||||
allow-filters at the end of the list makes no practical change but only
|
||||
filters-checking overhead.
|
||||
|
||||
For efficient handling of filters, some types of filters are handled by the
|
||||
core layer, while others are handled by operations set. In the latter case,
|
||||
|
@ -516,7 +541,7 @@ filter are not counted as the scheme has tried to the region. In contrast, if
|
|||
a memory regions is filtered by an operations set layer-handled filter, it is
|
||||
counted as the scheme has tried. This difference affects the statistics.
|
||||
|
||||
Below types of filters are currently supported.
|
||||
Below ``type`` of filters are currently supported.
|
||||
|
||||
- anonymous page
|
||||
- Applied to pages that containing data that not stored in files.
|
||||
|
|
Loading…
Add table
Reference in a new issue