162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci
362306a36Sopenharmony_cimenu "Data Access Monitoring"
462306a36Sopenharmony_ci
562306a36Sopenharmony_ciconfig DAMON
662306a36Sopenharmony_ci	bool "DAMON: Data Access Monitoring Framework"
762306a36Sopenharmony_ci	help
862306a36Sopenharmony_ci	  This builds a framework that allows kernel subsystems to monitor
962306a36Sopenharmony_ci	  access frequency of each memory region. The information can be useful
1062306a36Sopenharmony_ci	  for performance-centric DRAM level memory management.
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci	  See https://damonitor.github.io/doc/html/latest-damon/index.html for
1362306a36Sopenharmony_ci	  more information.
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciconfig DAMON_KUNIT_TEST
1662306a36Sopenharmony_ci	bool "Test for damon" if !KUNIT_ALL_TESTS
1762306a36Sopenharmony_ci	depends on DAMON && KUNIT=y
1862306a36Sopenharmony_ci	default KUNIT_ALL_TESTS
1962306a36Sopenharmony_ci	help
2062306a36Sopenharmony_ci	  This builds the DAMON Kunit test suite.
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci	  For more information on KUnit and unit tests in general, please refer
2362306a36Sopenharmony_ci	  to the KUnit documentation.
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	  If unsure, say N.
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciconfig DAMON_VADDR
2862306a36Sopenharmony_ci	bool "Data access monitoring operations for virtual address spaces"
2962306a36Sopenharmony_ci	depends on DAMON && MMU
3062306a36Sopenharmony_ci	select PAGE_IDLE_FLAG
3162306a36Sopenharmony_ci	help
3262306a36Sopenharmony_ci	  This builds the default data access monitoring operations for DAMON
3362306a36Sopenharmony_ci	  that work for virtual address spaces.
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciconfig DAMON_PADDR
3662306a36Sopenharmony_ci	bool "Data access monitoring operations for the physical address space"
3762306a36Sopenharmony_ci	depends on DAMON && MMU
3862306a36Sopenharmony_ci	select PAGE_IDLE_FLAG
3962306a36Sopenharmony_ci	help
4062306a36Sopenharmony_ci	  This builds the default data access monitoring operations for DAMON
4162306a36Sopenharmony_ci	  that works for the physical address space.
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ciconfig DAMON_VADDR_KUNIT_TEST
4462306a36Sopenharmony_ci	bool "Test for DAMON operations" if !KUNIT_ALL_TESTS
4562306a36Sopenharmony_ci	depends on DAMON_VADDR && KUNIT=y
4662306a36Sopenharmony_ci	default KUNIT_ALL_TESTS
4762306a36Sopenharmony_ci	help
4862306a36Sopenharmony_ci	  This builds the DAMON virtual addresses operations Kunit test suite.
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci	  For more information on KUnit and unit tests in general, please refer
5162306a36Sopenharmony_ci	  to the KUnit documentation.
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci	  If unsure, say N.
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ciconfig DAMON_SYSFS
5662306a36Sopenharmony_ci	bool "DAMON sysfs interface"
5762306a36Sopenharmony_ci	depends on DAMON && SYSFS
5862306a36Sopenharmony_ci	help
5962306a36Sopenharmony_ci	  This builds the sysfs interface for DAMON.  The user space can use
6062306a36Sopenharmony_ci	  the interface for arbitrary data access monitoring.
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ciconfig DAMON_DBGFS
6362306a36Sopenharmony_ci	bool "DAMON debugfs interface (DEPRECATED!)"
6462306a36Sopenharmony_ci	depends on DAMON_VADDR && DAMON_PADDR && DEBUG_FS
6562306a36Sopenharmony_ci	help
6662306a36Sopenharmony_ci	  This builds the debugfs interface for DAMON.  The user space admins
6762306a36Sopenharmony_ci	  can use the interface for arbitrary data access monitoring.
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci	  If unsure, say N.
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci	  This is deprecated, so users should move to the sysfs interface
7262306a36Sopenharmony_ci	  (DAMON_SYSFS).  If you depend on this and cannot move, please report
7362306a36Sopenharmony_ci	  your usecase to damon@lists.linux.dev and linux-mm@kvack.org.
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ciconfig DAMON_DBGFS_KUNIT_TEST
7662306a36Sopenharmony_ci	bool "Test for damon debugfs interface" if !KUNIT_ALL_TESTS
7762306a36Sopenharmony_ci	depends on DAMON_DBGFS && KUNIT=y
7862306a36Sopenharmony_ci	default KUNIT_ALL_TESTS
7962306a36Sopenharmony_ci	help
8062306a36Sopenharmony_ci	  This builds the DAMON debugfs interface Kunit test suite.
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci	  For more information on KUnit and unit tests in general, please refer
8362306a36Sopenharmony_ci	  to the KUnit documentation.
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci	  If unsure, say N.
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ciconfig DAMON_RECLAIM
8862306a36Sopenharmony_ci	bool "Build DAMON-based reclaim (DAMON_RECLAIM)"
8962306a36Sopenharmony_ci	depends on DAMON_PADDR
9062306a36Sopenharmony_ci	help
9162306a36Sopenharmony_ci	  This builds the DAMON-based reclamation subsystem.  It finds pages
9262306a36Sopenharmony_ci	  that not accessed for a long time (cold) using DAMON and reclaim
9362306a36Sopenharmony_ci	  those.
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci	  This is suggested to be used as a proactive and lightweight
9662306a36Sopenharmony_ci	  reclamation under light memory pressure, while the traditional page
9762306a36Sopenharmony_ci	  scanning-based reclamation is used for heavy pressure.
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ciconfig DAMON_LRU_SORT
10062306a36Sopenharmony_ci	bool "Build DAMON-based LRU-lists sorting (DAMON_LRU_SORT)"
10162306a36Sopenharmony_ci	depends on DAMON_PADDR
10262306a36Sopenharmony_ci	help
10362306a36Sopenharmony_ci	  This builds the DAMON-based LRU-lists sorting subsystem.  It tries to
10462306a36Sopenharmony_ci	  protect frequently accessed (hot) pages while rarely accessed (cold)
10562306a36Sopenharmony_ci	  pages reclaimed first under memory pressure.
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ciendmenu
108