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 6A711C7EE39 for ; Sat, 28 Jun 2025 16:51:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EDBEB6B009A; Sat, 28 Jun 2025 12:51:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E8CA36B009B; Sat, 28 Jun 2025 12:51:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D7B976B009C; Sat, 28 Jun 2025 12:51:51 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id C32BD6B009A for ; Sat, 28 Jun 2025 12:51:51 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 86D881404F3 for ; Sat, 28 Jun 2025 16:51:51 +0000 (UTC) X-FDA: 83605401222.11.A6C9588 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf20.hostedemail.com (Postfix) with ESMTP id D487D1C0008 for ; Sat, 28 Jun 2025 16:51:49 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=bHjz8Uih; spf=pass (imf20.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 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=1751129510; 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=0Wt9CtNCllcSIzSeLO2PxllE6IAKikrbsq6sP8kBots=; b=Z8JSA9BWypZMY+dE+8UcHycRVBWJgBqJPx8GqOABw3OfBFWMFuL6Sj9qVZgw2IwAyKTfZ3 kUHzMyklBW3vO7AIHvZrRMLdDtoS3isliq7s/gbKTSMeVTvdr1ONIML/HhGQHOnR2NyNFC ESzhqlOyxV5Veedz4HYgRepceTPNxSA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751129510; a=rsa-sha256; cv=none; b=UYr8KYeIM9kcNJrW1NTNsxwy332lCqiBr2ZFtmLLYrpLk/DlGDuHMDXQVuCkMJEw2ExU4X eBrLfijGC/zrv9yksMmI1BVN5iYJocxhHGuHUVdxsCFptfmb7JMP4isI7bgLpMEnviDQYr 3BAD41jrDOB4PFYyYL5JLbB7PsK21lw= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=bHjz8Uih; spf=pass (imf20.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 52DDAA52CAC; Sat, 28 Jun 2025 16:51:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D48B3C4CEEF; Sat, 28 Jun 2025 16:51:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751129509; bh=Loco/3F4VYCbvXX7GgEUHxvF0e1mZosYux21IhMdVz0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bHjz8Uih4qDgGK6aYn4YHtpyrrbbBdXqJyFN8sMQjmuayAtj6VAYGa9pE3DJUKhcA o5zosE9OXkUeRPMcFvXm2LeoZR6x8G4DmzIR+HEL0NlEUNyL2dryZHJ4q/H/edrw6B pk9n1sSHV7g5lEiPa0kP1pvHvr7nEyxBevUnnxYkTzTzvpOO+/XEU3vYCKZRt9pQ8A Olm+K0MhGrjFL4AnhyC8Y4kgJx+O5uaV0G/Fy5S01uMYyYZPTROE4qj3jaGqpXfdrC IzWHt8tcoNnNnnbG2rafMXdhVE+oNd09Eu+quEC6l7RFUlFNcdBzd4TJ3iQfxqfkQz AvmnA62YHrOdw== 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 01/11] mm/damon/core: introduce [in]active memory ratio damos quota goal metric Date: Sat, 28 Jun 2025 09:51:34 -0700 Message-Id: <20250628165144.55528-2-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250628165144.55528-1-sj@kernel.org> References: <20250628165144.55528-1-sj@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: D487D1C0008 X-Stat-Signature: rpgrej85nrbpmn5knfo5pfr3ucom7kt1 X-Rspam-User: X-HE-Tag: 1751129509-214355 X-HE-Meta: U2FsdGVkX19c4y0lCsTSJYa/cq/5CEwZfBWn+s5L3l3LARzSpV1Nmpi+YKb9T/f7vVlJhTIyAu9zUnZuOpWDlRgQ16DRdEGm2YcrTbFbv064H5En7BjuGvl9jvoGjlvIGbxHFDBhxtCODsskzUOTzh06CvfvMi6Of49XIezmS6wQMI0sJtp3I42gp6Kcq/5I+PguaYDHTzrWseZifkwPI22KNXJxwkxEfm2x4rDBewataBbqa2wtS0Tp5/jkYxpKNxk/t41OBPeKWA24D8W1RkUxC4qyiXoLk0UtENNKDwpWVPNBmHFmASf5Fu7cdodVCP1fYx12X065+T2WljPSFCwQSd32x6X61Tvnqy//p1Qo05WUOUW/Bc/JkA41TmDsIF3d+PTUSiKEpZ1rpw6K/eu7GlraYhynrnuD9kN5OMbqsfGHLVoM+agzDOhRMEs3ZAdm84cABaJfnO0fkIP0Cnba387zCJBVEvODlwWGOC+RkwM7YPIXwJBV5YupFxgWhv/yFTUUxB+Thm0OL0vi3YJ1ElRuSv+522qnhlvjgYUIpGSADYspajeFksG10gZuM7GemwHG1MI4xqdslmdZx/D6ghYBBQFusj4IjY8N72vM9PF9tuQiYWrSgyKhThw1GYA4PsqaVl99uP4UUAsOlkiBAnsevRrCDTkf0ID9Bn5UocZNbNPRqfu/7ReZxANtf5m9IjHvLyMF9Y3jjOYX+3wtNILS3nvG32sBKeufqhOOL5TD0b0YrfLSGTQIORUSX/T2jB78GQIgn/p/dgcIKxZdi164OOvXM67l845wLNkZIILiaQ165k1Cl2upC6Iy04If99HvJ+A9lCtag52Cns9sB1+pRIerEJnVyypaxBt45dZZetDgrpNZXTQmzfSPSgOqd25Uej5Lt7uOdchFKn2jNNhesT7OqFmqp4lBuukYXedPTMiHDONTT0nQ/htb5Z5ryRAHBnzVOsO8rG0 Q2+u62Fl dcdO/x4TfYOZdJUzZN/BLkGZGjW6TbxJ1Om1fe5AJcFGLKPjExXXOlI6EGKkjISLNpV0ReCKiZ/BcYsf9UsQ5h6qr1BSfrxBSw+jevF8+ypsNBm9D7exwnrKFc9wCnmdLTM1QA3mdOw5GN4UoDriUy+2F7D+okCtTY+vCpKx2Ous1EpzEHCORW6r2Q0GWqJuRTsXiFcgci0pxweZMbYGBjHcPGuB52X8Pl/GUsjkgCKx5PB9K2jbn6GtyPDAq6Mz9HrABu+zLADTbtno= 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: DAMOS_LRU_[DE]PRIO are DAMOS actions for making balance of active and inactive memory size. There is no appripriate DAMOS quota auto-tuning target metric for the use case. Add two new DAMOS quota goal metrics for the purpose, namely DAMOS_QUOTA_[IN]ACTIVE_MEM_BP. Those weill represent the ratio of [in]active memory to total (inactive + active) memory. Hence, users will be able to ask DAMON to, for example, "find hot and cold memory, and move pages of those to active and inactive LRU lists, adjusting the hot/cold thresholds aiming 50:50 active:inactive memory ratio." Signed-off-by: SeongJae Park --- include/linux/damon.h | 4 ++++ mm/damon/core.c | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 517f48ffe782..c2fc6c8cbbe4 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -179,6 +179,8 @@ enum damos_action { * @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. + * @DAMOS_QUOTA_ACTIVE_MEM_BP: Active to [in]active memory ratio. + * @DAMOS_QUOTA_INACTIVE_MEM_BP: Inactive to [in]active memory ratio. * @NR_DAMOS_QUOTA_GOAL_METRICS: Number of DAMOS quota goal metrics. * * Metrics equal to larger than @NR_DAMOS_QUOTA_GOAL_METRICS are unsupported. @@ -188,6 +190,8 @@ enum damos_quota_goal_metric { DAMOS_QUOTA_SOME_MEM_PSI_US, DAMOS_QUOTA_NODE_MEM_USED_BP, DAMOS_QUOTA_NODE_MEM_FREE_BP, + DAMOS_QUOTA_ACTIVE_MEM_BP, + DAMOS_QUOTA_INACTIVE_MEM_BP, NR_DAMOS_QUOTA_GOAL_METRICS, }; diff --git a/mm/damon/core.c b/mm/damon/core.c index 02493d71460c..88ffc826a118 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -2027,6 +2027,23 @@ static __kernel_ulong_t damos_get_node_mem_bp( } #endif +/* + * Returns LRU-active memory to LRU-inactive memory size ratio. + */ +static unsigned int damos_get_in_active_mem_bp(bool active_ratio) +{ + unsigned long active, inactive, total; + + /* This should align with /proc/meminfo output */ + active = global_node_page_state(NR_LRU_BASE + LRU_ACTIVE_ANON) + + global_node_page_state(NR_LRU_BASE + LRU_ACTIVE_FILE); + inactive = global_node_page_state(NR_LRU_BASE + LRU_INACTIVE_ANON) + + global_node_page_state(NR_LRU_BASE + LRU_INACTIVE_FILE); + total = active + inactive; + if (active_ratio) + return active * 10000 / total; + return inactive * 10000 / total; +} static void damos_set_quota_goal_current_value(struct damos_quota_goal *goal) { @@ -2046,6 +2063,11 @@ static void damos_set_quota_goal_current_value(struct damos_quota_goal *goal) case DAMOS_QUOTA_NODE_MEM_FREE_BP: goal->current_value = damos_get_node_mem_bp(goal); break; + case DAMOS_QUOTA_ACTIVE_MEM_BP: + case DAMOS_QUOTA_INACTIVE_MEM_BP: + goal->current_value = damos_get_in_active_mem_bp( + goal->metric == DAMOS_QUOTA_ACTIVE_MEM_BP); + break; default: break; } -- 2.39.5