xref: /linux/Documentation/mm/damon/design.rst (revision ff30564411ffdcee49d579cb15eb13185a36e253)
1.. SPDX-License-Identifier: GPL-2.0
2
3======
4Design
5======
6
7
8.. _damon_design_execution_model_and_data_structures:
9
10Execution Model and Data Structures
11===================================
12
13The monitoring-related information including the monitoring request
14specification and DAMON-based operation schemes are stored in a data structure
15called DAMON ``context``.  DAMON executes each context with a kernel thread
16called ``kdamond``.  Multiple kdamonds could run in parallel, for different
17types of monitoring.
18
19To know how user-space can do the configurations and start/stop DAMON, refer to
20:ref:`DAMON sysfs interface <sysfs_interface>` documentation.
21
22
23Overall Architecture
24====================
25
26DAMON subsystem is configured with three layers including
27
28- :ref:`Operations Set <damon_operations_set>`: Implements fundamental
29  operations for DAMON that depends on the given monitoring target
30  address-space and available set of software/hardware primitives,
31- :ref:`Core <damon_core_logic>`: Implements core logics including monitoring
32  overhead/accuracy control and access-aware system operations on top of the
33  operations set layer, and
34- :ref:`Modules <damon_modules>`: Implements kernel modules for various
35  purposes that provides interfaces for the user space, on top of the core
36  layer.
37
38
39.. _damon_operations_set:
40
41Operations Set Layer
42====================
43
44.. _damon_design_configurable_operations_set:
45
46For data access monitoring and additional low level work, DAMON needs a set of
47implementations for specific operations that are dependent on and optimized for
48the given target address space.  For example, below two operations for access
49monitoring are address-space dependent.
50
511. Identification of the monitoring target address range for the address space.
522. Access check of specific address range in the target space.
53
54DAMON consolidates these implementations in a layer called DAMON Operations
55Set, and defines the interface between it and the upper layer.  The upper layer
56is dedicated for DAMON's core logics including the mechanism for control of the
57monitoring accruracy and the overhead.
58
59Hence, DAMON can easily be extended for any address space and/or available
60hardware features by configuring the core logic to use the appropriate
61operations set.  If there is no available operations set for a given purpose, a
62new operations set can be implemented following the interface between the
63layers.
64
65For example, physical memory, virtual memory, swap space, those for specific
66processes, NUMA nodes, files, and backing memory devices would be supportable.
67Also, if some architectures or devices support special optimized access check
68features, those will be easily configurable.
69
70DAMON currently provides below three operation sets.  Below two subsections
71describe how those work.
72
73 - vaddr: Monitor virtual address spaces of specific processes
74 - fvaddr: Monitor fixed virtual address ranges
75 - paddr: Monitor the physical address space of the system
76
77To know how user-space can do the configuration via :ref:`DAMON sysfs interface
78<sysfs_interface>`, refer to :ref:`operations <sysfs_context>` file part of the
79documentation.
80
81
82 .. _damon_design_vaddr_target_regions_construction:
83
84VMA-based Target Address Range Construction
85-------------------------------------------
86
87A mechanism of ``vaddr`` DAMON operations set that automatically initializes
88and updates the monitoring target address regions so that entire memory
89mappings of the target processes can be covered.
90
91This mechanism is only for the ``vaddr`` operations set.  In cases of
92``fvaddr`` and ``paddr`` operation sets, users are asked to manually set the
93monitoring target address ranges.
94
95Only small parts in the super-huge virtual address space of the processes are
96mapped to the physical memory and accessed.  Thus, tracking the unmapped
97address regions is just wasteful.  However, because DAMON can deal with some
98level of noise using the adaptive regions adjustment mechanism, tracking every
99mapping is not strictly required but could even incur a high overhead in some
100cases.  That said, too huge unmapped areas inside the monitoring target should
101be removed to not take the time for the adaptive mechanism.
102
103For the reason, this implementation converts the complex mappings to three
104distinct regions that cover every mapped area of the address space.  The two
105gaps between the three regions are the two biggest unmapped areas in the given
106address space.  The two biggest unmapped areas would be the gap between the
107heap and the uppermost mmap()-ed region, and the gap between the lowermost
108mmap()-ed region and the stack in most of the cases.  Because these gaps are
109exceptionally huge in usual address spaces, excluding these will be sufficient
110to make a reasonable trade-off.  Below shows this in detail::
111
112    <heap>
113    <BIG UNMAPPED REGION 1>
114    <uppermost mmap()-ed region>
115    (small mmap()-ed regions and munmap()-ed regions)
116    <lowermost mmap()-ed region>
117    <BIG UNMAPPED REGION 2>
118    <stack>
119
120
121PTE Accessed-bit Based Access Check
122-----------------------------------
123
124Both of the implementations for physical and virtual address spaces use PTE
125Accessed-bit for basic access checks.  Only one difference is the way of
126finding the relevant PTE Accessed bit(s) from the address.  While the
127implementation for the virtual address walks the page table for the target task
128of the address, the implementation for the physical address walks every page
129table having a mapping to the address.  In this way, the implementations find
130and clear the bit(s) for next sampling target address and checks whether the
131bit(s) set again after one sampling period.  This could disturb other kernel
132subsystems using the Accessed bits, namely Idle page tracking and the reclaim
133logic.  DAMON does nothing to avoid disturbing Idle page tracking, so handling
134the interference is the responsibility of sysadmins.  However, it solves the
135conflict with the reclaim logic using ``PG_idle`` and ``PG_young`` page flags,
136as Idle page tracking does.
137
138
139.. _damon_core_logic:
140
141Core Logics
142===========
143
144.. _damon_design_monitoring:
145
146Monitoring
147----------
148
149Below four sections describe each of the DAMON core mechanisms and the five
150monitoring attributes, ``sampling interval``, ``aggregation interval``,
151``update interval``, ``minimum number of regions``, and ``maximum number of
152regions``.
153
154To know how user-space can set the attributes via :ref:`DAMON sysfs interface
155<sysfs_interface>`, refer to :ref:`monitoring_attrs <sysfs_monitoring_attrs>`
156part of the documentation.
157
158
159Access Frequency Monitoring
160~~~~~~~~~~~~~~~~~~~~~~~~~~~
161
162The output of DAMON says what pages are how frequently accessed for a given
163duration.  The resolution of the access frequency is controlled by setting
164``sampling interval`` and ``aggregation interval``.  In detail, DAMON checks
165access to each page per ``sampling interval`` and aggregates the results.  In
166other words, counts the number of the accesses to each page.  After each
167``aggregation interval`` passes, DAMON calls callback functions that previously
168registered by users so that users can read the aggregated results and then
169clears the results.  This can be described in below simple pseudo-code::
170
171    while monitoring_on:
172        for page in monitoring_target:
173            if accessed(page):
174                nr_accesses[page] += 1
175        if time() % aggregation_interval == 0:
176            for callback in user_registered_callbacks:
177                callback(monitoring_target, nr_accesses)
178            for page in monitoring_target:
179                nr_accesses[page] = 0
180        sleep(sampling interval)
181
182The monitoring overhead of this mechanism will arbitrarily increase as the
183size of the target workload grows.
184
185
186.. _damon_design_region_based_sampling:
187
188Region Based Sampling
189~~~~~~~~~~~~~~~~~~~~~
190
191To avoid the unbounded increase of the overhead, DAMON groups adjacent pages
192that assumed to have the same access frequencies into a region.  As long as the
193assumption (pages in a region have the same access frequencies) is kept, only
194one page in the region is required to be checked.  Thus, for each ``sampling
195interval``, DAMON randomly picks one page in each region, waits for one
196``sampling interval``, checks whether the page is accessed meanwhile, and
197increases the access frequency counter of the region if so.  The counter is
198called ``nr_accesses`` of the region.  Therefore, the monitoring overhead is
199controllable by setting the number of regions.  DAMON allows users to set the
200minimum and the maximum number of regions for the trade-off.
201
202This scheme, however, cannot preserve the quality of the output if the
203assumption is not guaranteed.
204
205
206Adaptive Regions Adjustment
207~~~~~~~~~~~~~~~~~~~~~~~~~~~
208
209Even somehow the initial monitoring target regions are well constructed to
210fulfill the assumption (pages in same region have similar access frequencies),
211the data access pattern can be dynamically changed.  This will result in low
212monitoring quality.  To keep the assumption as much as possible, DAMON
213adaptively merges and splits each region based on their access frequency.
214
215For each ``aggregation interval``, it compares the access frequencies
216(``nr_accesses``) of adjacent regions.  If the difference is small, and if the
217sum of the two regions' sizes is smaller than the size of total regions divided
218by the ``minimum number of regions``, DAMON merges the two regions.  If the
219resulting number of total regions is still higher than ``maximum number of
220regions``, it repeats the merging with increasing access frequenceis difference
221threshold until the upper-limit of the number of regions is met, or the
222threshold becomes higher than possible maximum value (``aggregation interval``
223divided by ``sampling interval``).   Then, after it reports and clears the
224aggregated access frequency of each region, it splits each region into two or
225three regions if the total number of regions will not exceed the user-specified
226maximum number of regions after the split.
227
228In this way, DAMON provides its best-effort quality and minimal overhead while
229keeping the bounds users set for their trade-off.
230
231
232.. _damon_design_age_tracking:
233
234Age Tracking
235~~~~~~~~~~~~
236
237By analyzing the monitoring results, users can also find how long the current
238access pattern of a region has maintained.  That could be used for good
239understanding of the access pattern.  For example, page placement algorithm
240utilizing both the frequency and the recency could be implemented using that.
241To make such access pattern maintained period analysis easier, DAMON maintains
242yet another counter called ``age`` in each region.  For each ``aggregation
243interval``, DAMON checks if the region's size and access frequency
244(``nr_accesses``) has significantly changed.  If so, the counter is reset to
245zero.  Otherwise, the counter is increased.
246
247
248Dynamic Target Space Updates Handling
249~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
250
251The monitoring target address range could dynamically changed.  For example,
252virtual memory could be dynamically mapped and unmapped.  Physical memory could
253be hot-plugged.
254
255As the changes could be quite frequent in some cases, DAMON allows the
256monitoring operations to check dynamic changes including memory mapping changes
257and applies it to monitoring operations-related data structures such as the
258abstracted monitoring target memory area only for each of a user-specified time
259interval (``update interval``).
260
261User-space can get the monitoring results via DAMON sysfs interface and/or
262tracepoints.  For more details, please refer to the documentations for
263:ref:`DAMOS tried regions <sysfs_schemes_tried_regions>` and :ref:`tracepoint`,
264respectively.
265
266
267.. _damon_design_damos:
268
269Operation Schemes
270-----------------
271
272One common purpose of data access monitoring is access-aware system efficiency
273optimizations.  For example,
274
275    paging out memory regions that are not accessed for more than two minutes
276
277or
278
279    using THP for memory regions that are larger than 2 MiB and showing a high
280    access frequency for more than one minute.
281
282One straightforward approach for such schemes would be profile-guided
283optimizations.  That is, getting data access monitoring results of the
284workloads or the system using DAMON, finding memory regions of special
285characteristics by profiling the monitoring results, and making system
286operation changes for the regions.  The changes could be made by modifying or
287providing advice to the software (the application and/or the kernel), or
288reconfiguring the hardware.  Both offline and online approaches could be
289available.
290
291Among those, providing advice to the kernel at runtime would be flexible and
292effective, and therefore widely be used.   However, implementing such schemes
293could impose unnecessary redundancy and inefficiency.  The profiling could be
294redundant if the type of interest is common.  Exchanging the information
295including monitoring results and operation advice between kernel and user
296spaces could be inefficient.
297
298To allow users to reduce such redundancy and inefficiencies by offloading the
299works, DAMON provides a feature called Data Access Monitoring-based Operation
300Schemes (DAMOS).  It lets users specify their desired schemes at a high
301level.  For such specifications, DAMON starts monitoring, finds regions having
302the access pattern of interest, and applies the user-desired operation actions
303to the regions, for every user-specified time interval called
304``apply_interval``.
305
306To know how user-space can set ``apply_interval`` via :ref:`DAMON sysfs
307interface <sysfs_interface>`, refer to :ref:`apply_interval_us <sysfs_scheme>`
308part of the documentation.
309
310
311.. _damon_design_damos_action:
312
313Operation Action
314~~~~~~~~~~~~~~~~
315
316The management action that the users desire to apply to the regions of their
317interest.  For example, paging out, prioritizing for next reclamation victim
318selection, advising ``khugepaged`` to collapse or split, or doing nothing but
319collecting statistics of the regions.
320
321The list of supported actions is defined in DAMOS, but the implementation of
322each action is in the DAMON operations set layer because the implementation
323normally depends on the monitoring target address space.  For example, the code
324for paging specific virtual address ranges out would be different from that for
325physical address ranges.  And the monitoring operations implementation sets are
326not mandated to support all actions of the list.  Hence, the availability of
327specific DAMOS action depends on what operations set is selected to be used
328together.
329
330The list of the supported actions, their meaning, and DAMON operations sets
331that supports each action are as below.
332
333 - ``willneed``: Call ``madvise()`` for the region with ``MADV_WILLNEED``.
334   Supported by ``vaddr`` and ``fvaddr`` operations set.
335 - ``cold``: Call ``madvise()`` for the region with ``MADV_COLD``.
336   Supported by ``vaddr`` and ``fvaddr`` operations set.
337 - ``pageout``: Reclaim the region.
338   Supported by ``vaddr``, ``fvaddr`` and ``paddr`` operations set.
339 - ``hugepage``: Call ``madvise()`` for the region with ``MADV_HUGEPAGE``.
340   Supported by ``vaddr`` and ``fvaddr`` operations set.
341 - ``nohugepage``: Call ``madvise()`` for the region with ``MADV_NOHUGEPAGE``.
342   Supported by ``vaddr`` and ``fvaddr`` operations set.
343 - ``lru_prio``: Prioritize the region on its LRU lists.
344   Supported by ``paddr`` operations set.
345 - ``lru_deprio``: Deprioritize the region on its LRU lists.
346   Supported by ``paddr`` operations set.
347 - ``migrate_hot``: Migrate the regions prioritizing warmer regions.
348   Supported by ``paddr`` operations set.
349 - ``migrate_cold``: Migrate the regions prioritizing colder regions.
350   Supported by ``paddr`` operations set.
351 - ``stat``: Do nothing but count the statistics.
352   Supported by all operations sets.
353
354Applying the actions except ``stat`` to a region is considered as changing the
355region's characteristics.  Hence, DAMOS resets the age of regions when any such
356actions are applied to those.
357
358To know how user-space can set the action via :ref:`DAMON sysfs interface
359<sysfs_interface>`, refer to :ref:`action <sysfs_scheme>` part of the
360documentation.
361
362
363.. _damon_design_damos_access_pattern:
364
365Target Access Pattern
366~~~~~~~~~~~~~~~~~~~~~
367
368The access pattern of the schemes' interest.  The patterns are constructed with
369the properties that DAMON's monitoring results provide, specifically the size,
370the access frequency, and the age.  Users can describe their access pattern of
371interest by setting minimum and maximum values of the three properties.  If a
372region's three properties are in the ranges, DAMOS classifies it as one of the
373regions that the scheme is having an interest in.
374
375To know how user-space can set the access pattern via :ref:`DAMON sysfs
376interface <sysfs_interface>`, refer to :ref:`access_pattern
377<sysfs_access_pattern>` part of the documentation.
378
379
380.. _damon_design_damos_quotas:
381
382Quotas
383~~~~~~
384
385DAMOS upper-bound overhead control feature.  DAMOS could incur high overhead if
386the target access pattern is not properly tuned.  For example, if a huge memory
387region having the access pattern of interest is found, applying the scheme's
388action to all pages of the huge region could consume unacceptably large system
389resources.  Preventing such issues by tuning the access pattern could be
390challenging, especially if the access patterns of the workloads are highly
391dynamic.
392
393To mitigate that situation, DAMOS provides an upper-bound overhead control
394feature called quotas.  It lets users specify an upper limit of time that DAMOS
395can use for applying the action, and/or a maximum bytes of memory regions that
396the action can be applied within a user-specified time duration.
397
398To know how user-space can set the basic quotas via :ref:`DAMON sysfs interface
399<sysfs_interface>`, refer to :ref:`quotas <sysfs_quotas>` part of the
400documentation.
401
402
403.. _damon_design_damos_quotas_prioritization:
404
405Prioritization
406^^^^^^^^^^^^^^
407
408A mechanism for making a good decision under the quotas.  When the action
409cannot be applied to all regions of interest due to the quotas, DAMOS
410prioritizes regions and applies the action to only regions having high enough
411priorities so that it will not exceed the quotas.
412
413The prioritization mechanism should be different for each action.  For example,
414rarely accessed (colder) memory regions would be prioritized for page-out
415scheme action.  In contrast, the colder regions would be deprioritized for huge
416page collapse scheme action.  Hence, the prioritization mechanisms for each
417action are implemented in each DAMON operations set, together with the actions.
418
419Though the implementation is up to the DAMON operations set, it would be common
420to calculate the priority using the access pattern properties of the regions.
421Some users would want the mechanisms to be personalized for their specific
422case.  For example, some users would want the mechanism to weigh the recency
423(``age``) more than the access frequency (``nr_accesses``).  DAMOS allows users
424to specify the weight of each access pattern property and passes the
425information to the underlying mechanism.  Nevertheless, how and even whether
426the weight will be respected are up to the underlying prioritization mechanism
427implementation.
428
429To know how user-space can set the prioritization weights via :ref:`DAMON sysfs
430interface <sysfs_interface>`, refer to :ref:`weights <sysfs_quotas>` part of
431the documentation.
432
433
434.. _damon_design_damos_quotas_auto_tuning:
435
436Aim-oriented Feedback-driven Auto-tuning
437^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
438
439Automatic feedback-driven quota tuning.  Instead of setting the absolute quota
440value, users can specify the metric of their interest, and what target value
441they want the metric value to be.  DAMOS then automatically tunes the
442aggressiveness (the quota) of the corresponding scheme.  For example, if DAMOS
443is under achieving the goal, DAMOS automatically increases the quota.  If DAMOS
444is over achieving the goal, it decreases the quota.
445
446The goal can be specified with three parameters, namely ``target_metric``,
447``target_value``, and ``current_value``.  The auto-tuning mechanism tries to
448make ``current_value`` of ``target_metric`` be same to ``target_value``.
449Currently, two ``target_metric`` are provided.
450
451- ``user_input``: User-provided value.  Users could use any metric that they
452  has interest in for the value.  Use space main workload's latency or
453  throughput, system metrics like free memory ratio or memory pressure stall
454  time (PSI) could be examples.  Note that users should explicitly set
455  ``current_value`` on their own in this case.  In other words, users should
456  repeatedly provide the feedback.
457- ``some_mem_psi_us``: System-wide ``some`` memory pressure stall information
458  in microseconds that measured from last quota reset to next quota reset.
459  DAMOS does the measurement on its own, so only ``target_value`` need to be
460  set by users at the initial time.  In other words, DAMOS does self-feedback.
461
462To know how user-space can set the tuning goal metric, the target value, and/or
463the current value via :ref:`DAMON sysfs interface <sysfs_interface>`, refer to
464:ref:`quota goals <sysfs_schemes_quota_goals>` part of the documentation.
465
466
467.. _damon_design_damos_watermarks:
468
469Watermarks
470~~~~~~~~~~
471
472Conditional DAMOS (de)activation automation.  Users might want DAMOS to run
473only under certain situations.  For example, when a sufficient amount of free
474memory is guaranteed, running a scheme for proactive reclamation would only
475consume unnecessary system resources.  To avoid such consumption, the user would
476need to manually monitor some metrics such as free memory ratio, and turn
477DAMON/DAMOS on or off.
478
479DAMOS allows users to offload such works using three watermarks.  It allows the
480users to configure the metric of their interest, and three watermark values,
481namely high, middle, and low.  If the value of the metric becomes above the
482high watermark or below the low watermark, the scheme is deactivated.  If the
483metric becomes below the mid watermark but above the low watermark, the scheme
484is activated.  If all schemes are deactivated by the watermarks, the monitoring
485is also deactivated.  In this case, the DAMON worker thread only periodically
486checks the watermarks and therefore incurs nearly zero overhead.
487
488To know how user-space can set the watermarks via :ref:`DAMON sysfs interface
489<sysfs_interface>`, refer to :ref:`watermarks <sysfs_watermarks>` part of the
490documentation.
491
492
493.. _damon_design_damos_filters:
494
495Filters
496~~~~~~~
497
498Non-access pattern-based target memory regions filtering.  If users run
499self-written programs or have good profiling tools, they could know something
500more than the kernel, such as future access patterns or some special
501requirements for specific types of memory. For example, some users may know
502only anonymous pages can impact their program's performance.  They can also
503have a list of latency-critical processes.
504
505To let users optimize DAMOS schemes with such special knowledge, DAMOS provides
506a feature called DAMOS filters.  The feature allows users to set an arbitrary
507number of filters for each scheme.  Each filter specifies the type of target
508memory, and whether it should exclude the memory of the type (filter-out), or
509all except the memory of the type (filter-in).
510
511For efficient handling of filters, some types of filters are handled by the
512core layer, while others are handled by operations set.  In the latter case,
513hence, support of the filter types depends on the DAMON operations set.  In
514case of the core layer-handled filters, the memory regions that excluded by the
515filter are not counted as the scheme has tried to the region.  In contrast, if
516a memory regions is filtered by an operations set layer-handled filter, it is
517counted as the scheme has tried.  This difference affects the statistics.
518
519Below types of filters are currently supported.
520
521- anonymous page
522    - Applied to pages that containing data that not stored in files.
523    - Handled by operations set layer.  Supported by only ``paddr`` set.
524- memory cgroup
525    - Applied to pages that belonging to a given cgroup.
526    - Handled by operations set layer.  Supported by only ``paddr`` set.
527- young page
528    - Applied to pages that are accessed after the last access check from the
529      scheme.
530    - Handled by operations set layer.  Supported by only ``paddr`` set.
531- address range
532    - Applied to pages that belonging to a given address range.
533    - Handled by the core logic.
534- DAMON monitoring target
535    - Applied to pages that belonging to a given DAMON monitoring target.
536    - Handled by the core logic.
537
538To know how user-space can set the watermarks via :ref:`DAMON sysfs interface
539<sysfs_interface>`, refer to :ref:`filters <sysfs_filters>` part of the
540documentation.
541
542
543Application Programming Interface
544---------------------------------
545
546The programming interface for kernel space data access-aware applications.
547DAMON is a framework, so it does nothing by itself.  Instead, it only helps
548other kernel components such as subsystems and modules building their data
549access-aware applications using DAMON's core features.  For this, DAMON exposes
550its all features to other kernel components via its application programming
551interface, namely ``include/linux/damon.h``.  Please refer to the API
552:doc:`document </mm/damon/api>` for details of the interface.
553
554
555.. _damon_modules:
556
557Modules
558=======
559
560Because the core of DAMON is a framework for kernel components, it doesn't
561provide any direct interface for the user space.  Such interfaces should be
562implemented by each DAMON API user kernel components, instead.  DAMON subsystem
563itself implements such DAMON API user modules, which are supposed to be used
564for general purpose DAMON control and special purpose data access-aware system
565operations, and provides stable application binary interfaces (ABI) for the
566user space.  The user space can build their efficient data access-aware
567applications using the interfaces.
568
569
570General Purpose User Interface Modules
571--------------------------------------
572
573DAMON modules that provide user space ABIs for general purpose DAMON usage in
574runtime.
575
576DAMON user interface modules, namely 'DAMON sysfs interface' and 'DAMON debugfs
577interface' are DAMON API user kernel modules that provide ABIs to the
578user-space.  Please note that DAMON debugfs interface is currently deprecated.
579
580Like many other ABIs, the modules create files on sysfs and debugfs, allow
581users to specify their requests to and get the answers from DAMON by writing to
582and reading from the files.  As a response to such I/O, DAMON user interface
583modules control DAMON and retrieve the results as user requested via the DAMON
584API, and return the results to the user-space.
585
586The ABIs are designed to be used for user space applications development,
587rather than human beings' fingers.  Human users are recommended to use such
588user space tools.  One such Python-written user space tool is available at
589Github (https://github.com/awslabs/damo), Pypi
590(https://pypistats.org/packages/damo), and Fedora
591(https://packages.fedoraproject.org/pkgs/python-damo/damo/).
592
593Please refer to the ABI :doc:`document </admin-guide/mm/damon/usage>` for
594details of the interfaces.
595
596
597Special-Purpose Access-aware Kernel Modules
598-------------------------------------------
599
600DAMON modules that provide user space ABI for specific purpose DAMON usage.
601
602DAMON sysfs/debugfs user interfaces are for full control of all DAMON features
603in runtime.  For each special-purpose system-wide data access-aware system
604operations such as proactive reclamation or LRU lists balancing, the interfaces
605could be simplified by removing unnecessary knobs for the specific purpose, and
606extended for boot-time and even compile time control.  Default values of DAMON
607control parameters for the usage would also need to be optimized for the
608purpose.
609
610To support such cases, yet more DAMON API user kernel modules that provide more
611simple and optimized user space interfaces are available.  Currently, two
612modules for proactive reclamation and LRU lists manipulation are provided.  For
613more detail, please read the usage documents for those
614(:doc:`/admin-guide/mm/damon/reclaim` and
615:doc:`/admin-guide/mm/damon/lru_sort`).
616