Linux Kernel Selftest development
 help / color / mirror / Atom feed
* [RFC PATCH 00/13] Extedn DAMOS filters for address ranges and
@ 2023-07-28 20:34 SeongJae Park
  2023-07-28 20:34 ` [RFC PATCH 02/13] mm/damon/sysfs-schemes: support address range type DAMOS filter SeongJae Park
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: SeongJae Park @ 2023-07-28 20:34 UTC (permalink / raw)
  To: Andrew Morton
  Cc: SeongJae Park, Jonathan Corbet, Shuah Khan, Brendan Higgins,
	damon, linux-doc, linux-kernel, linux-kselftest, kunit-dev,
	linux-mm

There are use cases that need to apply DAMOS schemes to specific address
ranges or DAMON monitoring targets.  NUMA nodes in the physical address
space, special memory objects in the virtual address space, and
monitoring target specific efficient monitoring results snapshot
retrieval could be examples of such use cases.  This patchset extends
DAMOS filters feature for such cases, by implementing two more filter
types, namely address ranges and DAMON monitoring types.

Patches sequence
----------------

The first seven patches are for the address ranges based DAMOS filter.
The first patch implements the filter feature and expose it via DAMON
kernel API.  The second patch further expose the feature to users via
DAMON sysfs interface.  The third and fourth patches implement unit
tests and selftests for the feature.  Three patches (fifth to seventh)
updating the documents follow.

The following six patches are for the DAMON monitoring target based
DAMOS filter.  The eighth patch implements the feature in the core layer
and expose it via DAMON's kernel API.  The ninth patch further expose it
to users via DAMON sysfs interface.  Tenth patch add a selftest, and two
patches (eleventh and twelfth) update documents.

SeongJae Park (13):
  mm/damon/core: introduce address range type damos filter
  mm/damon/sysfs-schemes: support address range type DAMOS filter
  mm/damon/core-test: add a unit test for __damos_filter_out()
  selftests/damon/sysfs: test address range damos filter
  Docs/mm/damon/design: update for address range filters
  Docs/ABI/damon: update for address range DAMOS filter
  Docs/admin-guide/mm/damon/usage: update for address range type DAMOS
    filter
  mm/damon/core: implement target type damos filter
  mm/damon/sysfs-schemes: support target damos filter
  selftests/damon/sysfs: test damon_target filter
  Docs/mm/damon/design: update for DAMON monitoring target type DAMOS
    filter
  Docs/ABI/damon: update for DAMON monitoring target type DAMOS filter
  Docs/admin-guide/mm/damon/usage: update for DAMON monitoring target
    type DAMOS filter

 .../ABI/testing/sysfs-kernel-mm-damon         | 27 +++++-
 Documentation/admin-guide/mm/damon/usage.rst  | 34 +++++---
 Documentation/mm/damon/design.rst             | 24 ++++--
 include/linux/damon.h                         | 28 +++++--
 mm/damon/core-test.h                          | 61 ++++++++++++++
 mm/damon/core.c                               | 62 ++++++++++++++
 mm/damon/sysfs-schemes.c                      | 83 +++++++++++++++++++
 tools/testing/selftests/damon/sysfs.sh        |  5 ++
 8 files changed, 299 insertions(+), 25 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [RFC PATCH 02/13] mm/damon/sysfs-schemes: support address range type DAMOS filter
  2023-07-28 20:34 [RFC PATCH 00/13] Extedn DAMOS filters for address ranges and SeongJae Park
@ 2023-07-28 20:34 ` SeongJae Park
  2023-07-28 20:34 ` [RFC PATCH 04/13] selftests/damon/sysfs: test address range damos filter SeongJae Park
  2023-07-28 20:34 ` [RFC PATCH 10/13] selftests/damon/sysfs: test damon_target filter SeongJae Park
  2 siblings, 0 replies; 4+ messages in thread
From: SeongJae Park @ 2023-07-28 20:34 UTC (permalink / raw)
  To: Andrew Morton
  Cc: SeongJae Park, Brendan Higgins, damon, linux-mm, kunit-dev,
	linux-kselftest, linux-kernel

Date: Sat, 22 Jul 2023 19:45:58 +0000
Subject: [RFC PATCH 03/13] mm/damon/core-test: add a unit test for
 __damos_filter_out()

