| # SPDX-License-Identifier: GPL-2.0-only | |
| menu "Data Access Monitoring" | |
| config DAMON | |
| bool "DAMON: Data Access Monitoring Framework" | |
| help | |
| This builds a framework that allows kernel subsystems to monitor | |
| access frequency of each memory region. The information can be useful | |
| for performance-centric DRAM level memory management. | |
| See https://www.kernel.org/doc/html/latest/mm/damon/index.html for | |
| more information. | |
| config DAMON_DEBUG_SANITY | |
| bool "Check sanity of DAMON code" | |
| depends on DAMON | |
| help | |
| This enables additional DAMON debugging-purpose sanity checks in | |
| DAMON code. This can be useful for finding bugs, but impose | |
| additional overhead. This is therefore recommended to be enabled on | |
| only development and test setups. | |
| If unsure, say N. | |
| config DAMON_KUNIT_TEST | |
| bool "Test for damon" if !KUNIT_ALL_TESTS | |
| depends on DAMON && KUNIT=y | |
| default KUNIT_ALL_TESTS | |
| help | |
| This builds the DAMON Kunit test suite. | |
| For more information on KUnit and unit tests in general, please refer | |
| to the KUnit documentation. | |
| If unsure, say N. | |
| config DAMON_VADDR | |
| bool "Data access monitoring operations for virtual address spaces" | |
| depends on DAMON && MMU | |
| select PAGE_IDLE_FLAG | |
| default DAMON | |
| help | |
| This builds the default data access monitoring operations for DAMON | |
| that work for virtual address spaces. | |
| config DAMON_PADDR | |
| bool "Data access monitoring operations for the physical address space" | |
| depends on DAMON && MMU | |
| select PAGE_IDLE_FLAG | |
| default DAMON | |
| help | |
| This builds the default data access monitoring operations for DAMON | |
| that works for the physical address space. | |
| config DAMON_VADDR_KUNIT_TEST | |
| bool "Test for DAMON operations" if !KUNIT_ALL_TESTS | |
| depends on DAMON_VADDR && KUNIT=y | |
| default KUNIT_ALL_TESTS | |
| help | |
| This builds the DAMON virtual addresses operations Kunit test suite. | |
| For more information on KUnit and unit tests in general, please refer | |
| to the KUnit documentation. | |
| If unsure, say N. | |
| config DAMON_SYSFS | |
| bool "DAMON sysfs interface" | |
| depends on DAMON && SYSFS | |
| default DAMON | |
| help | |
| This builds the sysfs interface for DAMON. The user space can use | |
| the interface for arbitrary data access monitoring. | |
| config DAMON_SYSFS_KUNIT_TEST | |
| bool "Test for damon sysfs interface" if !KUNIT_ALL_TESTS | |
| depends on DAMON_SYSFS && KUNIT=y | |
| default KUNIT_ALL_TESTS | |
| help | |
| This builds the DAMON sysfs interface Kunit test suite. | |
| For more information on KUnit and unit tests in general, please refer | |
| to the KUnit documentation. | |
| If unsure, say N. | |
| config DAMON_RECLAIM | |
| bool "Build DAMON-based reclaim (DAMON_RECLAIM)" | |
| depends on DAMON_PADDR | |
| help | |
| This builds the DAMON-based reclamation subsystem. It finds pages | |
| that not accessed for a long time (cold) using DAMON and reclaim | |
| those. | |
| This is suggested to be used as a proactive and lightweight | |
| reclamation under light memory pressure, while the traditional page | |
| scanning-based reclamation is used for heavy pressure. | |
| config DAMON_LRU_SORT | |
| bool "Build DAMON-based LRU-lists sorting (DAMON_LRU_SORT)" | |
| depends on DAMON_PADDR | |
| help | |
| This builds the DAMON-based LRU-lists sorting subsystem. It tries to | |
| protect frequently accessed (hot) pages while rarely accessed (cold) | |
| pages reclaimed first under memory pressure. | |
| config DAMON_STAT | |
| bool "Build data access monitoring stat (DAMON_STAT)" | |
| depends on DAMON_PADDR | |
| help | |
| This builds the DAMON-based access monitoring statistics subsystem. | |
| It runs DAMON and expose access monitoring results in simple stat | |
| metrics. | |
| config DAMON_STAT_ENABLED_DEFAULT | |
| bool "Enable DAMON_STAT by default" | |
| depends on DAMON_STAT | |
| default DAMON_STAT | |
| help | |
| Whether to enable DAMON_STAT by default. Users can disable it in | |
| boot or runtime using its 'enabled' parameter. | |
| endmenu |