mm/damon: add sysfs dirs for managing DAMOS filters based on handling layers
Subsystems (4)
SeongJae Park
maintainercover mm/damon: add sysfs dirs for managing DAMOS filters based on handling layers
DAMOS filters are categorized into two groups based on their handling layers, namely core and operations layers. The categorization affects when each filter is evaluated. Core layer handled filters are evaluated first. The order meant nothing before, but introduction of allow filters changed that.
DAMOS sysfs interface provides single directory for filters, namely 'filters'. Users can install any filters in any order there. DAMON will internally categorize those into core and operations layer handled ones, and apply the evaluation order rule. The ordering rule is clearly documented. But the interface could still confuse users since it is allowed to install filters on the directory in mixed ways.
Add two sysfs directories for managing filters by handling layer, namely 'core_filters' and 'ops_filters' for filters that handled by core and operations layer, respectively. Those are avoided to be used for installing filters that not handled by the assumed layer.
For backward compatibility, keep 'filters' directory with its curernt behavior. Filters installed in the directory will be added to DAMON after those of 'core_filters' and 'ops_filters' directories, with the automatic categorizations. Also recommend users to use the new directories, and noticee 'filters' directory could be deprecated in future.
Note that new directories provide all features that were provided with 'filters', but just in a more clear way. Deprecating 'filters' is not expected to make an irreversal breakge.
Also note that this patch series depend on filters default behavior change patch series[1].
[1] https://lore.kernel.org/[email protected]
SeongJae Park (8):
mm/damon/sysfs-schemes: let damon_sysfs_scheme_set_filters() be used
for different named directories
mm/damon/sysfs-schemes: implement core_filters and ops_filters
directories
mm/damon/sysfs-schemes: commit filters in {core,ops}_filters
directories
mm/damon/core: expose damos_filter_for_ops() to DAMON kernel API
callers
mm/damon/sysfs-schemes: set filters handling layer of directories mm/damon/sysfs-schemes: return error for wrong filter type on given
directory
Docs/ABI/damon: document {core,ops}_filters directories Docs/admin-guide/mm/damon/usage: update for {core,ops}_filters
directories
.../ABI/testing/sysfs-kernel-mm-damon | 16 +++ Documentation/admin-guide/mm/damon/usage.rst | 31 +++-- include/linux/damon.h | 1 + mm/damon/core.c | 9 +- mm/damon/sysfs-schemes.c | 119 ++++++++++++++++-- 5 files changed, 153 insertions(+), 23 deletions(-)
base-commit: c6ff92c642d665270c718aece87bc33d264d2c00
Signature · 1 line
2.39.5
SeongJae Park
maintainerPATCH 1/8 mm/damon/sysfs-schemes: let damon_sysfs_scheme_set_filters() be used for different named directories
damon_sysfs_scheme_set_filters() is using a hard-coded directory name, "filters". Refactor for general named directories of same files hierarchy, to use from upcoming changes.
--- mm/damon/sysfs-schemes.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
mm/damon/sysfs-schemes.c +7 -4
@@ -1604,7 +1604,9 @@ static int damon_sysfs_scheme_set_watermarks(struct damon_sysfs_scheme *scheme)return err; } -static int damon_sysfs_scheme_set_filters (struct damon_sysfs_scheme *scheme) +static int damon_sysfs_scheme_set_filters (struct damon_sysfs_scheme *scheme, +const char *name, +struct damon_sysfs_scheme_filters **filters_ptr) {struct damon_sysfs_scheme_filters *filters =damon_sysfs_scheme_filters_alloc ();
@@ -1614,11 +1616,11 @@ static int damon_sysfs_scheme_set_filters(struct damon_sysfs_scheme *scheme)return -ENOMEM ; err =kobject_init_and_add (&filters->kobj, &damon_sysfs_scheme_filters_ktype, &scheme->kobj, -"filters" ); + name);if (err)kobject_put (&filters->kobj);else - scheme->filters = filters; + *filters_ptr = filters;return err; }
@@ -1670,7 +1672,8 @@ static int damon_sysfs_scheme_add_dirs(struct damon_sysfs_scheme *scheme) err =damon_sysfs_scheme_set_watermarks (scheme);if (err) goto put_quotas_access_pattern_out; - err =damon_sysfs_scheme_set_filters (scheme); + err =damon_sysfs_scheme_set_filters (scheme,"filters" , + &scheme->filters);if (err) goto put_watermarks_quotas_access_pattern_out; err =damon_sysfs_scheme_set_stats (scheme);
Signature · 1 line
2.39.5
SeongJae Park
maintainerPATCH 2/8 mm/damon/sysfs-schemes: implement core_filters and ops_filters directories
In reply to SeongJae ParkImplement two DAMOS sysfs directories for managing core and operations layer handled filters separately. Those are named as 'core_filters' and 'ops_filters', and have files hierarchy same to 'filters'. This commit is only populating and cleaning up the directories, not really the files with DAMON. Following changes will make the connections.
--- mm/damon/sysfs-schemes.c | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-)
mm/damon/sysfs-schemes.c +38 -2
@@ -1504,6 +1504,8 @@ struct damon_sysfs_scheme {unsigned long apply_interval_us;struct damon_sysfs_quotas *quotas;struct damon_sysfs_watermarks *watermarks; +struct damon_sysfs_scheme_filters *core_filters; +struct damon_sysfs_scheme_filters *ops_filters;struct damon_sysfs_scheme_filters *filters;struct damon_sysfs_stats *stats;struct damon_sysfs_scheme_regions *tried_regions;
@@ -1624,6 +1626,33 @@ static int damon_sysfs_scheme_set_filters(struct damon_sysfs_scheme *scheme,return err; } +static int damos_sysfs_set_filter_dirs (struct damon_sysfs_scheme *scheme) +{ +int err; + + err =damon_sysfs_scheme_set_filters (scheme,"filters" , + &scheme->filters); +if (err) +return err; + err =damon_sysfs_scheme_set_filters (scheme,"core_filters" , + &scheme->core_filters); +if (err) + goto put_filters_out; + err =damon_sysfs_scheme_set_filters (scheme,"ops_filters" , + &scheme->ops_filters); +if (err) + goto put_core_filters_out; +return 0 ; + +put_core_filters_out: +kobject_put (&scheme->core_filters->kobj); + scheme->core_filters =NULL ; +put_filters_out: +kobject_put (&scheme->filters->kobj); + scheme->filters =NULL ; +return err; +} +static int damon_sysfs_scheme_set_stats (struct damon_sysfs_scheme *scheme) {struct damon_sysfs_stats *stats =damon_sysfs_stats_alloc ();
@@ -1672,8 +1701,7 @@ static int damon_sysfs_scheme_add_dirs(struct damon_sysfs_scheme *scheme) err =damon_sysfs_scheme_set_watermarks (scheme);if (err) goto put_quotas_access_pattern_out; - err =damon_sysfs_scheme_set_filters (scheme,"filters" , - &scheme->filters); + err =damos_sysfs_set_filter_dirs (scheme);if (err) goto put_watermarks_quotas_access_pattern_out; err =damon_sysfs_scheme_set_stats (scheme);
@@ -1688,6 +1716,10 @@ static int damon_sysfs_scheme_add_dirs(struct damon_sysfs_scheme *scheme)kobject_put (&scheme->tried_regions->kobj); scheme->tried_regions =NULL ; put_filters_watermarks_quotas_access_pattern_out: +kobject_put (&scheme->ops_filters->kobj); + scheme->ops_filters =NULL ; +kobject_put (&scheme->core_filters->kobj); + scheme->core_filters =NULL ;kobject_put (&scheme->filters->kobj); scheme->filters =NULL ; put_watermarks_quotas_access_pattern_out:
@@ -1711,6 +1743,10 @@ static void damon_sysfs_scheme_rm_dirs(struct damon_sysfs_scheme *scheme)kobject_put (&scheme->watermarks->kobj);damon_sysfs_scheme_filters_rm_dirs (scheme->filters);kobject_put (&scheme->filters->kobj); +damon_sysfs_scheme_filters_rm_dirs (scheme->core_filters); +kobject_put (&scheme->core_filters->kobj); +damon_sysfs_scheme_filters_rm_dirs (scheme->ops_filters); +kobject_put (&scheme->ops_filters->kobj);kobject_put (&scheme->stats->kobj);damon_sysfs_scheme_regions_rm_dirs (scheme->tried_regions);kobject_put (&scheme->tried_regions->kobj);
Signature · 1 line
2.39.5
SeongJae Park
maintainerPATCH 3/8 mm/damon/sysfs-schemes: commit filters in {core,ops}_filters directories
In reply to SeongJae ParkConnect user inputs to files under core_filters and ops_filters with DAMON, so that the files can really function. Becasuse {core,ops}_filters are easier to be managed in terms of expecting filters evaluation order, add filters in {core,ops}_filters before 'filters' directory.
--- mm/damon/sysfs-schemes.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
mm/damon/sysfs-schemes.c +11 -3
@@ -2143,8 +2143,6 @@ static struct damos *damon_sysfs_mk_scheme(struct damon_sysfs_quotas *sysfs_quotas = sysfs_scheme->quotas;struct damon_sysfs_weights *sysfs_weights = sysfs_quotas->weights;struct damon_sysfs_watermarks *sysfs_wmarks = sysfs_scheme->watermarks; -struct damon_sysfs_scheme_filters *sysfs_filters = - sysfs_scheme->filters;struct damos *scheme;int err;
@@ -2184,7 +2182,17 @@ static struct damos *damon_sysfs_mk_scheme(return NULL ; } - err =damon_sysfs_add_scheme_filters (scheme, sysfs_filters); + err =damon_sysfs_add_scheme_filters (scheme, sysfs_scheme->core_filters); +if (err) { +damon_destroy_scheme (scheme); +return NULL ; + } + err =damon_sysfs_add_scheme_filters (scheme, sysfs_scheme->ops_filters); +if (err) { +damon_destroy_scheme (scheme); +return NULL ; + } + err =damon_sysfs_add_scheme_filters (scheme, sysfs_scheme->filters);if (err) {damon_destroy_scheme (scheme);return NULL ;
Signature · 1 line
2.39.5
SeongJae Park
maintainerPATCH 4/8 mm/damon/core: expose damos_filter_for_ops() to DAMON kernel API callers
In reply to SeongJae Parkdamos_filter_for_ops() can be useful to avoid putting wrong type of filters in wrong place. Make it be exposed to DAMON kernel API callers.
--- include/linux/damon.h | 1 + mm/damon/core.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-)
include/linux/damon.h +1 -0
@@ -846,6 +846,7 @@ void damon_update_region_access_rate(struct damon_region *r, bool accessed,struct damos_filter *damos_new_filter (enum damos_filter_type type,bool matching,bool allow);void damos_add_filter (struct damos *s,struct damos_filter *f); +bool damos_filter_for_ops (enum damos_filter_type type);void damos_destroy_filter (struct damos_filter *f); struct damos_quota_goal *damos_new_quota_goal(
mm/damon/core.c +8 -1
@@ -281,7 +281,14 @@ struct damos_filter *damos_new_filter(enum damos_filter_type type,return filter; } -static bool damos_filter_for_ops (enum damos_filter_type type) +/** +* damos_filter_for_ops() - Return if the filter is ops-hndled one. +* @type: type of the filter. +* +* Return: true if the filter of @type needs to be handled by ops layer, false +* otherwise. +*/ +bool damos_filter_for_ops (enum damos_filter_type type) {switch (type) {case DAMOS_FILTER_TYPE_ADDR :
Signature · 1 line
2.39.5
SeongJae Park
maintainerPATCH 5/8 mm/damon/sysfs-schemes: set filters handling layer of directories
In reply to SeongJae ParkUnlike their name and assumed purposes, {core,ops}_filters DAMOS sysfs directories are allowing installing any type of filters. To restrict wrong type of filters to the directories, first add information about filters that handled by what layer should the filters allow installing to DAMOS sysfs internal data structures.
--- mm/damon/sysfs-schemes.c | 46 +++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 10 deletions(-)
mm/damon/sysfs-schemes.c +36 -10
@@ -309,8 +309,18 @@ static const struct kobj_type damon_sysfs_stats_ktype = {* filter directory */ +/* +* enum damos_sysfs_filter_handle_layer - Layers handling filters of a dir. +*/ +enum damos_sysfs_filter_handle_layer { +DAMOS_SYSFS_FILTER_HANDLE_LAYER_CORE , +DAMOS_SYSFS_FILTER_HANDLE_LAYER_OPS , +DAMOS_SYSFS_FILTER_HANDLE_LAYER_BOTH , +}; +struct damon_sysfs_scheme_filter {struct kobject kobj; +enum damos_sysfs_filter_handle_layer handle_layer;enum damos_filter_type type;bool matching;bool allow;
@@ -320,9 +330,15 @@ struct damon_sysfs_scheme_filter {int target_idx; }; -static struct damon_sysfs_scheme_filter *damon_sysfs_scheme_filter_alloc (void ) +static struct damon_sysfs_scheme_filter *damon_sysfs_scheme_filter_alloc ( +enum damos_sysfs_filter_handle_layer layer) { -return kzalloc (sizeof (struct damon_sysfs_scheme_filter ),GFP_KERNEL ); +struct damon_sysfs_scheme_filter *filter; + + filter =kzalloc (sizeof (struct damon_sysfs_scheme_filter ),GFP_KERNEL ); +if (filter) + filter->handle_layer = layer; +return filter; }/* Should match with enum damos_filter_type */
@@ -595,14 +611,20 @@ static const struct kobj_type damon_sysfs_scheme_filter_ktype = {struct damon_sysfs_scheme_filters {struct kobject kobj; +enum damos_sysfs_filter_handle_layer handle_layer;struct damon_sysfs_scheme_filter **filters_arr;int nr; };static struct damon_sysfs_scheme_filters * -damon_sysfs_scheme_filters_alloc (void ) +damon_sysfs_scheme_filters_alloc (enum damos_sysfs_filter_handle_layer layer) { -return kzalloc (sizeof (struct damon_sysfs_scheme_filters ),GFP_KERNEL ); +struct damon_sysfs_scheme_filters *filters; + + filters =kzalloc (sizeof (struct damon_sysfs_scheme_filters ),GFP_KERNEL ); +if (filters) + filters->handle_layer = layer; +return filters; } static void damon_sysfs_scheme_filters_rm_dirs(
@@ -635,7 +657,8 @@ static int damon_sysfs_scheme_filters_add_dirs( filters->filters_arr = filters_arr;for (i =0 ; i < nr_filters; i++) { - filter =damon_sysfs_scheme_filter_alloc (); + filter =damon_sysfs_scheme_filter_alloc ( + filters->handle_layer);if (!filter) {damon_sysfs_scheme_filters_rm_dirs (filters);return -ENOMEM ;
@@ -1607,11 +1630,11 @@ static int damon_sysfs_scheme_set_watermarks(struct damon_sysfs_scheme *scheme) }static int damon_sysfs_scheme_set_filters (struct damon_sysfs_scheme *scheme, -const char *name, +enum damos_sysfs_filter_handle_layer layer,const char *name,struct damon_sysfs_scheme_filters **filters_ptr) {struct damon_sysfs_scheme_filters *filters = -damon_sysfs_scheme_filters_alloc (); +damon_sysfs_scheme_filters_alloc (layer);int err;if (!filters)
@@ -1630,15 +1653,18 @@ static int damos_sysfs_set_filter_dirs(struct damon_sysfs_scheme *scheme) {int err; - err =damon_sysfs_scheme_set_filters (scheme,"filters" , + err =damon_sysfs_scheme_set_filters (scheme, +DAMOS_SYSFS_FILTER_HANDLE_LAYER_BOTH ,"filters" , &scheme->filters);if (err)return err; - err =damon_sysfs_scheme_set_filters (scheme,"core_filters" , + err =damon_sysfs_scheme_set_filters (scheme, +DAMOS_SYSFS_FILTER_HANDLE_LAYER_CORE ,"core_filters" , &scheme->core_filters);if (err) goto put_filters_out; - err =damon_sysfs_scheme_set_filters (scheme,"ops_filters" , + err =damon_sysfs_scheme_set_filters (scheme, +DAMOS_SYSFS_FILTER_HANDLE_LAYER_OPS ,"ops_filters" , &scheme->ops_filters);if (err) goto put_core_filters_out;
Signature · 1 line
2.39.5
SeongJae Park
maintainerPATCH 6/8 mm/damon/sysfs-schemes: return error for wrong filter type on given directory
In reply to SeongJae ParkReturn error if the user tries to install a DAMOS filter on DAMOS filters sysfs directory that assumed to be used for filters that handled by a DAMON layer that not same to that for the installing filter.
--- mm/damon/sysfs-schemes.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
mm/damon/sysfs-schemes.c +20 -0
@@ -362,6 +362,23 @@ static ssize_t type_show(struct kobject *kobj, damon_sysfs_scheme_filter_type_strs[filter->type]); } +static bool damos_sysfs_scheme_filter_valid_type ( +enum damos_sysfs_filter_handle_layer layer, +enum damos_filter_type type) +{ +switch (layer) { +case DAMOS_SYSFS_FILTER_HANDLE_LAYER_BOTH : +return true; +case DAMOS_SYSFS_FILTER_HANDLE_LAYER_CORE : +return !damos_filter_for_ops (type); +case DAMOS_SYSFS_FILTER_HANDLE_LAYER_OPS : +return damos_filter_for_ops (type); +default : +break ; + } +return false; +} +static ssize_t type_store (struct kobject *kobj,struct kobj_attribute *attr,const char *buf,size_t count) {
@@ -373,6 +390,9 @@ static ssize_t type_store(struct kobject *kobj,for (type =0 ; type <NR_DAMOS_FILTER_TYPES ; type++) {if (sysfs_streq (buf, damon_sysfs_scheme_filter_type_strs[ type])) { +if (!damos_sysfs_scheme_filter_valid_type ( + filter->handle_layer, type)) +break ; filter->type = type; ret = count;break ;
Signature · 1 line
2.39.5
SeongJae Park
maintainerPATCH 7/8 Docs/ABI/damon: document {core,ops}_filters directories
In reply to SeongJae ParkDocument the new DAMOS filters sysfs directories on ABI doc.
--- Documentation/ABI/testing/sysfs-kernel-mm-damon | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
Documentation/ABI/testing/sysfs-kernel-mm-damon +16 -0
@@ -379,6 +379,22 @@ Description: Writing 'Y' or 'N' to this file sets whether to allow or reject applying the scheme's action to the memory that satisfies the 'type' and the 'matching' of the directory. +What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/core_filters +Date: Feb 2025 +Contact: SeongJae Park <[email protected]> +Description: Directory for DAMON core layer-handled DAMOS filters. Files + under this directory works same to those of + /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/filters + directory. + +What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/ops_filters +Date: Feb 2025 +Contact: SeongJae Park <[email protected]> +Description: Directory for DAMON operations set layer-handled DAMOS filters. + Files under this directory works same to those of + /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/filters + directory. + What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/stats/nr_tried Date: Mar 2022 Contact: SeongJae Park <[email protected]>
Signature · 1 line
2.39.5
SeongJae Park
maintainerPATCH 8/8 Docs/admin-guide/mm/damon/usage: update for {core,ops}_filters directories
In reply to SeongJae ParkDocument {core,ops}_filters directories on usage document.
--- Documentation/admin-guide/mm/damon/usage.rst | 31 ++++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-)
Documentation/admin-guide/mm/damon/usage.rst +22 -9
@@ -82,7 +82,7 @@ comma (","). │ │ │ │ │ │ │ │ :ref:`goals <sysfs_schemes_quota_goals>`/nr_goals │ │ │ │ │ │ │ │ │ 0/target_metric,target_value,current_value │ │ │ │ │ │ │ :ref:`watermarks <sysfs_watermarks>`/metric,interval_us,high,mid,low - │ │ │ │ │ │ │ :ref:`filters <sysfs_filters>`/nr_filters + │ │ │ │ │ │ │ :ref:`{core_,ops_,}filters <sysfs_filters>`/nr_filters │ │ │ │ │ │ │ │ 0/type,matching,allow,memcg_path,addr_start,addr_end,target_idx,min,max │ │ │ │ │ │ │ :ref:`stats <sysfs_schemes_stats>`/nr_tried,sz_tried,nr_applied,sz_applied,sz_ops_filter_passed,qt_exceeds │ │ │ │ │ │ │ :ref:`tried_regions <sysfs_schemes_tried_regions>`/total_bytes
@@ -282,9 +282,10 @@ to ``N-1``. Each directory represents each DAMON-based operation scheme. schemes/<N>/ ------------ -In each scheme directory, five directories (``access_pattern``, ``quotas``, -``watermarks``, ``filters``, ``stats``, and ``tried_regions``) and three files -(``action``, ``target_nid`` and ``apply_interval``) exist. +In each scheme directory, seven directories (``access_pattern``, ``quotas``, +``watermarks``, ``core_filters``, ``ops_filters``, ``filters``, ``stats``, and +``tried_regions``) and three files (``action``, ``target_nid`` and +``apply_interval``) exist. The ``action`` file is for setting and getting the scheme's :ref:`action <damon_design_damos_action>`. The keywords that can be written to and read
@@ -395,13 +396,24 @@ The ``interval`` should written in microseconds unit. .. _sysfs_filters: -schemes/<N>/filters/ --------------------- +schemes/<N>/{core_,ops_,}filters/ +------------------------------- -The directory for the :ref:`filters <damon_design_damos_filters>` of the given +Directories for :ref:`filters <damon_design_damos_filters>` of the given DAMON-based operation scheme. -In the beginning, this directory has only one file, ``nr_filters``. Writing a +``core_filters`` and ``ops_filters`` directories are for the filters handled by +the DAMON core layer and operations set layer, respectively. ``filters`` +directory can be used for installing filters regardless of their handled +layers. Filters that requested by ``core_filters`` and ``ops_filters`` will be +installed before those of ``filters``. All three directories have same files. + +Use of ``filters`` directory can make expecting evaluation orders of given +filters with the files under directory bit confusing. Users are hence +recommended to use ``core_filters`` and ``ops_filters`` directories. The +``filters`` directory could be deprecated in future. + +In the beginning, the directory has only one file, ``nr_filters``. Writing a number (``N``) to the file creates the number of child directories named ``0`` to ``N-1``. Each directory represents each filter. The filters are evaluated in the numeric order.
@@ -410,7 +422,7 @@ Each filter directory contains nine files, namely ``type``, ``matching``, ``allow``, ``memcg_path``, ``addr_start``, ``addr_end``, ``min``, ``max`` and ``target_idx``. To ``type`` file, you can write the type of the filter. Refer to :ref:`the design doc <damon_design_damos_filters>` for available type -names and their meanings. +names, their meaning and on what layer those are handled. For ``memcg`` type, you can specify the memory cgroup of the interest by writing the path of the memory cgroup from the cgroups mount point to
@@ -430,6 +442,7 @@ the ``type`` and ``matching`` should be allowed or not. For example, below restricts a DAMOS action to be applied to only non-anonymous pages of all memory cgroups except ``/having_care_already``.:: + # cd ops_filters/0/ # echo 2 > nr_filters # # disallow anonymous pages echo anon > 0/type
Signature · 1 line
2.39.5
SeongJae Park
maintainerRe: [PATCH 8/8] Docs/admin-guide/mm/damon/usage: update for {core,ops}_filters directories
Quoted 35 lines · On Thu, 20 Feb 2025 11:46:46 -0800 SeongJae Park <[email protected]> wrote:
Document {core,ops}_filters directories on usage document.
Signed-off-by SeongJae Park <[email protected]>--- Documentation/admin-guide/mm/damon/usage.rst | 31 ++++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-)Documentation/admin-guide/mm/damon/usage.rst +5
-4@@ -82,7 +82,7 @@ comma (","). │ │ │ │ │ │ │ │ :ref:`goals <sysfs_schemes_quota_goals>`/nr_goals │ │ │ │ │ │ │ │ │ 0/target_metric,target_value,current_value │ │ │ │ │ │ │ :ref:`watermarks <sysfs_watermarks>`/metric,interval_us,high,mid,low - │ │ │ │ │ │ │ :ref:`filters <sysfs_filters>`/nr_filters + │ │ │ │ │ │ │ :ref:`{core_,ops_,}filters <sysfs_filters>`/nr_filters │ │ │ │ │ │ │ │ 0/type,matching,allow,memcg_path,addr_start,addr_end,target_idx,min,max │ │ │ │ │ │ │ :ref:`stats <sysfs_schemes_stats>`/nr_tried,sz_tried,nr_applied,sz_applied,sz_ops_filter_passed,qt_exceeds │ │ │ │ │ │ │ :ref:`tried_regions <sysfs_schemes_tried_regions>`/total_bytes@@ -282,9 +282,10 @@ to ``N-1``. Each directory represents each DAMON-based operation scheme. schemes/<N>/ ------------ -In each scheme directory, five directories (``access_pattern``, ``quotas``, -``watermarks``, ``filters``, ``stats``, and ``tried_regions``) and three files -(``action``, ``target_nid`` and ``apply_interval``) exist. +In each scheme directory, seven directories (``access_pattern``, ``quotas``, +``watermarks``, ``core_filters``, ``ops_filters``, ``filters``, ``stats``, and +``tried_regions``) and three files (``action``, ``target_nid`` and +``apply_interval``) exist. The ``action`` file is for setting and getting the scheme's :ref:`action <damon_design_damos_action>`. The keywords that can be written to and read
Documentation/admin-guide/mm/damon/usage.rst The ``interval`` should written in microseconds unit. · line 400
Quoted 7 lines
Documentation/admin-guide/mm/damon/usage.rst +2
-2@@ -395,13 +396,24 @@ The ``interval`` should written in microseconds unit. .. _sysfs_filters: -schemes/<N>/filters/ --------------------- +schemes/<N>/{core_,ops_,}filters/ +-------------------------------
Just found this causes below document build warning and error during 'make htmldocs':
Documentation/admin-guide/mm/damon/usage.rst:425: WARNING: Title underline too short. Documentation/admin-guide/mm/damon/usage.rst:425: ERROR: Unknown target name: "core".
I will fix this in the next spin as below.
-schemes/<N>/{core_,ops_,}filters/
--------------------------------
+schemes/<N>/{core\_,ops\_,}filters/
+-----------------------------------Thanks,
SJ
[...]
SeongJae Park
maintainer[...]
Quoted 4 lines
Also note that this patch series depend on filters default behavior change patch series[1].
This is an RFC that depends on another RFC patch series I listed above. But I made yet another mistake on the subject. Sorry if it made any confusion.
Thanks,
SJ
[...]