Implement a kunit test for the core of address range DAMOS filter
handling, namely __damos_filter_out().  The test especially focus on
regions that overlap with given filter's target address range.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 mm/damon/core-test.h | 61 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)

diff --git a/mm/damon/core-test.h b/mm/damon/core-test.h
index bb07721909e1..44e925bbb094 100644
--- a/mm/damon/core-test.h
+++ b/mm/damon/core-test.h
@@ -341,6 +341,66 @@ static void damon_test_set_attrs(struct kunit *test)
 	KUNIT_EXPECT_EQ(test, damon_set_attrs(c, &invalid_attrs), -EINVAL);
 }
 
+static void damos_test_filter_out(struct kunit *test)
+{
+	struct damon_target *t;
+	struct damon_region *r, *r2;
+	struct damos_filter *f;
+
+	f = damos_new_filter(DAMOS_FILTER_TYPE_ADDR, true);
+	f->addr_range = (struct damon_addr_range){
+		.start = DAMON_MIN_REGION * 2, .end = DAMON_MIN_REGION * 6};
+
+	t = damon_new_target();
+	r = damon_new_region(DAMON_MIN_REGION * 3, DAMON_MIN_REGION * 5);
+	damon_add_region(r, t);
+
+	/* region in the range */
+	KUNIT_EXPECT_TRUE(test, __damos_filter_out(NULL, t, r, f));
+	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1);
+
+	/* region before the range */
+	r->ar.start = DAMON_MIN_REGION * 1;
+	r->ar.end = DAMON_MIN_REGION * 2;
+	KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f));
+	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1);
+
+	/* region after the range */
+	r->ar.start = DAMON_MIN_REGION * 6;
+	r->ar.end = DAMON_MIN_REGION * 8;
+	KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f));
+	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1);
+
+	/* region started before the range */
+	r->ar.start = DAMON_MIN_REGION * 1;
+	r->ar.end = DAMON_MIN_REGION * 4;
+	KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f));
+	/* filter should have split the region */
+	KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 1);
+	KUNIT_EXPECT_EQ(test, r->ar.end, DAMON_MIN_REGION * 2);
+	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 2);
+	r2 = damon_next_region(r);
+	KUNIT_EXPECT_EQ(test, r2->ar.start, DAMON_MIN_REGION * 2);
+	KUNIT_EXPECT_EQ(test, r2->ar.end, DAMON_MIN_REGION * 4);
+	damon_destroy_region(r2, t);
+
+	/* region started in the range */
+	r->ar.start = DAMON_MIN_REGION * 2;
+	r->ar.end = DAMON_MIN_REGION * 8;
+	KUNIT_EXPECT_TRUE(test, __damos_filter_out(NULL, t, r, f));
+	/* filter should have split the region */
+	KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 2);
+	KUNIT_EXPECT_EQ(test, r->ar.end, DAMON_MIN_REGION * 6);
+	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 2);
+	r2 = damon_next_region(r);
+	KUNIT_EXPECT_EQ(test, r2->ar.start, DAMON_MIN_REGION * 6);
+	KUNIT_EXPECT_EQ(test, r2->ar.end, DAMON_MIN_REGION * 8);
+	damon_destroy_region(r2, t);
+
+	damon_free_target(t);
+	damos_free_filter(f);
+}
+
 static struct kunit_case damon_test_cases[] = {
 	KUNIT_CASE(damon_test_target),
 	KUNIT_CASE(damon_test_regions),
@@ -353,6 +413,7 @@ static struct kunit_case damon_test_cases[] = {
 	KUNIT_CASE(damon_test_set_regions),
 	KUNIT_CASE(damon_test_update_monitoring_result),
 	KUNIT_CASE(damon_test_set_attrs),
+	KUNIT_CASE(damos_test_filter_out),
 	{},
 };
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [RFC PATCH 04/13] selftests/damon/sysfs: test address range damos filter
  2023-07-28 20:34 [RFC PATCH 00/13] Extedn DAMOS filters for address ranges and SeongJae Park
  2023-07-28 20:34 ` [RFC PATCH 02/13] mm/damon/sysfs-schemes: support address range type DAMOS filter SeongJae Park
@ 2023-07-28 20:34 ` SeongJae Park
  2023-07-28 20:34 ` [RFC PATCH 10/13] selftests/damon/sysfs: test damon_target filter SeongJae Park
  2 siblings, 0 replies; 4+ messages in thread
From: SeongJae Park @ 2023-07-28 20:34 UTC (permalink / raw)
  To: Andrew Morton
  Cc: SeongJae Park, Shuah Khan, damon, linux-mm, linux-kselftest,
	linux-kernel

Add a selftest for checking existence of addr_{start,end} files under
DAMOS filter directory, and 'addr' damos filter type input of DAMON
sysfs interface.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 tools/testing/selftests/damon/sysfs.sh | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tools/testing/selftests/damon/sysfs.sh b/tools/testing/selftests/damon/sysfs.sh
index 967e27267549..5677cfd342fc 100644
--- a/tools/testing/selftests/damon/sysfs.sh
+++ b/tools/testing/selftests/damon/sysfs.sh
@@ -103,9 +103,12 @@ test_filter()
 	ensure_file "$filter_dir/type" "exist" "600"
 	ensure_write_succ "$filter_dir/type" "anon" "valid input"
 	ensure_write_succ "$filter_dir/type" "memcg" "valid input"
+	ensure_write_succ "$filter_dir/type" "addr" "valid input"
 	ensure_write_fail "$filter_dir/type" "foo" "invalid input"
 	ensure_file "$filter_dir/matching" "exist" "600"
 	ensure_file "$filter_dir/memcg_path" "exist" "600"
+	ensure_file "$filter_dir/addr_start" "exist" "600"
+	ensure_file "$filter_dir/addr_end" "exist" "600"
 }
 
 test_filters()
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [RFC PATCH 10/13] selftests/damon/sysfs: test damon_target filter
  2023-07-28 20:34 [RFC PATCH 00/13] Extedn DAMOS filters for address ranges and SeongJae Park
  2023-07-28 20:34 ` [RFC PATCH 02/13] mm/damon/sysfs-schemes: support address range type DAMOS filter SeongJae Park
  2023-07-28 20:34 ` [RFC PATCH 04/13] selftests/damon/sysfs: test address range damos filter SeongJae Park
@ 2023-07-28 20:34 ` SeongJae Park
  2 siblings, 0 replies; 4+ messages in thread
From: SeongJae Park @ 2023-07-28 20:34 UTC (permalink / raw)
  To: Andrew Morton
  Cc: SeongJae Park, Shuah Khan, damon, linux-mm, linux-kselftest,
	linux-kernel

Test existence of files and validity of input keyword for DAMON
monitoring target based DAMOS filter on DAMON sysfs interface.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 tools/testing/selftests/damon/sysfs.sh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/testing/selftests/damon/sysfs.sh b/tools/testing/selftests/damon/sysfs.sh
index 5677cfd342fc..60a9a305aef0 100644
--- a/tools/testing/selftests/damon/sysfs.sh
+++ b/tools/testing/selftests/damon/sysfs.sh
@@ -104,11 +104,13 @@ test_filter()
 	ensure_write_succ "$filter_dir/type" "anon" "valid input"
 	ensure_write_succ "$filter_dir/type" "memcg" "valid input"
 	ensure_write_succ "$filter_dir/type" "addr" "valid input"
+	ensure_write_succ "$filter_dir/type" "target" "valid input"
 	ensure_write_fail "$filter_dir/type" "foo" "invalid input"
 	ensure_file "$filter_dir/matching" "exist" "600"
 	ensure_file "$filter_dir/memcg_path" "exist" "600"
 	ensure_file "$filter_dir/addr_start" "exist" "600"
 	ensure_file "$filter_dir/addr_end" "exist" "600"
+	ensure_file "$filter_dir/damon_target_idx" "exist" "600"
 }
 
 test_filters()
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-07-28 20:35 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-28 20:34 [RFC PATCH 00/13] Extedn DAMOS filters for address ranges and SeongJae Park
2023-07-28 20:34 ` [RFC PATCH 02/13] mm/damon/sysfs-schemes: support address range type DAMOS filter SeongJae Park
2023-07-28 20:34 ` [RFC PATCH 04/13] selftests/damon/sysfs: test address range damos filter SeongJae Park
2023-07-28 20:34 ` [RFC PATCH 10/13] selftests/damon/sysfs: test damon_target filter SeongJae Park

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox