# 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 primitives for virtual address spaces"
	depends on DAMON && MMU
	select PAGE_IDLE_FLAG
	help
	  This builds the default data access monitoring primitives for DAMON
	  that work for virtual address spaces.

config DAMON_PADDR
	bool "Data access monitoring primitives for the physical address space"
	depends on DAMON && MMU
	select PAGE_IDLE_FLAG
	help
	  This builds the default data access monitoring primitives for DAMON
	  that works for the physical address space.

config DAMON_VADDR_KUNIT_TEST
	bool "Test for DAMON primitives" if !KUNIT_ALL_TESTS
	depends on DAMON_VADDR && KUNIT=y
	default KUNIT_ALL_TESTS
	help
	  This builds the DAMON virtual addresses primitives 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
	bool "DAMON debugfs interface"
	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.

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.

endmenu
