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 68EADC83013 for ; Wed, 2 Jul 2025 05:16:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EDFB46B0099; Wed, 2 Jul 2025 01:16:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EB71B6B00A7; Wed, 2 Jul 2025 01:16:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DF33D6B00CD; Wed, 2 Jul 2025 01:16:10 -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 D16916B0099 for ; Wed, 2 Jul 2025 01:16:10 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 8E12D1246F7 for ; Wed, 2 Jul 2025 05:16:10 +0000 (UTC) X-FDA: 83618163300.12.484CBD0 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf16.hostedemail.com (Postfix) with ESMTP id 057F8180004 for ; Wed, 2 Jul 2025 05:16:08 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=IpCZFPmZ; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf16.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751433369; a=rsa-sha256; cv=none; b=Y59dstbjhriLusV3xJQoGzhwSpVkaizWTlgPe0COSBbJ5YISucOIlF0msJyTpnyufhgOm/ XhTe5afvgHi37apbvkkaPVuhxZgWFfqGO8XLNTmBKCaigiBVtmeysjMtz+WkZptafWPqdH iAx7HXJ7GDj+sT+QiBHhDb0Fu+1aP1U= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=IpCZFPmZ; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf16.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 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=1751433369; 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=0rJP8SqBFaxiArIUQqna3U3+d+FEoOQOXCUhZySRb8k=; b=S4ipGPyupCMa4X2CjK9BCg4DZC7fOLJ/4zbuCUFkcTtKRJAy/at2swXe0CjuyJd0QPASLB cQfRBQv07+g8HLHjHEddhegY0wKEj9JnNbRJIk7YSjdbkjWtZ8daoS3P0M42botnKXJoyY eSUWo46AiejXoHWhJIoBuKScK0YCHJo= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 826C4A53235; Wed, 2 Jul 2025 05:16:08 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 07E9DC4CEEE; Wed, 2 Jul 2025 05:16:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751433368; bh=NXC7V5X3FMbwc1GLLQCWiBZv7p+8RjgN4vG6hiuSoDg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IpCZFPmZwK/QOUz7maPmsOXQbD7D1Wy7ZVA+MtfsllEjCEZPjGKQtaPtbNilbihS3 IZN44M6R7a/CCE9UXc3Bel4ZOUEfYz/Jno/xBS4nNyDbsBjC78bjUJ+r4ftkTpbT7m eftGF13ud+UoXyXfrpOgJU9A6u/0OX7t1BqhObXYjh6lhGKNoQRKeXQac81DT1kGjk cieWk1vku2nd5vMt+NgpAIfBvWx2ncdppAl0RV6CRnGaGHhksLdq4TBfpycOuXuB0l Cka5t6y9Xm60o3psnM8AUVJLVO5fOQQZ5p9NpIjNgJVzwqcZ3hxG8CE5I9S+Vl+nbD H7Hg9deOTtSOA== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , Bijan Tabatabai , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 2/6] mm/damon/core: add damos->migrate_dest field Date: Tue, 1 Jul 2025 22:15:54 -0700 Message-Id: <20250702051558.54138-3-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250702051558.54138-1-sj@kernel.org> References: <20250702051558.54138-1-sj@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 057F8180004 X-Stat-Signature: 4nbadkprsh7j84fj47754xi8k6wemgi6 X-HE-Tag: 1751433368-153335 X-HE-Meta: U2FsdGVkX19TR+Pecq959bKljoF/ySXDMjFmbvliudsQaE2/wWIiJMBLrg2/iu73ZCzl5tSRf4FEMQd3RMO+8SXwL1FppLxaYLogdHb5zZ/rP0mt1pyO0/ckrmf5BTamOuQWbB4iURf1YuSf63G/k7U+7zha1b/LiaqEn3Cj61Jzz1IMHCWhmtICoXzbS4xqWXlX4x9wWpevi92B/X3RjW1PkNtk8xKJNrKSW2FzOJhrmOC9WrVsGJNswICw9z1INEUAkbEWBaEt/Fw7GuUo9EMr4IX3tQk+eATEy96vFmMR1qBuUU6MFRfHPWnrjV74DaJG1MERucBE4rHQChT2mlUpyD32eF35hkPUX8RdvYSNBD23Op6ejvoFX5QF5+2TVXj33WfHZEOYgSRCKl3s2NRVxIAzbSjmBFkTPUKZxq69d4GBOn+pnpsSccoiSDIgi/qEZShja+WR/t97ym203NNvaLnmYZPxwN+R0ZfwLFMciQhkGWTbrX2J6r5S6094A+n1dPCQ9q/FjR14SIhOZIoV2CGRqas6MTbOPgXwXqip43bMQGxrEQbx4fftg0KsNCvJZBcUrds3BPqHi3mrcLjoh4ce0dV1H0rjwf5xG4vYEm8ILYep8S2sx/3BTjEMdTYAvZ1EH1UolgENMd131nea43jEGiNzM3Yswb0Sw9RyBKXsSQkrqBMhwD8T9d0ReBT6vtJAn0EXN/m66TBQHsm10zY7y0JlJJEMqM23bqwMD4EffXJY1wvPzK05QX3qSAc6YVQTSm+rPaex6h43WvceU2TbDsEe/eQzgFyVYEzsJa2YlC45qMNZZLmWY5HxGhQxi9pAXiBAkJhSMr7fT8si9oyLg574ryxo2+npMXkNYQgDnd3KU2o0wGIkB0H2JfHGqRqOD3QtPmykeyYlGtS5WHHjTwqbQp1atheAgkZ5nFA+TAc4z+6+RLCh5J964saSOme6HYeyBYpayao D5XRvOf9 w9pzG4L3DyqgEMPJ6ElEivKWX9FXq2Utnx9unRDI4pmw5rxez31FOPrPV7ClkUbO726upTWjAtALlEmox6l9HTrJKe/XsT/E9w6Hq7nINgbmBY6Ig978pDu7mQAEelhBguWr7DfS8Y/GldIrutFYDjvHAe/oe4drMd6EYm4W0UjioQ8yZcEyTCE5Nbm0nU5FZtFgPCAXgpCiRoaH1yYb4H9w15zd2VKCt6QhYAr/Ff+hmsMKXlRKz3phTY+4zmaTpIWiJCeTJoDvbn1Xi7ikH7uAj42kIVNUSJrMl1wiHEAtr9l/rN32GLSJZ6w== 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: Add a new field to 'struct damos', namely migrate_dest, to allow DAMON API callers specify multiple migration destination nodes and their weights. Also update 'struct damos' creation and destruction functions accordingly to initialize the new field and free up the API caller-allocated buffers on those, respectively. Signed-off-by: SeongJae Park --- include/linux/damon.h | 13 ++++++++++--- mm/damon/core.c | 4 ++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/include/linux/damon.h b/include/linux/damon.h index d60addd0b7c8..6370cf44486f 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -470,6 +470,7 @@ struct damos_migrate_dest { * @apply_interval_us: The time between applying the @action. * @quota: Control the aggressiveness of this scheme. * @wmarks: Watermarks for automated (in)activation of this scheme. + * @migrate_dest: Destination nodes if @action is "migrate_{hot,cold}". * @target_nid: Destination node if @action is "migrate_{hot,cold}". * @filters: Additional set of &struct damos_filter for &action. * @ops_filters: ops layer handling &struct damos_filter objects list. @@ -488,9 +489,12 @@ struct damos_migrate_dest { * monitoring context are inactive, DAMON stops monitoring either, and just * repeatedly checks the watermarks. * + * @migrate_dest specifies multiple migration target nodes with different + * weights for migrate_hot or migrate_cold actions. @target_nid is ignored if + * this is set. + * * @target_nid is used to set the migration target node for migrate_hot or - * migrate_cold actions, which means it's only meaningful when @action is either - * "migrate_hot" or "migrate_cold". + * migrate_cold actions, and @migrate_dest is unset. * * Before applying the &action to a memory region, &struct damon_operations * implementation could check pages of the region and skip &action to respect @@ -533,7 +537,10 @@ struct damos { struct damos_quota quota; struct damos_watermarks wmarks; union { - int target_nid; + struct { + int target_nid; + struct damos_migrate_dest migrate_dest; + }; }; struct list_head filters; struct list_head ops_filters; diff --git a/mm/damon/core.c b/mm/damon/core.c index 979b29e16ef4..185aafa2e401 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -407,6 +407,7 @@ struct damos *damon_new_scheme(struct damos_access_pattern *pattern, scheme->wmarks = *wmarks; scheme->wmarks.activated = true; + scheme->migrate_dest = (struct damos_migrate_dest){}; scheme->target_nid = target_nid; return scheme; @@ -449,6 +450,9 @@ void damon_destroy_scheme(struct damos *s) damos_for_each_filter_safe(f, next, s) damos_destroy_filter(f); + + kfree(s->migrate_dest.node_id_arr); + kfree(s->migrate_dest.weight_arr); damon_del_scheme(s); damon_free_scheme(s); } -- 2.39.5