From nobody Wed Dec 17 07:24:42 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0415DC4167B for ; Tue, 12 Dec 2023 19:12:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377072AbjLLTML (ORCPT ); Tue, 12 Dec 2023 14:12:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41620 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235132AbjLLTMH (ORCPT ); Tue, 12 Dec 2023 14:12:07 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 899ABAF for ; Tue, 12 Dec 2023 11:12:13 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A235CC433C7; Tue, 12 Dec 2023 19:12:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1702408333; bh=GHi4Mu0bQn8zyIS9XnsaUAW8ixexoLEYfp8Ut/tF7Co=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=igSIjbckp2hVl7FoDQk0XpOqN8qpCWR+x4WM0LuOXFbwy7VEp+1mpdVGEp8BgivFk YWuKoyLk6+L92fw8DO6z/SjD/Age3Nw8aFN3sUTuRzQgQjSwqpMMH4MFQTfv9gsTfK 0yQ9XH+/wMbWvMMsVUweD+5+gttAd05TAPRCtqgaWwxz119gLLW0XT1drB4JssYga9 hUo9zJVevAPH1Y6xLxnsPPmQ6jbZ4y880MruyyjZJ+eCpF19hzXMTF25lBB45kswHv hg9DjEcyWnOzOwBRp0kdHamLzLcQIb5sDCdxJcPFu+s41K1wSzza5v7T1AmYPl9he3 9OpPFk5S2jV4A== From: SeongJae Park To: Andrew Morton Cc: SeongJae Park , Shuah Khan , damon@lists.linux.dev, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/5] selftests/damon: implement a python module for test-purpose DAMON sysfs controls Date: Tue, 12 Dec 2023 19:12:02 +0000 Message-Id: <20231212191206.52917-2-sj@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231212191206.52917-1-sj@kernel.org> References: <20231212191206.52917-1-sj@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Implement a python module for DAMON sysfs controls. The module is aimed to be useful for writing DAMON functionality tests in future. Nonetheless, this module is only representing a subset of DAMON sysfs files. Following commits will implement more DAMON sysfs controls. Signed-off-by: SeongJae Park --- tools/testing/selftests/damon/_damon_sysfs.py | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 tools/testing/selftests/damon/_damon_sysfs.py diff --git a/tools/testing/selftests/damon/_damon_sysfs.py b/tools/testing/= selftests/damon/_damon_sysfs.py new file mode 100644 index 000000000000..78101846ab66 --- /dev/null +++ b/tools/testing/selftests/damon/_damon_sysfs.py @@ -0,0 +1,102 @@ +# SPDX-License-Identifier: GPL-2.0 + +class DamosAccessPattern: + size =3D None + nr_accesses =3D None + age =3D None + scheme =3D None + + def __init__(self, size=3DNone, nr_accesses=3DNone, age=3DNone): + self.size =3D size + self.nr_accesses =3D nr_accesses + self.age =3D age + + if self.size =3D=3D None: + self.size =3D [0, 2**64 - 1] + if self.nr_accesses =3D=3D None: + self.nr_accesses =3D [0, 2**64 - 1] + if self.age =3D=3D None: + self.age =3D [0, 2**64 - 1] + +class Damos: + action =3D None + access_pattern =3D None + # todo: Support quotas, watermarks, stats, tried_regions + idx =3D None + context =3D None + + def __init__(self, action=3D'stat', access_pattern=3DDamosAccessPatter= n()): + self.action =3D action + self.access_pattern =3D access_pattern + self.access_pattern.scheme =3D self + +class DamonTarget: + pid =3D None + # todo: Support target regions if test is made + idx =3D None + context =3D None + + def __init__(self, pid): + self.pid =3D pid + +class DamonAttrs: + sample_us =3D None + aggr_us =3D None + update_us =3D None + min_nr_regions =3D None + max_nr_regions =3D None + context =3D None + + def __init__(self, sample_us=3D5000, aggr_us=3D100000, update_us=3D100= 0000, + min_nr_regions=3D10, max_nr_regions=3D1000): + self.sample_us =3D sample_us + self.aggr_us =3D aggr_us + self.update_us =3D update_us + self.min_nr_regions =3D min_nr_regions + self.max_nr_regions =3D max_nr_regions + +class DamonCtx: + ops =3D None + monitoring_attrs =3D None + targets =3D None + schemes =3D None + kdamond =3D None + idx =3D None + + def __init__(self, ops=3D'paddr', monitoring_attrs=3DDamonAttrs(), tar= gets=3D[], + schemes=3D[]): + self.ops =3D ops + self.monitoring_attrs =3D monitoring_attrs + self.monitoring_attrs.context =3D self + + self.targets =3D targets + for idx, target in enumerate(self.targets): + target.idx =3D idx + target.context =3D self + + self.schemes =3D schemes + for idx, scheme in enumerate(self.schemes): + scheme.idx =3D idx + scheme.context =3D self + +class Kdamond: + state =3D None + pid =3D None + contexts =3D None + idx =3D None # index of this kdamond between siblings + kdamonds =3D None # parent + + def __init__(self, contexts=3D[]): + self.contexts =3D contexts + for idx, context in enumerate(self.contexts): + context.idx =3D idx + context.kdamond =3D self + +class Kdamonds: + kdamonds =3D [] + + def __init__(self, kdamonds=3D[]): + self.kdamonds =3D kdamonds + for idx, kdamond in enumerate(self.kdamonds): + kdamond.idx =3D idx + kdamond.kdamonds =3D self --=20 2.34.1