# 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
