# 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://damonitor.github.io/doc/html/latest-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
