From mboxrd@z Thu Jan 1 00:00:00 1970 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 EF86EC369D2 for ; Sun, 20 Apr 2025 19:40:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5D5596B000E; Sun, 20 Apr 2025 15:40:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 584406B0010; Sun, 20 Apr 2025 15:40:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 44BFD6B0011; Sun, 20 Apr 2025 15:40:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 26D336B000E for ; Sun, 20 Apr 2025 15:40:40 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 4E383C07A9 for ; Sun, 20 Apr 2025 19:40:40 +0000 (UTC) X-FDA: 83355439440.01.D8C53F8 Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by imf07.hostedemail.com (Postfix) with ESMTP id D507B40003 for ; Sun, 20 Apr 2025 19:40:38 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Ie2sg2Qu; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf07.hostedemail.com: domain of sj@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745178038; a=rsa-sha256; cv=none; b=E+V8nnB6lSJ497L4grpH7baZ0HSC3Ty3tVJ3e7yCCxSaPqnX7PqCM2CtTYilHjO1vnf2NF nfuO2pnIgsrUo4ckXPxmerTvFrpgDqAl2YOCqGfA7hOUZgxT1ww4TKpcgqNr1fAtGFxaUJ FRgli428kVlrhrgu/yZHltMlmAnOvX0= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Ie2sg2Qu; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf07.hostedemail.com: domain of sj@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745178038; 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=To/skHc80grf9UQwzoocDsSO04Cfqgr9JexeH/m5jQ8=; b=eKvC19lF6RALLDLc6IkrNJlUhGAlfWWYY5RKHcWvluvXb0GChPolYnNpkv+keRTwcFLQH3 9s18MOMKRhh6ZUQWp4uJVRkoPqMH/mtY1AJNR851AjY2bsrOHyxdwzDEyXh0ZUEjiHzgZH BxFH9r+2ZmExANK806o/6xKpGWL3R0E= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 4F8D96115B; Sun, 20 Apr 2025 19:40:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C559C4CEE2; Sun, 20 Apr 2025 19:40:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745178037; bh=TOtCGrkDZVAaA1HvRz3yyFtveCVko96aYWnah99Y0Hk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ie2sg2Qu7jppqBnu2UeOfQIH9KynSFtWEMiz3BdekMK/ampgBmK5k/e8jyQZJbPBp BZYAumO5SAPYm9b4MT9jUG4cO30+GAJALnRYVRE6ihy8VK/tAdRvcwqcxS3dZi+b+n /f6SfVVSPATV3YKyTtAbCU75FSSZXYK6f6UZLtD8cov2OL42qef344nDm0Tzl/1Jav dfGsT2Cu0qMIhFB409ft1P/IZsn9Z3MnBqVvi2+fHOOiiAZinhjLVZ0vhLU2GfisJT cyy+PAublkveW3rr1LV7BZsxF2C1O+kNc4u2dXyly9qGDail84tbtMrvR+2CrKKrL/ mr4aWpm9Q27CA== From: SeongJae Park To: Andrew Morton Cc: SeongJae Park , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 1/7] mm/damon/core: introduce damos quota goal metrics for memory node utilization Date: Sun, 20 Apr 2025 12:40:24 -0700 Message-Id: <20250420194030.75838-2-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250420194030.75838-1-sj@kernel.org> References: <20250420194030.75838-1-sj@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: D507B40003 X-Stat-Signature: 6jum5dgtfhjfsxgo3kcxfgy9pt5g643b X-HE-Tag: 1745178038-344242 X-HE-Meta: U2FsdGVkX1/ikycgq3WFJ9D1o+1gxEjqFxj4aOwr2Hy0HCBvUbLJ+iOmmfLHnk7y5gGar/+ZD1RVF2bR1gHYmB+gSVSlxkEFnhwCgb14msSuwAZdv2l59ZyaJdUJj5GmlOwDarjFUFZ3Ljv3TcjV2hoI78nseRkjEWyvcnUqdelibYkXNJR+U7CcN9i9pDYPa5fpLJGrvPVZPMaiMvbvEIW3sbNwQ9YA8Evp6H7JWWTE6ZyIFM4rzgZg3KfafCncl8gT+lHbJI+ovzWOrl7AVncbDNhDX26R0JUI4UvhMTrY/UOQCA+yjhOgZGnf4Dd69a9elz8J/4s01cEXz2pDO99mxoUnbbgGyBxpBXZ5lAjyCw9qwj1Utj5vNIB4py1g5izXII5E+FmSh3viX4bMCF0qxAj0Ng6w1CSDJzAmO4KCYRIqyARE6wXjIqBZi0p6lwfbxNvOK6wrn0QrRAJhVp4t0nJRwTY/uBGasR56JO02/q1HM4JoAgP1MPOxlbyykE42L1C/U5ah0amE0oe43RewEVxez0+lSjq4lAjJ9dYpKidzucjSVfMoiyuFfPRUac8NQKAA/GZGbgoNKga8iGmXfdCU1M2PYFRpjogLkeLGSwkS+nPdu+KqrakmEzL1pYKpByJZrDa2w9W6+53GXEW29o6B0mY8+LEkSmkXrEbVxTYc6YSdU6TLdFbA2C2UytqwpIyEwFD3MzvBh2yPzbD1HJ/EdwR1zDlu84+ODinm8lv6J92orc4dwEKce1yHQG3Q2hbCIgr2rzS/mRv7N7pCAS+NxySf2sjHhvtwcDlB7Vv4p1oPKrHKp2YVfPnkPkep+TeEoNYuQSo8aFeQNCOCGnEcaAuurLzVbdIEIJQ+YReGbupw/haRnEbypjKdaLOTzkB9+a+R6XSx+WE9VoEWhL45iYgYydt6QOgItf9yJuM7Y5Z2Zw== 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: Used 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 47e36e6ea203..a4011726cb3b 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -145,6 +145,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. @@ -152,6 +154,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, }; @@ -161,6 +165,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 @@ -179,6 +184,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 f0c1676f0599..587fb9a4fef8 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1889,6 +1889,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; @@ -1902,6 +1925,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 23b562df0839..98108f082178 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) -- 2.39.5