From patchwork Thu Mar 20 05:39:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 14023449 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 59CD1C36002 for ; Thu, 20 Mar 2025 05:39:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ED8B6280001; Thu, 20 Mar 2025 01:39:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E86D5280004; Thu, 20 Mar 2025 01:39:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D4F1D280001; Thu, 20 Mar 2025 01:39:46 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id BBA4E280004 for ; Thu, 20 Mar 2025 01:39:46 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id AB6CD140CF4 for ; Thu, 20 Mar 2025 05:39:47 +0000 (UTC) X-FDA: 83240827614.10.F5B2D25 Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by imf04.hostedemail.com (Postfix) with ESMTP id 2A8C540009 for ; Thu, 20 Mar 2025 05:39:46 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Fyc9tomQ; spf=pass (imf04.hostedemail.com: domain of sj@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742449186; 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=y1P+LUFKpRms8lmVRSipo+cZaSNxGesVZHZEtlO7Aq4=; b=PPGN+XqG5G0HTOVC1ipY4AvY29xSVCGq+PMPG1WGrfQRY1m7V2MQOE/dcZLW7hYj3OmmEK 16GORHFTh1JL6s/bWZIWXcKF15+tYnYePfOYoWIHlO6h2W7VKKWbl6wzpAauELCqFQXzam y3q+rsG5fjzXPZWTtoreoMAo3Jf1KiY= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Fyc9tomQ; spf=pass (imf04.hostedemail.com: domain of sj@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742449186; a=rsa-sha256; cv=none; b=DfWCX9cjf9qPyfp8oh21/1DbVYXOvg9gFomiEqoO42PGLgmzTKkWgvb1/28pfLuy4DSo0P xSkyDo5LkCSTMsIpr+5Jee9pQ4fhihxcojZw2uWqOGyHQu359gvJZUh7IW3l0KVhaI3UmT ZaC7sACRvZNZYJG/2UTWcTipGEfbfjY= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 0B69061134; Thu, 20 Mar 2025 05:39:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1A920C4CEE3; Thu, 20 Mar 2025 05:39:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742449185; bh=OWte6lejDS7n5xIpsWqNW8pBu+MRjbH+R4O10AsrXCs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Fyc9tomQ64s56+TofXY8CXmj7hPdLTha2V/olx6+ZQbTBJJanyE+TAb6+p2b94+RZ 1P64OLMK8aXnOoWxEkCbHrxkFhqEN9O2lRgKkUcrJaOLVZvsDmKf9+cMwcZAJU42t0 Vi164iO6fwcKtPiEpGv8rv+FisbgxZWnLQtk24QCtlmZYCsCiut9gIX2COawqTk/i8 ZKjsMGo4YuEOm7HbXO4mR8zpF5ZDX0YNZKq/JPeGuRQ4NRVBn+lxSAn9EYq0p3YGPJ bhCakZMystvl3krGPdFcIpMpgerUxj73uB4KopW95FsZdEn6ZrxOOrInavSdZX4WAL 0X8/1PZZdnasg== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 1/4] mm/damon/core: introduce two damos quota goal metrics for NUMA memory utilization and free space ratios Date: Wed, 19 Mar 2025 22:39:34 -0700 Message-Id: <20250320053937.57734-2-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250320053937.57734-1-sj@kernel.org> References: <20250320053937.57734-1-sj@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 2A8C540009 X-Stat-Signature: m461sd9gpn1unesuqszb3eu7qf7nk4xz X-HE-Tag: 1742449186-319099 X-HE-Meta: U2FsdGVkX1+jUsPtwg+Q3QY5sKUNTMT8zBoIibBeA7iufp3WIQCjeEIQ1zOJAZOvVTE79FNzSWpbGoTLRrmf5qHBuRe+rXHqRKOw/F0tmhagGCMXtKa4mBVnLle75keX9nnijydemBLLOYFrkSIgyVyvJhyCe2fKv6RW4igqq9A0n8AhoSzhtJBoF9iS5LmoZejW6LmTbIb3vM0vUCsb5X6lYEbaBG7BkjupWEuM2U+regTPOnnfj1gak36MidDwoEqrv2oBnhniepISOzQY09b/wP30/7e1UzSV9BmROT/X3S5IGHgwTO6dPFiPogWGhInTnsu9MAMACsXCknEDuqXBjvd4Ax+7biOXyXci5clOrGB6xctHR0kD+4rPDTPNDJdY702v2qd4gCFwEcrSBdgRMQbnOk5MqNiNRnjF2dFbiNkhKmQbQOFcdiWhVmjix1xIFC64S33gEld0pu/4exOWJmSnq6S4J6dyCtF+1izu7KMyaCaTZtEs9LXFue3Uj0ymYwgviTZjUDOgBYNq9m48fjXu5M6D5QtcG0wo68eQCkbfxE8qX+4wtP8QnhffgnC/XIwgSxXilCXEJTEtYg92gbNhWymt5cH1AFcJ+BEJt351eFdrbkXglUEN9mwhYzWiX08zzKjDN+dtG9FCI7uVwfuiG4ioUD/VX6AeaQ2iBosM4U2FjyTLjyBlq6obp7DKWZFY21bd8gZIrcd/0JNqW1ajH9lqnQRzYN6TvjrnY5d9Jmn4jLg8KZFmf6TWUC47e90Am/KdVS3JxASlKaLuZHJoTr+OYqWAlRudYx9bjEFbl4fqOnwDDDuJUqsWnFUORhPQjdN3dA4ZVkx4mxThHMAffkFXgjbQT2f23ROOuiVr/cE7tzNwhQ2ocBXxSYi2o5i/s6i1Ec1RyEo6H8UtV0DhwBNyiU3E3txKv7ckUfvwT9QDgCuiH2dDInyQfT1AoArQnzyMjwWTUF5 kar5BYvS hdZzk/5TV8U8LKF5UpBg/3BGOHaHRh/ofAwRtNM/5vvh2eD7osdhewInYFLqHZVHWcR7Ki4HFJX/sJtaCnRQmySWXw+dRHkyanEyfi7cUSqddnKQj9gkjweieElH6CQX8yHCnvc17fJR+L1niH2ZxerY8MmjM/7IFgYQGhuQUp0FEVrTdomZC8bN6YCqkcZreWLbHLkHonHuJuA042rKMFftaVL22l0lX2fK+EWrKYllT4A8= 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: Utilization and free space ratios for specific NUMA nodes can be useful inputs for NUMA-specific DAMOS schemes' aggressiveness self-tuning feedback loop. Implement DAMOS quota goal metrics for such self-tuned schemes. Signed-off-by: SeongJae Park --- include/linux/damon.h | 6 ++++++ mm/damon/core.c | 27 +++++++++++++++++++++++++++ mm/damon/sysfs-schemes.c | 2 ++ 3 files changed, 35 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 9f0eec85e636..ba3604cd4d60 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -154,6 +154,8 @@ enum damos_action { * * @DAMOS_QUOTA_USER_INPUT: User-input value. * @DAMOS_QUOTA_SOME_MEM_PSI_US: System level some memory PSI in us. + * @DAMOS_QUOTA_NODE_MEM_USED_BP: MemUsed ratio of a node. + * @DAMOS_QUOTA_NODE_MEM_FREE_BP: MemFree ratio of a node. * @NR_DAMOS_QUOTA_GOAL_METRICS: Number of DAMOS quota goal metrics. * * Metrics equal to larger than @NR_DAMOS_QUOTA_GOAL_METRICS are unsupported. @@ -161,6 +163,8 @@ enum damos_action { enum damos_quota_goal_metric { DAMOS_QUOTA_USER_INPUT, DAMOS_QUOTA_SOME_MEM_PSI_US, + DAMOS_QUOTA_NODE_MEM_USED_BP, + DAMOS_QUOTA_NODE_MEM_FREE_BP, NR_DAMOS_QUOTA_GOAL_METRICS, }; @@ -170,6 +174,7 @@ enum damos_quota_goal_metric { * @target_value: Target value of @metric to achieve with the tuning. * @current_value: Current value of @metric. * @last_psi_total: Last measured total PSI + * @nid: Node id. * @list: List head for siblings. * * Data structure for getting the current score of the quota tuning goal. The @@ -188,6 +193,7 @@ struct damos_quota_goal { /* metric-dependent fields */ union { u64 last_psi_total; + int nid; }; struct list_head list; }; diff --git a/mm/damon/core.c b/mm/damon/core.c index fc1eba3da419..c4ce8e2c22c1 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1890,6 +1890,29 @@ static inline u64 damos_get_some_mem_psi_total(void) #endif /* CONFIG_PSI */ +#ifdef CONFIG_NUMA +static __kernel_ulong_t damos_get_node_mem_bp( + struct damos_quota_goal *goal) +{ + struct sysinfo i; + __kernel_ulong_t numerator; + + si_meminfo_node(&i, goal->nid); + if (goal->metric == DAMOS_QUOTA_NODE_MEM_USED_BP) + numerator = i.totalram - i.freeram; + else /* DAMOS_QUOTA_NODE_MEM_FREE_BP */ + numerator = i.freeram; + return numerator * 10000 / i.totalram; +} +#else +static __kernel_ulong_t damos_get_node_mem_bp( + struct damos_quota_goal *goal) +{ + return 0; +} +#endif + + static void damos_set_quota_goal_current_value(struct damos_quota_goal *goal) { u64 now_psi_total; @@ -1903,6 +1926,10 @@ static void damos_set_quota_goal_current_value(struct damos_quota_goal *goal) goal->current_value = now_psi_total - goal->last_psi_total; goal->last_psi_total = now_psi_total; break; + case DAMOS_QUOTA_NODE_MEM_USED_BP: + case DAMOS_QUOTA_NODE_MEM_FREE_BP: + goal->current_value = damos_get_node_mem_bp(goal); + break; default: break; } diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 9cff4ec6973f..0f338ba1db43 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -942,6 +942,8 @@ struct damos_sysfs_quota_goal { static const char * const damos_sysfs_quota_goal_metric_strs[] = { "user_input", "some_mem_psi_us", + "node_mem_used_bp", + "node_mem_free_bp", }; static struct damos_sysfs_quota_goal *damos_sysfs_quota_goal_alloc(void)