# 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_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
	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
	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
	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 debugfs 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_DBGFS_DEPRECATED
	bool "DAMON debugfs interface (DEPRECATED!)"
	depends on DAMON_VADDR && DAMON_PADDR && DEBUG_FS
	help
	  This builds the debugfs interface for DAMON.  The user space admins
	  can use the interface for arbitrary data access monitoring.

	  If unsure, say N.

	  This is deprecated, so users should move to the sysfs interface
	  (DAMON_SYSFS).  If you depend on this and cannot move, please report
	  your usecase to damon@lists.linux.dev and linux-mm@kvack.org.

config DAMON_DBGFS
	bool
	default y
	depends on DAMON_DBGFS_DEPRECATED

config DAMON_DBGFS_KUNIT_TEST
	bool "Test for damon debugfs interface" if !KUNIT_ALL_TESTS
	depends on DAMON_DBGFS && KUNIT=y
	default KUNIT_ALL_TESTS
	help
	  This builds the DAMON debugfs 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.

endmenu
