From patchwork Thu May 2 17:27:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13651934 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 01082C4345F for ; Thu, 2 May 2024 17:27:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2B4DB6B0083; Thu, 2 May 2024 13:27:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 264636B0085; Thu, 2 May 2024 13:27:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 154956B0088; Thu, 2 May 2024 13:27:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id EC78E6B0083 for ; Thu, 2 May 2024 13:27:31 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 7BC5E1C0976 for ; Thu, 2 May 2024 17:27:31 +0000 (UTC) X-FDA: 82074137502.19.D57529E Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf14.hostedemail.com (Postfix) with ESMTP id B8B18100012 for ; Thu, 2 May 2024 17:27:29 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=emslM5hH; spf=pass (imf14.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1714670849; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=w5N+1O1RnpvgtwkjnCfluiLG1wbCmelyiHr/+borMNI=; b=Rkc43CxMf+PvST5DIMpBBltD0qPsK9LvdJ0lj5yq+MZrm89688ltqzs9p+N5La2YTBDkVi Ncf2dZr424n8c5KcGtWL1OZRXFjrdO3Oo+dQD6nWvpiDF2IKwHe7hOQnK8XvADvu8tafFr mfFyCmTWCG5ONQJ5mx2mSPtF0Q3aKJQ= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=emslM5hH; spf=pass (imf14.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714670849; a=rsa-sha256; cv=none; b=5l/6HA3sKpJRKanxI1dDiLdyOC6NjKg+MLeNtN4eh6VSBMRftvlwPgqYVn6WoWXwW/nMv7 rOWVjox6noJXOcYpRSJYPERzRCVeVvhcvX9abKaL+8mhX2k5CWhEsEAcquhmKoLgIzVtUD Etl+L+lfnGl/JTH7Bf7NAoMZe5jUqlk= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id A94EF61C00; Thu, 2 May 2024 17:27:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D968FC116B1; Thu, 2 May 2024 17:27:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714670848; bh=I63TfrbmSoQUarN68hoe/QgcSHNL3XEpjAZInckdvxY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=emslM5hHuculQgVIbvMTNrFTk3RZwSIu8woc1S4l3D/94fuVqnsBkJskI7EjqgWLe nkqk5Lvp5XtUQz4fCj4sY9TesHcQHaXUHNk3/iWeSPhXYfcqNoDvPppp5m1ZbSP4tK RfH5dADAd16/4hgmBvnFlmhsKW+oMVvcNvCbmonxzF3/0LtkHyciHHQ97ZLDLQRP+z CQa0Q9FFYoV87VTLt0yZQSne+eizUoT7nMHcXbUeIIMeOByFQqQVjJTrkAX+sAIY+0 uyBWbxpGRlZhRSZ7OnqdZfF0QbMbLgV50lkih2A2xhxJekKKUl95GTcHPiM1GCgrmx SM/KNBRqSUw9w== 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/2] selftests/damon/_damon_sysfs: support quota goals Date: Thu, 2 May 2024 10:27:17 -0700 Message-Id: <20240502172718.74166-2-sj@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240502172718.74166-1-sj@kernel.org> References: <20240502172718.74166-1-sj@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: B8B18100012 X-Rspamd-Server: rspam06 X-Stat-Signature: dhche1w4dp93r5gb5mw8hx3f41gxskf9 X-HE-Tag: 1714670849-706091 X-HE-Meta: U2FsdGVkX18VCeBlDI2aCiR6xyUY3wGoQVkLs+t8jeu2JxqCsxPSfWHsyds7XPeHcI7w/Pn8lxgxYN3LBK6uun1MJHI5yq8UYihmQ8AxLWFWGLYOtW9uoARXRajhx8h7rJS4cJVFqC3TDndwvzTg923tqHWSbLjlo3/oJgmwLfn5Ue2T+k5aUtaiCJD/lReQMuXQXOsUVoBO3uM3FGVT/QGg/qr0RM80BM3g4tUdzluYkDV5/mWPBULZ96oZ8hDgQUkCe+N9FfG3bwYZCySXA+1lXJpoxS63kBuB6Dgy/0suKqjkJg2WCjIaOp37jvOEzKyoSvw1JZk8H45hfTkQwb1j2Dm04APFSRDkEgyu9+yycUu3UimJtRPbwayoCfjgtPn323KQm9G21ZwBUsQPlb2ruJq0rcXJ3yIy7noU6cm9YgY3CdS29NB2vu8BFEQ1w0NaqqMtbKCxvuMYpP2V9jDKZpYCYlfnKbMQkZti2KCvHxl3XiNc5RntPJgvWgVP7j5bES1PaW0PydQ7ZZAbppt/JDOR4ohE3OsJkLaGcpbWs1IOsuad9ScTRw2Ryh+gZy4EpZzK+uJM/5LqRkjcR57+X0CUtVVMaP2ja6J2RIHlFuaCqRh9W8nd0VhLna2cNxLMB9S+4iv7t8q3Ef4lyeQuW1umSSIhzSGm515oIpAlGgZsEPBLG7Gj7y2+bRm0HwRlLtER2bsuZ6EIbyn1tsxmB2XvC9E0oEg2i78qsT+Ttq8cJLZ9IPelJZ7x2Jt9VSLW0E/ZdKs2NVEC8MwDcYSV3gKvxZgygWoopKYJvkUYfquXtDPWvmTMg6GiW3PyTb+heuwwkFp58Ad2YXJiylJxmVzzCx7vGloCi+qWTKnPIAjtbSzz2EgBcEv/ZmKLiXhE45QguIwD6FVtpH82qQq5W+e7/emsqzZcXbfk5vKUQ8PUrxaR+xIY53QpfvHh6CUbMQni9JRgUFtirq6 tfLZVrTE nX6wqB2EH/ehtm36H6doLEkZ5uA7PTs1S+ZnnIuo5c5kLN9WF0L+7KZV11NXul50buLDy3UV5e4oHWPbJ3/GEbdclnwVbuVeYxsHc9fScc5WUnlmMqApvPedbkyXpwGSO24G/qI0WNbuTKdNdC5LYdGMbbudK4dVUVWw/NVMnJulJaBm2XjPG598YKhceILI46kAlBeRmYnG5zockiH/64hId48Vrk0+Xsh5x+p41sLcRUxFVYiVZTDaabexGfa8wSdD2ts//VFIbQg2+WAUsoI6ocMtBvtJ5aWLS X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: The DAMON sysfs test purpose wrapper, _damon_sysfs.py, is not supporting quota goals. Implement the support for testing the feature. The test will be implemented and added by the following commit. Signed-off-by: SeongJae Park --- tools/testing/selftests/damon/_damon_sysfs.py | 84 ++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/damon/_damon_sysfs.py b/tools/testing/selftests/damon/_damon_sysfs.py index d23d7398a27a..f80fdcef507c 100644 --- a/tools/testing/selftests/damon/_damon_sysfs.py +++ b/tools/testing/selftests/damon/_damon_sysfs.py @@ -70,16 +70,56 @@ class DamosAccessPattern: if err != None: return err +qgoal_metric_user_input = 'user_input' +qgoal_metric_some_mem_psi_us = 'some_mem_psi_us' +qgoal_metrics = [qgoal_metric_user_input, qgoal_metric_some_mem_psi_us] + +class DamosQuotaGoal: + metric = None + target_value = None + current_value = None + effective_bytes = None + quota = None # owner quota + idx = None + + def __init__(self, metric, target_value=10000, current_value=0): + self.metric = metric + self.target_value = target_value + self.current_value = current_value + + def sysfs_dir(self): + return os.path.join(self.quota.sysfs_dir(), 'goals', '%d' % self.idx) + + def stage(self): + err = write_file(os.path.join(self.sysfs_dir(), 'target_metric'), + self.metric) + if err is not None: + return err + err = write_file(os.path.join(self.sysfs_dir(), 'target_value'), + self.target_value) + if err is not None: + return err + err = write_file(os.path.join(self.sysfs_dir(), 'current_value'), + self.current_value) + if err is not None: + return err + return None + class DamosQuota: sz = None # size quota, in bytes ms = None # time quota + goals = None # quota goals reset_interval_ms = None # quota reset interval scheme = None # owner scheme - def __init__(self, sz=0, ms=0, reset_interval_ms=0): + def __init__(self, sz=0, ms=0, goals=None, reset_interval_ms=0): self.sz = sz self.ms = ms self.reset_interval_ms = reset_interval_ms + self.goals = goals if goals is not None else [] + for idx, goal in enumerate(self.goals): + goal.idx = idx + goal.quota = self def sysfs_dir(self): return os.path.join(self.scheme.sysfs_dir(), 'quotas') @@ -96,6 +136,20 @@ class DamosQuota: if err != None: return err + nr_goals_file = os.path.join(self.sysfs_dir(), 'goals', 'nr_goals') + content, err = read_file(nr_goals_file) + if err is not None: + return err + if int(content) != len(self.goals): + err = write_file(nr_goals_file, len(self.goals)) + if err is not None: + return err + for goal in self.goals: + err = goal.stage() + if err is not None: + return err + return None + class DamosStats: nr_tried = None sz_tried = None @@ -361,6 +415,34 @@ class Kdamond: stat_values.append(int(content)) scheme.stats = DamosStats(*stat_values) + def update_schemes_effective_quotas(self): + err = write_file(os.path.join(self.sysfs_dir(), 'state'), + 'update_schemes_effective_quotas') + if err is not None: + return err + for context in self.contexts: + for scheme in context.schemes: + for goal in scheme.quota.goals: + content, err = read_file( + os.path.join(scheme.quota.sysfs_dir(), + 'effective_bytes')) + if err is not None: + return err + goal.effective_bytes = int(content) + return None + + def commit_schemes_quota_goals(self): + for context in self.contexts: + for scheme in context.schemes: + for goal in scheme.quota.goals: + err = goal.stage() + if err is not None: + print('commit_schemes_quota_goals failed stagign: %s'% + err) + exit(1) + return write_file(os.path.join(self.sysfs_dir(), 'state'), + 'commit_schemes_quota_goals') + class Kdamonds: kdamonds = []