From nobody Thu Oct 9 00:37:50 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F15421771F; Sun, 22 Jun 2025 21:03:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626216; cv=none; b=PcgUospmxy1S+CELN0UOBT8IF/cU/bqMJcHPzypgbYhjXMsnRR9HRc9jdsmhiLv/MYtAVf1TzhGCJEhAwY/GiHWbdmCeLLw7UKK/vR1ASgHSJyJ05a8phvbTWnCvm9w0JMY+D7TvJUoanfMLQJgHSWiE/P9UvXZtLrqtBbCWsAc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626216; c=relaxed/simple; bh=LQYj+y4NHRcCBylThRwztooldZRKZFHtpfiwZ2j/m2o=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZWbNKs7IkwhY0kySDEIy+3vJQfMZjYX5Uy9zSK/GafQBoPBJAPZcaXG09ri1/lxM/OXwJk3zP9/gmPGXaGEMOzD6uxiY7nHOFFFd5BVXLk6MxLaTlS3L3wy/gvtQuiVxMEk/o+/1ce05ZZK1qwdiQyskNbgqAp/kfny+QnOfqSg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qeidBmbx; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qeidBmbx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 92A51C4CEE3; Sun, 22 Jun 2025 21:03:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750626215; bh=LQYj+y4NHRcCBylThRwztooldZRKZFHtpfiwZ2j/m2o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qeidBmbxkU6ngF7IBtFVu+zih2sxcShx+26Ils18iTjjo3npHIk8HmWLSrAod6gSV qLvYEF7/ME/PMIqWbWeYPkCpXjnBlZi1lQiA8lpj8f7ZbGpoySZfprOuVjfo/to63d GLIyKZZMTU+NwnwXouQCAw07vzo90OLAvtzdYCsTgF18tj13yf3H+bUH6KbZHdsYIt YV1crGBjVPxVHSrNWcEE/bLFKLiLbRNuLtmQBqxdqfwP0346HCVNL5x3qEWnrrI91o G6xKbqLroOpTioNGy8+meoe3rkSJmqwYWhxO9AM10wvKeU+nyYmroaaR000kOKX33q bd5dQ9/O1UyFg== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , Shuah Khan , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 1/6] selftests/damon: add drgn script for extracting damon status Date: Sun, 22 Jun 2025 14:03:25 -0700 Message-Id: <20250622210330.40490-2-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250622210330.40490-1-sj@kernel.org> References: <20250622210330.40490-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 'drgn' is a useful tool for extracting kernel internal data structures such as DAMON's parameter and running status. Add a 'drgn' script that extracts such DAMON internal data at runtime, for using it as a tool for seeing if a test input has made expected results in the kernel. The script saves or prints out the DAMON internal data as a json file or string. This is for making use of it not very depends on 'drgn'. If 'drgn' is not available on a test setup and we find alternative tools for doing that, the json-based tests can be updated to use an alternative tool in future. Note that the script is tested with 'drgn v0.0.22'. Signed-off-by: SeongJae Park --- .../selftests/damon/drgn_dump_damon_status.py | 161 ++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100755 tools/testing/selftests/damon/drgn_dump_damon_status.py diff --git a/tools/testing/selftests/damon/drgn_dump_damon_status.py b/tool= s/testing/selftests/damon/drgn_dump_damon_status.py new file mode 100755 index 000000000000..333a0d0c4bff --- /dev/null +++ b/tools/testing/selftests/damon/drgn_dump_damon_status.py @@ -0,0 +1,161 @@ +#!/usr/bin/env drgn +# SPDX-License-Identifier: GPL-2.0 + +''' +Read DAMON context data and dump as a json string. +''' +import drgn +from drgn import FaultError, NULL, Object, cast, container_of, execscript,= offsetof, reinterpret, sizeof +from drgn.helpers.common import * +from drgn.helpers.linux import * + +import json +import sys + +if "prog" not in globals(): + try: + prog =3D drgn.get_default_prog() + except drgn.NoDefaultProgramError: + prog =3D drgn.program_from_kernel() + drgn.set_default_prog(prog) + +def to_dict(object, attr_name_converter): + d =3D {} + for attr_name, converter in attr_name_converter: + d[attr_name] =3D converter(getattr(object, attr_name)) + return d + +def intervals_goal_to_dict(goal): + return to_dict(goal, [ + ['access_bp', int], + ['aggrs', int], + ['min_sample_us', int], + ['max_sample_us', int], + ]) + +def attrs_to_dict(attrs): + return to_dict(attrs, [ + ['sample_interval', int], + ['aggr_interval', int], + ['ops_update_interval', int], + ['intervals_goal', intervals_goal_to_dict], + ['min_nr_regions', int], + ['max_nr_regions', int], + ]) + +def addr_range_to_dict(addr_range): + return to_dict(addr_range, [ + ['start', int], + ['end', int], + ]) + +def region_to_dict(region): + return to_dict(region, [ + ['ar', addr_range_to_dict], + ['sampling_addr', int], + ['nr_accesses', int], + ['nr_accesses_bp', int], + ['age', int], + ]) + +def regions_to_list(regions): + return [region_to_dict(r) + for r in list_for_each_entry( + 'struct damon_region', regions.address_of_(), 'list')] + +def target_to_dict(target): + return to_dict(target, [ + ['pid', int], + ['nr_regions', int], + ['regions_list', regions_to_list], + ]) + +def targets_to_list(targets): + return [target_to_dict(t) + for t in list_for_each_entry( + 'struct damon_target', targets.address_of_(), 'list')] + +def damos_access_pattern_to_dict(pattern): + return to_dict(pattern, [ + ['min_sz_region', int], + ['max_sz_region', int], + ['min_nr_accesses', int], + ['max_nr_accesses', int], + ['min_age_region', int], + ['max_age_region', int], + ]) + +def damos_quota_goal_to_dict(goal): + return to_dict(goal, [ + ['metric', int], + ['target_value', int], + ['current_value', int], + ['last_psi_total', int], + ['nid', int], + ]) + +def damos_quota_goals_to_list(goals): + return [damos_quota_goal_to_dict(g) + for g in list_for_each_entry( + 'struct damos_quota_goal', goals.address_of_(), 'list')] + +def damos_quota_to_dict(quota): + return to_dict(quota, [ + ['reset_interval', int], + ['ms', int], ['sz', int], + ['goals', damos_quota_goals_to_list], + ['esz', int], + ['weight_sz', int], + ['weight_nr_accesses', int], + ['weight_age', int], + ]) + +def damos_watermarks_to_dict(watermarks): + return to_dict(watermarks, [ + ['metric', int], + ['interval', int], + ['high', int], ['mid', int], ['low', int], + ]) + +def scheme_to_dict(scheme): + return to_dict(scheme, [ + ['pattern', damos_access_pattern_to_dict], + ['action', int], + ['apply_interval_us', int], + ['quota', damos_quota_to_dict], + ['wmarks', damos_watermarks_to_dict], + ['target_nid', int], + ]) + +def schemes_to_list(schemes): + return [scheme_to_dict(s) + for s in list_for_each_entry( + 'struct damos', schemes.address_of_(), 'list')] + +def damon_ctx_to_dict(ctx): + return to_dict(ctx, [ + ['attrs', attrs_to_dict], + ['adaptive_targets', targets_to_list], + ['schemes', schemes_to_list], + ]) + +def main(): + if len(sys.argv) < 3: + print('Usage: %s ' % sys.argv[0]) + exit(1) + + pid =3D int(sys.argv[1]) + file_to_store =3D sys.argv[2] + + kthread_data =3D cast('struct kthread *', + find_task(prog, pid).worker_private).data + ctx =3D cast('struct damon_ctx *', kthread_data) + status =3D {'contexts': [damon_ctx_to_dict(ctx)]} + if file_to_store =3D=3D 'stdout': + print(json.dumps(status, indent=3D4)) + else: + with open(file_to_store, 'w') as f: + json.dump(status, f, indent=3D4) + +if __name__ =3D=3D '__main__': + main() --=20 2.39.5 From nobody Thu Oct 9 00:37:50 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1291B219A95; Sun, 22 Jun 2025 21:03:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626217; cv=none; b=hR1ITaLV0jqzek5R8KnUWLSMPplm5Jbya9OihcHHgaubpcEhkgZvqJRn6dEsL9u4hPmxot2ebpUEQv4BL0I1TQxnKdZAXscSSWmqA1tmAT/PE5sS9Y99ZUpfES0XkQt2SK9U188u+fgxJT7xYgW9UmXOBvwJ3W5wYhEoG11QkoQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626217; c=relaxed/simple; bh=/RUstGJfkJjRI+Pr6WW5egPsetwstPl+AsaLyBk7JE4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Afy70MDEWkUFEgopKvkoBSL7BP4JUXQMfEs/zhcqLK7mZ1bQFCMmO5CqV8pmDk9DfUgBqW2LNqC0omdHAgVBF2X4qEL9x2ppAPPBQyIXQmG1efTl7SAKALsM9ofk2jwNaPUayAl985f7zCDWKmH3cXibDNIuIPjQLAudF61V3eo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SutzdAv5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SutzdAv5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C050AC4CEF9; Sun, 22 Jun 2025 21:03:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750626216; bh=/RUstGJfkJjRI+Pr6WW5egPsetwstPl+AsaLyBk7JE4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SutzdAv5FmZPQLzQd5uxJiGRCyX33vYX8YZ6a9jyu9gW6/MSmjfCPZHCgt2dLLuR4 NahuqXySvzmk4Ncl4QfHBqqz0F8uCvIX2Bt9xE8KBvmuDrr0NkYfQ5NYE7GfO0oOuS dQeY40T9lZ06fq8ew4Oqsf5xagcKtI4KwVx9KftQB5YSN8dlwtKwFgX7Q1HulkF+BU qKvXBrsMa3jekBKzPi6Oh0+rrOjf3qNx9Bz8uBowfGmMl9F+Wmt1z3XK7rPRsQTFw7 NeH6JuyVBQ3o3R/YMuF7wITjp9leHWbMxAROdtmA9xlIhJNjd3JKgqOF2IV0DazRVe x1/XdEJnlr+nQ== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , Shuah Khan , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 2/6] selftests/damon/_damon_sysfs: set Kdamond.pid in start() Date: Sun, 22 Jun 2025 14:03:26 -0700 Message-Id: <20250622210330.40490-3-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250622210330.40490-1-sj@kernel.org> References: <20250622210330.40490-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" _damon_sysfs.py is a Python module for reading and writing DAMON sysfs for testing. It is not reading resulting kdamond pids. Read and update those when starting kdamonds. Signed-off-by: SeongJae Park --- tools/testing/selftests/damon/_damon_sysfs.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/testing/selftests/damon/_damon_sysfs.py b/tools/testing/= selftests/damon/_damon_sysfs.py index 5b1cb6b3ce4e..f587e117472e 100644 --- a/tools/testing/selftests/damon/_damon_sysfs.py +++ b/tools/testing/selftests/damon/_damon_sysfs.py @@ -408,6 +408,9 @@ class Kdamond: if err is not None: return err err =3D write_file(os.path.join(self.sysfs_dir(), 'state'), 'on') + if err is not None: + return err + self.pid, err =3D read_file(os.path.join(self.sysfs_dir(), 'pid')) return err =20 def stop(self): --=20 2.39.5 From nobody Thu Oct 9 00:37:50 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7843A220686; Sun, 22 Jun 2025 21:03:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626218; cv=none; b=g3/aXP5WGAx1DGFEC0TQKq4PjH/kqZ40TvNnXXe9gWgYPF8EqPAN0JM8B1tfmKfp+IcBODH1QbOQtNPkyL8X/V4yn9pF/Tmg+jncQ9s+3warAL3TUohddQXnciOxpspPbZG08Fw/SxpvAr6Zfd5w9WaLOSQcdMmAIVpuCzZshXc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626218; c=relaxed/simple; bh=pHn9v+99jI3xSiVYbi8lj20xdzjr33kYRD7kjoO8nBY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TRnxYQnMEAmk7oCnvgJ93CnRXp2619R04Eux8YHUftVYGzia6w/1p8t9DuPvKjoK+R21YaOP0H6amHbkZKuGuXasynB5Q3zZ4QEC8Yj0SPfJHK18/SGwiJanA2fQb0va2Drkh3FUD9OTNzFNjTlcRB5YCMn0824VLsgOplaovu4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kt8oW8Ep; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kt8oW8Ep" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D97BEC4CEF1; Sun, 22 Jun 2025 21:03:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750626218; bh=pHn9v+99jI3xSiVYbi8lj20xdzjr33kYRD7kjoO8nBY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kt8oW8Epd/RneOTAgnbfU7Ap9ThPd4rWlYYJqr5Al1DnENKRGu3jCHwUHt7BjrLKn Kt/U/OiaGp0Kq4tEf1sdmbDVm/xAu3SosutN2zj/pNU/Kdh9JHi68whff9F+4UkkC+ 3+egOtK2NqWa2M9VixcD7IimNUNvO7Ro6z6n/pp1Di2c4ooeaP4w3DF1QGAsfwwG8Z DU+bZQ0ToG+Ytddap7fw1s3lhq7wK3qTQAQIEmxU87Fq8VL8YxFtqxix2ypWhC5FgN 6BBoMPPzSgxDj2JzY7Ml0RwqZM2bF/Fbp680EFv4+IJEdJ643ODv08+G0+SYC6W1tc rGQDZASdhSlHw== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , Shuah Khan , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 3/6] selftests/damon: add python and drgn-based DAMON sysfs test Date: Sun, 22 Jun 2025 14:03:27 -0700 Message-Id: <20250622210330.40490-4-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250622210330.40490-1-sj@kernel.org> References: <20250622210330.40490-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a python-written DAMON sysfs functionality selftest. It sets DAMON parameters using Python module _damon_sysfs, reads updated kernel internal DAMON status and parameters using a 'drgn' script, namely drgn_dump_damon_status.py, and compare if the resulted DAMON internal status is as expected. The test is very minimum at the moment. Signed-off-by: SeongJae Park --- tools/testing/selftests/damon/Makefile | 1 + tools/testing/selftests/damon/sysfs.py | 42 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100755 tools/testing/selftests/damon/sysfs.py diff --git a/tools/testing/selftests/damon/Makefile b/tools/testing/selftes= ts/damon/Makefile index e888455e3cf8..5b230deb19e8 100644 --- a/tools/testing/selftests/damon/Makefile +++ b/tools/testing/selftests/damon/Makefile @@ -7,6 +7,7 @@ TEST_FILES =3D _damon_sysfs.py =20 # functionality tests TEST_PROGS +=3D sysfs.sh +TEST_PROGS +=3D sysfs.py TEST_PROGS +=3D sysfs_update_schemes_tried_regions_wss_estimation.py TEST_PROGS +=3D damos_quota.py damos_quota_goal.py damos_apply_interval.py TEST_PROGS +=3D damos_tried_regions.py damon_nr_regions.py diff --git a/tools/testing/selftests/damon/sysfs.py b/tools/testing/selftes= ts/damon/sysfs.py new file mode 100755 index 000000000000..4ff99db0d247 --- /dev/null +++ b/tools/testing/selftests/damon/sysfs.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0 + +import json +import os +import subprocess + +import _damon_sysfs + +def dump_damon_status_dict(pid): + file_dir =3D os.path.dirname(os.path.abspath(__file__)) + dump_script =3D os.path.join(file_dir, 'drgn_dump_damon_status.py') + rc =3D subprocess.call(['drgn', dump_script, pid, 'damon_dump_output'], + stderr=3Dsubprocess.DEVNULL) + if rc !=3D 0: + return None, 'drgn fail' + try: + with open('damon_dump_output', 'r') as f: + return json.load(f), None + except Exception as e: + return None, 'json.load fail (%s)' % e + +def main(): + kdamonds =3D _damon_sysfs.Kdamonds( + [_damon_sysfs.Kdamond(contexts=3D[_damon_sysfs.DamonCtx()])]) + err =3D kdamonds.start() + if err is not None: + print('kdamond start failed: %s' % err) + exit(1) + + status, err =3D dump_damon_status_dict(kdamonds.kdamonds[0].pid) + if err is not None: + print(err) + exit(1) + + if len(status['contexts']) !=3D 1: + print('number of contexts: %d' % len(status['contexts'])) + exit(1) + kdamonds.stop() + +if __name__ =3D=3D '__main__': + main() --=20 2.39.5 From nobody Thu Oct 9 00:37:50 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E711221723; Sun, 22 Jun 2025 21:03:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626219; cv=none; b=ixSBLv8E7NawoizeApJuQ2C6q+KvrFqEhmYeAkQ/ufx725JEOG6NmtaQvHATLSp2kFhGadSErSquCpgW+wqeY4JzHLL3T/wzAYVvt6ud5N4mbxPpto7xQwbU75mk7lTICt/cKZqOsI9/WauVBfwOYZOoRLrxPOVQX5dY7OpDupg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626219; c=relaxed/simple; bh=miTM6A3QV73RUDWnpfCOrpusoocXXvQwskQZDbdPk1E=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=YQ4O/LxL+AJ1X8qD28SNeZDQm+OzgtwFnZZlcoeGbTmfoKBdoBkSW06qXPaawM5NG6L6oWh60V+gWbbNWdST9PlrDLgeG3Ok//ZoY99LY6G+9qqoJB1GHwu/zwDTpB2Gh5WTmJXyIZFwZjjZUfXj24M0NGFnOlNmswJkk6oZMBg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GlO6a+zB; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GlO6a+zB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ED3C3C4CEED; Sun, 22 Jun 2025 21:03:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750626219; bh=miTM6A3QV73RUDWnpfCOrpusoocXXvQwskQZDbdPk1E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GlO6a+zBcL8nUOw9+1ngXmZzojMVpnSCtjCLKUMlv9sOd/QF89mW7yGkv72BMnv+g dzU9cbXzql1yjIQrCUZ6q6uVghbkAxovnoaxvSuRrMQnYF2jS5cSzbSaUM+aVCRmNZ Zl+Byvk2A5t5GijhzxawGKsQJl2uwdSz9bTDYu1Z5ze5pVEcjuqhjMcuo69Miv2cPE 80wxT1Dxmixv9WCT1Fc0RORvdhSo97itef6kvUTg6e3DEfGBT73SnCf3/3yvjbPg0j A0eg0dXK7X9XnwPncabF+mAjJ4IsShizBJG5rEl1xf4tIAx3JT6R4RAdpS8D4Y8Svk ZHdYPZQYqjvsw== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , Shuah Khan , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 4/6] selftests/damon/sysfs.py: test monitoring attribute parameters Date: Sun, 22 Jun 2025 14:03:28 -0700 Message-Id: <20250622210330.40490-5-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250622210330.40490-1-sj@kernel.org> References: <20250622210330.40490-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add DAMON sysfs interface functionality tests for DAMON monitoring attribute parameters, including intervals, intervals tuning goals, and min/max number of regions. Signed-off-by: SeongJae Park --- tools/testing/selftests/damon/sysfs.py | 34 ++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/damon/sysfs.py b/tools/testing/selftes= ts/damon/sysfs.py index 4ff99db0d247..a721901a880d 100755 --- a/tools/testing/selftests/damon/sysfs.py +++ b/tools/testing/selftests/damon/sysfs.py @@ -20,6 +20,11 @@ def dump_damon_status_dict(pid): except Exception as e: return None, 'json.load fail (%s)' % e =20 +def fail(expectation, status): + print('unexpected %s' % expectation) + print(json.dumps(status, indent=3D4)) + exit(1) + def main(): kdamonds =3D _damon_sysfs.Kdamonds( [_damon_sysfs.Kdamond(contexts=3D[_damon_sysfs.DamonCtx()])]) @@ -34,8 +39,33 @@ def main(): exit(1) =20 if len(status['contexts']) !=3D 1: - print('number of contexts: %d' % len(status['contexts'])) - exit(1) + fail('number of contexts', status) + + ctx =3D status['contexts'][0] + attrs =3D ctx['attrs'] + if attrs['sample_interval'] !=3D 5000: + fail('sample interval', status) + if attrs['aggr_interval'] !=3D 100000: + fail('aggr interval', status) + if attrs['ops_update_interval'] !=3D 1000000: + fail('ops updte interval', status) + + if attrs['intervals_goal'] !=3D { + 'access_bp': 0, 'aggrs': 0, + 'min_sample_us': 0, 'max_sample_us': 0}: + fail('intervals goal') + + if attrs['min_nr_regions'] !=3D 10: + fail('min_nr_regions') + if attrs['max_nr_regions'] !=3D 1000: + fail('max_nr_regions') + + if ctx['adaptive_targets'] !=3D []: + fail('adaptive_targets') + + if ctx['schemes'] !=3D []: + fail('schemes') + kdamonds.stop() =20 if __name__ =3D=3D '__main__': --=20 2.39.5 From nobody Thu Oct 9 00:37:50 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A37E4221F20; Sun, 22 Jun 2025 21:03:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626220; cv=none; b=Zud546nl/QY6B0S1/phmmW9csikweoG77gyS8ujv1YoHABmLIqpHfIxOr4J5BHrRfG9/4aISquH2OXgC0wpXttrvt42HeDXvGpyZaGblCIOt+RjDG3Vxsihd4LjUtjO74rRJiQCyf6cAqO62etdVDdxUvL3+EKgJ363HOvpBy+w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626220; c=relaxed/simple; bh=wq56Vg1wiYwnpAsrjZ3THKuY4FAoz9PHZqmw/hYGZ0Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=f2unhT/qd04j+6gHodWllhp1Qw7jAF4xzEM4LENULT6YKKu5SXR4JipYTkTmQ/Xz9wTVqgiOp+3i9MzctnabOs14149/LyGQKEtI4YJ2mCw3yAnAN2YizNcFQkR86QxvSnDXxlQojYMK8/L0AvXonz/C8Xa9GaURs7PTDIul4FM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MaIixRy7; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MaIixRy7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 275B3C4CEED; Sun, 22 Jun 2025 21:03:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750626220; bh=wq56Vg1wiYwnpAsrjZ3THKuY4FAoz9PHZqmw/hYGZ0Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MaIixRy7wrfqugtBkE6n57j5d9DqUJ8iULV9x3oyydNNH0OULKzw31RRDLjOR/3AQ Yw/aKpYfDHivMESbc8cbLB32j/ro104vww3LSkeJ9/qz53r72kvxUadksmA9TG1qR3 XiRNgQhTVaQiiH01tpN8QpWC0lqcMRlKZGmFMp+p1dE1BpbfeFtAQJLQyMXg4CAQhP Ex2Q0PmnQDBgVoSNG+89SyGSHw3f4TONTfzpouUsj56bPYyqsuRq+yt4AaNq6yVh1g RklY9JVrTqWNg4HfXkB0igHKg038TEVO1I2mow+BFznePMVwN0SwGAnFtSVvlTWeq5 VHfbbDGVrLDlQ== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , Shuah Khan , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 5/6] selftests/damon/sysfs.py: test adaptive targets parameter Date: Sun, 22 Jun 2025 14:03:29 -0700 Message-Id: <20250622210330.40490-6-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250622210330.40490-1-sj@kernel.org> References: <20250622210330.40490-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add DAMON sysfs interface functionality tests for setup of basic adaptive targets parameters. Signed-off-by: SeongJae Park --- tools/testing/selftests/damon/sysfs.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/damon/sysfs.py b/tools/testing/selftes= ts/damon/sysfs.py index a721901a880d..3b085268f342 100755 --- a/tools/testing/selftests/damon/sysfs.py +++ b/tools/testing/selftests/damon/sysfs.py @@ -27,7 +27,9 @@ def fail(expectation, status): =20 def main(): kdamonds =3D _damon_sysfs.Kdamonds( - [_damon_sysfs.Kdamond(contexts=3D[_damon_sysfs.DamonCtx()])]) + [_damon_sysfs.Kdamond( + contexts=3D[_damon_sysfs.DamonCtx( + targets=3D[_damon_sysfs.DamonTarget(pid=3D-1)])])]) err =3D kdamonds.start() if err is not None: print('kdamond start failed: %s' % err) @@ -60,8 +62,9 @@ def main(): if attrs['max_nr_regions'] !=3D 1000: fail('max_nr_regions') =20 - if ctx['adaptive_targets'] !=3D []: - fail('adaptive_targets') + if ctx['adaptive_targets'] !=3D [ + { 'pid': 0, 'nr_regions': 0, 'regions_list': []}]: + fail('adaptive targets', status) =20 if ctx['schemes'] !=3D []: fail('schemes') --=20 2.39.5 From nobody Thu Oct 9 00:37:50 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D27AD222561; Sun, 22 Jun 2025 21:03:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626222; cv=none; b=nJoQ84DvZ34XacrwrTpQndpcWyJa3OG0RIv7qF05wFioUvlbQL+VeIC+dmTClB+y4YP3KfWXKLx489yhQZ7I0E7Nqj9x/Us1sx3E4pcmtxrTIpOUuti5Zp/uz8dkDgO59c9J0roFGaUJxgGPfoDSZJS55iyC2c6WDzAixR2qvxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750626222; c=relaxed/simple; bh=CR4mzDVLH9lzs9or4TF7dOJ0izoFCJ1YoukXbycwrC8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=hCgA3pMlysSNjlgwg+E4ZDHOtPV3SLpemM8laJZQ9Wn7TRq1yc7xFF/S0szCM7A1RNygd6ADNClMafth+oGozjdrjn6ArCVXP54KXH2o9oDVnNsGUvTiY2YM5rmdO3Z2/ATgsacMdD5t3LrkaszzzVf0r2tCSPWPMuO8chgJKb4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pNud93s6; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pNud93s6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 341A5C4CEED; Sun, 22 Jun 2025 21:03:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750626222; bh=CR4mzDVLH9lzs9or4TF7dOJ0izoFCJ1YoukXbycwrC8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pNud93s6qSRE2V1pdjrSodSG5/YV8dkAhP0AXa7Ckh4nHqDDcZ8kpKYu8dUyXDCbV XGex9qXl94srCsIuUeNPqldNomDb9fjBSPmgfHaF8LZbyvrO0IhkwrNkZ6NdsNjUOL A7yz2ZGNDs4eYkhVdNe3SwIcvYsIt84eYAlj/xBLumTlQ73JIxfBpb0cmd/yT+BGuW 8T2rHrsLo7mBWF18WGDhTXyeiSQRulKOoH+WJ4t1H60eXZ9L5WpTbzVi0gx72Dcajm /buyKh9LyCnfqxvhwxrG0PU0F+BHzETLErcJaiiLOBHHbkcv+FdjRaWGvdzBLh9JH9 YJiWTmtiH8R9A== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , Shuah Khan , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 6/6] selftests/damon/sysfs.py: test DAMOS schemes parameters setup Date: Sun, 22 Jun 2025 14:03:30 -0700 Message-Id: <20250622210330.40490-7-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250622210330.40490-1-sj@kernel.org> References: <20250622210330.40490-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add DAMON sysfs interface functionality tests for basic DAMOS schemes parameters setup. Signed-off-by: SeongJae Park --- tools/testing/selftests/damon/sysfs.py | 46 ++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/damon/sysfs.py b/tools/testing/selftes= ts/damon/sysfs.py index 3b085268f342..e67008fd055d 100755 --- a/tools/testing/selftests/damon/sysfs.py +++ b/tools/testing/selftests/damon/sysfs.py @@ -29,7 +29,9 @@ def main(): kdamonds =3D _damon_sysfs.Kdamonds( [_damon_sysfs.Kdamond( contexts=3D[_damon_sysfs.DamonCtx( - targets=3D[_damon_sysfs.DamonTarget(pid=3D-1)])])]) + targets=3D[_damon_sysfs.DamonTarget(pid=3D-1)], + schemes=3D[_damon_sysfs.Damos()], + )])]) err =3D kdamonds.start() if err is not None: print('kdamond start failed: %s' % err) @@ -66,8 +68,46 @@ def main(): { 'pid': 0, 'nr_regions': 0, 'regions_list': []}]: fail('adaptive targets', status) =20 - if ctx['schemes'] !=3D []: - fail('schemes') + if len(ctx['schemes']) !=3D 1: + fail('number of schemes', status) + + scheme =3D ctx['schemes'][0] + if scheme['pattern'] !=3D { + 'min_sz_region': 0, + 'max_sz_region': 2**64 - 1, + 'min_nr_accesses': 0, + 'max_nr_accesses': 2**32 - 1, + 'min_age_region': 0, + 'max_age_region': 2**32 - 1, + }: + fail('damos pattern', status) + if scheme['action'] !=3D 9: # stat + fail('damos action', status) + if scheme['apply_interval_us'] !=3D 0: + fail('damos apply interval', status) + if scheme['target_nid'] !=3D -1: + fail('damos target nid', status) + + if scheme['quota'] !=3D { + 'reset_interval': 0, + 'ms': 0, + 'sz': 0, + 'goals': [], + 'esz': 0, + 'weight_sz': 0, + 'weight_nr_accesses': 0, + 'weight_age': 0, + }: + fail('damos quota', status) + + if scheme['wmarks'] !=3D { + 'metric': 0, + 'interval': 0, + 'high': 0, + 'mid': 0, + 'low': 0, + }: + fail('damos wmarks', status) =20 kdamonds.stop() =20 --=20 2.39.5